blob: 6d6e3bd925f1cd2446e255ff2aba1f536436298e [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 }
Leo Chang9d76f622013-08-23 16:34:52 -0700505 else
506 {
507 vos_event_init(&wdaContext->ftmStopDoneEvent);
508 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 return status;
510}
511
Jeff Johnson295189b2012-06-20 16:38:30 -0700512/*
513 * FUNCTION: WDA_prepareConfigTLV
514 * Function to prepare CFG for DAL(WDA)
515 */
516VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
517 WDI_StartReqParamsType *wdiStartParams )
518{
519 /* get pMac to acess CFG data base */
520 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
521 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
522 tHalCfg *tlvStruct = NULL ;
523 tANI_U8 *tlvStructStart = NULL ;
524 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
525 v_PVOID_t *configParam;
526 tANI_U32 configParamSize;
527 tANI_U32 *configDataValue;
528 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700529 tANI_U8 i;
530
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 if ((NULL == pMac)||(NULL == wdaContext))
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 VOS_ASSERT(0);
536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
539 WNI_CFG_STA_ID_LEN +
540 WNI_CFG_EDCA_WME_ACBK_LEN +
541 WNI_CFG_EDCA_WME_ACBE_LEN +
542 WNI_CFG_EDCA_WME_ACVI_LEN +
543 WNI_CFG_EDCA_WME_ACVO_LEN +
544 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* malloc memory for all configs in one shot */
546 configParam = vos_mem_malloc(configParamSize);
547
548 if(NULL == configParam )
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700551 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 VOS_ASSERT(0) ;
553 return VOS_STATUS_E_NOMEM;
554 }
555 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 tlvStruct = (tHalCfg *)configParam;
558 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 /* TODO: Remove Later */
560 /* QWLAN_HAL_CFG_STA_ID */
561 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
562 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
563 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
564 eSIR_SUCCESS)
565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
567 "Failed to get value for WNI_CFG_STA_ID");
568 goto handle_failure;
569 }
570 tlvStruct->length = strLength ;
571 /* calculate the pad bytes to have the CFG in aligned format */
572 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
573 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
575 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
577 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
581 != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
590 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
594 eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
603 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
615
616 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
617 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
618 tlvStruct->length = sizeof(tANI_U32);
619 configDataValue = (tANI_U32 *)(tlvStruct + 1);
620 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
621 configDataValue ) != eSIR_SUCCESS)
622 {
623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
624 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
625 goto handle_failure;
626 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
628 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 /* QWLAN_HAL_CFG_CAL_PERIOD */
630 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
631 tlvStruct->length = sizeof(tANI_U32);
632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
633 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
634 != eSIR_SUCCESS)
635 {
636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
637 "Failed to get value for WNI_CFG_CAL_PERIOD");
638 goto handle_failure;
639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
641 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* QWLAN_HAL_CFG_CAL_CONTROL */
643 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
647 != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_CAL_CONTROL");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_PROXIMITY */
656 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_PROXIMITY");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
669 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
682 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
686 eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
695 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
699 configDataValue ) != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
708 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
721 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
725 eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
734 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
747 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
760 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
764 configDataValue ) != eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length));
772
773 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
774 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
778 configDataValue ) != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
787 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
791 configDataValue ) != eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
799
800 /* QWLAN_HAL_CFG_FIXED_RATE */
801 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
802 tlvStruct->length = sizeof(tANI_U32);
803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
804 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
805 != eSIR_SUCCESS)
806 {
807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
808 "Failed to get value for WNI_CFG_FIXED_RATE");
809 goto handle_failure;
810 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
812 + sizeof(tHalCfg) + tlvStruct->length));
813
814 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
815 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
829 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
833 configDataValue ) != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
842 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
850 goto handle_failure;
851 }
852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
855 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
868 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
881 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
893
894#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
908#endif
909 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
923 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
935
936 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
976 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
989 /* QWLAN_HAL_CFG_STATS_PERIOD */
990 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_STATS_PERIOD");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1003 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1007 eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1016 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1020 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1024 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1025 tlvStruct->length = sizeof(tANI_U32);
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1028 != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1032 goto handle_failure;
1033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1035 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1037 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1038 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1040 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1041 &strLength) != eSIR_SUCCESS)
1042 {
1043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1044 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1045 goto handle_failure;
1046 }
1047 tlvStruct->length = strLength;
1048 /* calculate the pad bytes to have the CFG in aligned format */
1049 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1050 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1054 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1055 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1058 &strLength) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1062 goto handle_failure;
1063 }
1064 tlvStruct->length = strLength;
1065 /* calculate the pad bytes to have the CFG in aligned format */
1066 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1067 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1071 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1072 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1075 &strLength) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1079 goto handle_failure;
1080 }
1081 tlvStruct->length = strLength;
1082 /* calculate the pad bytes to have the CFG in aligned format */
1083 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1084 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1086 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001087 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1088 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1089 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1092 &strLength) != eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1096 goto handle_failure;
1097 }
1098 tlvStruct->length = strLength;
1099 /* calculate the pad bytes to have the CFG in aligned format */
1100 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1101 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1105 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1118 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1131 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1222 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1235 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1248 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1249 * into FW, so the parameters are added here.
1250 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1266 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
Wilson Tsaof8b37942013-09-06 10:49:00 -07001376 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1377 {
1378 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1379 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1387 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1395 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409 }
1410
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418
1419 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1420 {
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428 }
1429
1430 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1431 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
1437
Jeff Johnson32d95a32012-09-10 13:15:23 -07001438 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1443 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1444 wcnssCompiledApiVersion.minor,
1445 wcnssCompiledApiVersion.version,
1446 wcnssCompiledApiVersion.revision);
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
Jeff Johnsond13512a2012-07-17 11:42:19 -07001450 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1465 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1469 configDataValue ) != eSIR_SUCCESS)
1470 {
1471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1472 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1473 goto handle_failure;
1474 }
1475
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1480 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1484 != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001494 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1495 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001508#ifdef WLAN_SOFTAP_VSTA_FEATURE
1509 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522#endif
1523
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001524 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1525 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528
1529 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1530 != eSIR_SUCCESS)
1531 {
1532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1533 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1534 goto handle_failure;
1535 }
1536
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301540/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1541 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1545 configDataValue ) != eSIR_SUCCESS)
1546 {
1547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1548 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1549 goto handle_failure;
1550 }
1551
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301554#ifdef FEATURE_WLAN_TDLS
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301609
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001610 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1611 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1615 configDataValue ) != eSIR_SUCCESS)
1616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1619 goto handle_failure;
1620 }
1621
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001624
1625 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1626 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1630 != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1634 goto handle_failure;
1635 }
1636 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length));
1638
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301639 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1640 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301654 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1655 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1663 goto handle_failure;
1664 }
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001669#ifdef WLAN_DEBUG
1670 {
1671 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1673 "****** Dumping CFG TLV ***** ");
1674 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1675 {
1676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1677 "%02x %02x %02x %02x %02x %02x %02x %02x",
1678 tlvStructStart[i],
1679 tlvStructStart[i+1],
1680 tlvStructStart[i+2],
1681 tlvStructStart[i+3],
1682 tlvStructStart[i+4],
1683 tlvStructStart[i+5],
1684 tlvStructStart[i+6],
1685 tlvStructStart[i+7]);
1686 }
1687 /* Dump the bytes in the last line*/
1688 for (; i < wdiStartParams->usConfigBufferLen; i++)
1689 {
1690 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1691 "%02x ",tlvStructStart[i]);
1692 }
1693 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1694 "**************************** ");
1695 }
1696#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001698handle_failure:
1699 vos_mem_free(configParam);
1700 return VOS_STATUS_E_FAILURE;
1701}
Jeff Johnson295189b2012-06-20 16:38:30 -07001702/*
1703 * FUNCTION: WDA_wdiCompleteCB
1704 * call the voss call back function
1705 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001706void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001707{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1709 tWDA_CbContext *wdaContext;
1710
1711 if(NULL == pWdaParams)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001715 VOS_ASSERT(0) ;
1716 return ;
1717 }
1718
1719 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1720
Jeff Johnson295189b2012-06-20 16:38:30 -07001721 if (NULL == wdaContext)
1722 {
1723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001724 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 return ;
1726 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001727
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001729 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001731 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001733 vos_mem_free(pWdaParams);
1734
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 if(WDI_STATUS_SUCCESS != status)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1738 "WDI stop callback returned failure" );
1739 VOS_ASSERT(0) ;
1740 }
1741 else
1742 {
1743 wdaContext->wdaState = WDA_STOP_STATE;
1744 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001745
Leo Chang9d76f622013-08-23 16:34:52 -07001746 /* FTM Driver stop procedure should be synced.
1747 * Stop and Close will happen on same context */
1748 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1749 {
1750 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1751 {
1752 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1753 "%s: FTM Stop Event Set Fail", __func__);
1754 VOS_ASSERT(0);
1755 }
1756 }
1757
Jeff Johnson295189b2012-06-20 16:38:30 -07001758 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001759 vos_WDAComplete_cback(wdaContext->pVosContext);
1760
Jeff Johnson295189b2012-06-20 16:38:30 -07001761 return ;
1762}
Jeff Johnson295189b2012-06-20 16:38:30 -07001763/*
1764 * FUNCTION: WDA_stop
1765 * call WDI_stop
1766 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001767VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1768{
1769 WDI_Status wdiStatus;
1770 VOS_STATUS status = VOS_STATUS_SUCCESS;
1771 WDI_StopReqParamsType *wdiStopReq;
1772 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001773 tWDA_ReqParams *pWdaParams ;
1774
Jeff Johnson295189b2012-06-20 16:38:30 -07001775 if (NULL == pWDA)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001778 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001779 VOS_ASSERT(0);
1780 return VOS_STATUS_E_FAILURE;
1781 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001782 if (pWDA->wdiFailed == true)
1783 {
1784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001785 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001786 return VOS_STATUS_E_ALREADY;
1787 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001788
Jeff Johnson295189b2012-06-20 16:38:30 -07001789 /* FTM mode stay START_STATE */
1790 if( (WDA_READY_STATE != pWDA->wdaState) &&
1791 (WDA_INIT_STATE != pWDA->wdaState) &&
1792 (WDA_START_STATE != pWDA->wdaState) )
1793 {
1794 VOS_ASSERT(0);
1795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001796 wdiStopReq = (WDI_StopReqParamsType *)
1797 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1798 if(NULL == wdiStopReq)
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001802 VOS_ASSERT(0);
1803 return VOS_STATUS_E_NOMEM;
1804 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001805
Jeff Johnson295189b2012-06-20 16:38:30 -07001806 wdiStopReq->wdiStopReason = reason;
1807 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001808
1809 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1810 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001811 {
1812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001814 VOS_ASSERT(0);
1815 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001816 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001817 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001818
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001819 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1820 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001821 {
1822 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001823 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001825
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001826 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1827 pWdaParams->wdaMsgParam = NULL;
1828 pWdaParams->pWdaContext = pWDA;
1829
Jeff Johnson295189b2012-06-20 16:38:30 -07001830 /* call WDI stop */
1831 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001832 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1833
Jeff Johnson295189b2012-06-20 16:38:30 -07001834 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1839 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001840 status = VOS_STATUS_E_FAILURE;
1841 }
Leo Chang9d76f622013-08-23 16:34:52 -07001842
1843 /* FTM Driver stop procedure should be synced.
1844 * Stop and Close will happen on same context */
1845 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1846 {
1847 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1848 WDI_RESPONSE_TIMEOUT);
1849 if (status != VOS_STATUS_SUCCESS)
1850 {
1851 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1852 "%s: FTM Stop Timepoout", __func__);
1853 VOS_ASSERT(0);
1854 vos_event_reset(&pWDA->ftmStopDoneEvent);
1855 }
1856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 return status;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/*
1860 * FUNCTION: WDA_close
1861 * call WDI_close and free the WDA context
1862 */
1863VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1864{
Jeff Johnson43971f52012-07-17 12:26:56 -07001865 VOS_STATUS status = VOS_STATUS_SUCCESS;
1866 WDI_Status wstatus;
1867 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001868 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001869 if (NULL == wdaContext)
1870 {
1871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001872 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 return VOS_STATUS_E_FAILURE;
1874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1876 (WDA_STOP_STATE != wdaContext->wdaState))
1877 {
1878 VOS_ASSERT(0);
1879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001880 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001881 wstatus = WDI_Close();
1882 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001883 {
1884 status = VOS_STATUS_E_FAILURE;
1885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001886 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001888 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1889 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1892 "WDI Sync Event destroy failed - status = %d\n", status);
1893 status = VOS_STATUS_E_FAILURE;
1894 }
1895
Jeff Johnson43971f52012-07-17 12:26:56 -07001896 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001897 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001898 {
1899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1900 "VOS Event destroy failed - status = %d\n", status);
1901 status = VOS_STATUS_E_FAILURE;
1902 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001903 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001904 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001905 {
1906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1907 "VOS Event destroy failed - status = %d\n", status);
1908 status = VOS_STATUS_E_FAILURE;
1909 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001910 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001911 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 {
1913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1914 "VOS Event destroy failed - status = %d\n", status);
1915 status = VOS_STATUS_E_FAILURE;
1916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001918 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001919 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 {
1921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1922 "error in WDA close " );
1923 status = VOS_STATUS_E_FAILURE;
1924 }
1925 return status;
1926}
Jeff Johnson295189b2012-06-20 16:38:30 -07001927/*
1928 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1929 * returns 1 if the compiled version is greater than or equal to the input version
1930 */
1931
1932uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1933{
1934 VOS_STATUS status = VOS_STATUS_SUCCESS;
1935 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1936 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001937 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001938 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1939 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1940 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1941 (compiledVersion.revision >= revision)))
1942 return 1;
1943 else
1944 return 0;
1945}
Jeff Johnson295189b2012-06-20 16:38:30 -07001946/*
1947 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1948 * returns 1 if the compiled version is greater than or equal to the input version
1949 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001950uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1951{
1952 VOS_STATUS status = VOS_STATUS_SUCCESS;
1953 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1954 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001956 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1957 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1958 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1959 (reportedVersion.revision >= revision)))
1960 return 1;
1961 else
1962 return 0;
1963}
Jeff Johnson295189b2012-06-20 16:38:30 -07001964/*
1965 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1966 * Returns the version of the WCNSS WLAN API with which the HOST
1967 * device driver was compiled
1968 */
1969VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1970 tSirVersionType *pVersion)
1971{
1972 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001974 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 if ((NULL == pvosGCtx) || (NULL == pVersion))
1976 {
1977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001978 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 VOS_ASSERT(0);
1980 return VOS_STATUS_E_FAILURE;
1981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001982 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1983 if (NULL == pWDA )
1984 {
1985 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001986 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 VOS_ASSERT(0);
1988 return VOS_STATUS_E_FAILURE;
1989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001990 *pVersion = pWDA->wcnssWlanCompiledVersion;
1991 return VOS_STATUS_SUCCESS;
1992}
Jeff Johnson295189b2012-06-20 16:38:30 -07001993/*
1994 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1995 * Returns the version of the WCNSS WLAN API with which the WCNSS
1996 * device driver was compiled
1997 */
1998VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1999 tSirVersionType *pVersion)
2000{
2001 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002003 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 if ((NULL == pvosGCtx) || (NULL == pVersion))
2005 {
2006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002007 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 VOS_ASSERT(0);
2009 return VOS_STATUS_E_FAILURE;
2010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002011 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2012 if (NULL == pWDA )
2013 {
2014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002015 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 VOS_ASSERT(0);
2017 return VOS_STATUS_E_FAILURE;
2018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 *pVersion = pWDA->wcnssWlanReportedVersion;
2020 return VOS_STATUS_SUCCESS;
2021}
Jeff Johnson295189b2012-06-20 16:38:30 -07002022/*
2023 * FUNCTION: WDA_GetWcnssSoftwareVersion
2024 * Returns the WCNSS Software version string
2025 */
2026VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2027 tANI_U8 *pVersion,
2028 tANI_U32 versionBufferSize)
2029{
2030 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002032 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 if ((NULL == pvosGCtx) || (NULL == pVersion))
2034 {
2035 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002036 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 VOS_ASSERT(0);
2038 return VOS_STATUS_E_FAILURE;
2039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002040 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2041 if (NULL == pWDA )
2042 {
2043 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002044 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 VOS_ASSERT(0);
2046 return VOS_STATUS_E_FAILURE;
2047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2049 return VOS_STATUS_SUCCESS;
2050}
Jeff Johnson295189b2012-06-20 16:38:30 -07002051/*
2052 * FUNCTION: WDA_GetWcnssHardwareVersion
2053 * Returns the WCNSS Hardware version string
2054 */
2055VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2056 tANI_U8 *pVersion,
2057 tANI_U32 versionBufferSize)
2058{
2059 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002061 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 if ((NULL == pvosGCtx) || (NULL == pVersion))
2063 {
2064 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002065 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002066 VOS_ASSERT(0);
2067 return VOS_STATUS_E_FAILURE;
2068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2070 if (NULL == pWDA )
2071 {
2072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002073 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 VOS_ASSERT(0);
2075 return VOS_STATUS_E_FAILURE;
2076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2078 return VOS_STATUS_SUCCESS;
2079}
Jeff Johnson295189b2012-06-20 16:38:30 -07002080/*
2081 * FUNCTION: WDA_WniCfgDnld
2082 * Trigger CFG Download
2083 */
2084VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2085{
2086 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 v_VOID_t *pFileImage = NULL;
2089 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002090 v_VOID_t *pCfgBinary = NULL;
2091 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002093
Jeff Johnson295189b2012-06-20 16:38:30 -07002094 if (NULL == pMac )
2095 {
2096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002097 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 VOS_ASSERT(0);
2099 return VOS_STATUS_E_FAILURE;
2100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 /* get the number of bytes in the CFG Binary... */
2102 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2103 &cbFileImageSize );
2104 if ( VOS_STATUS_E_NOMEM != vosStatus )
2105 {
2106 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2107 "Error obtaining binary size" );
2108 goto fail;
2109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 // malloc a buffer to read in the Configuration binary file.
2111 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002112 if ( NULL == pFileImage )
2113 {
2114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2115 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2116 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 vosStatus = VOS_STATUS_E_NOMEM;
2118 goto fail;
2119 }
2120
2121 /* Get the entire CFG file image... */
2122 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2123 &cbFileImageSize );
2124 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2127 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2128 cbFileImageSize );
2129 goto fail;
2130 }
2131
2132 /*
2133 * Validate the binary image. This function will return a pointer
2134 * and length where the CFG binary is located within the binary image file.
2135 */
2136 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2137 &pCfgBinary, &cbCfgBinarySize );
2138 if ( VOS_FALSE == bStatus )
2139 {
2140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2141 "Error: Cannot find STA CFG in binary image file" );
2142 vosStatus = VOS_STATUS_E_FAILURE;
2143 goto fail;
2144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002145 /*
2146 * TODO: call the config download function
2147 * for now calling the existing cfg download API
2148 */
2149 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002150 vosStatus = VOS_STATUS_SUCCESS;
2151
2152 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002153
2154fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002155 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 return vosStatus;
2157}
Jeff Johnson295189b2012-06-20 16:38:30 -07002158/* -----------------------------------------------------------------
2159 * WDI interface
2160 * -----------------------------------------------------------------
2161 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002162/*
2163 * FUNCTION: WDA_suspendDataTxCallback
2164 * call back function called from TL after suspend Transmission
2165 */
2166VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2167 v_U8_t* ucSTAId,
2168 VOS_STATUS vosStatus)
2169{
2170 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002172 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 if (NULL == pWDA )
2174 {
2175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002176 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 VOS_ASSERT(0);
2178 return VOS_STATUS_E_FAILURE;
2179 }
2180 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2181 {
2182 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2183 }
2184 else
2185 {
2186 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 /* Trigger the event to bring the WDA TL suspend function to come
2189 * out of wait*/
2190 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2191 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2192 {
2193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2194 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002196 /* If TL suspended had timedout before this callback was called, resume back
2197 * TL.*/
2198 if (pWDA->txSuspendTimedOut)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2201 "Late TLSuspendCallback, resuming TL back again\n");
2202 WDA_ResumeDataTx(pWDA);
2203 pWDA->txSuspendTimedOut = FALSE;
2204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 return VOS_STATUS_SUCCESS;
2206}
Jeff Johnson295189b2012-06-20 16:38:30 -07002207/*
2208 * FUNCTION: WDA_suspendDataTx
2209 * Update TL to suspend the data Transmission
2210 */
2211VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2212{
2213 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2214 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002215
2216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002217 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 if (pWDA->txSuspendTimedOut)
2220 {
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2222 "TL suspend timedout previously, CB not called yet\n");
2223 return status;
2224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 /* Reset the event to be not signalled */
2226 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2227 if(!VOS_IS_STATUS_SUCCESS(status))
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2230 "VOS Event reset failed - status = %d\n",status);
2231 return VOS_STATUS_E_FAILURE;
2232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002234 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 WDA_SuspendDataTxCallback);
2236 if(status != VOS_STATUS_SUCCESS)
2237 {
2238 return status;
2239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002240 /* Wait for the event to be set by the TL, to get the response of
2241 * suspending the TX queues, this event should be set by the Callback
2242 * function called by TL*/
2243 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2244 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2245 if(!VOS_IS_STATUS_SUCCESS(status))
2246 {
2247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2248 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002249 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 /* Set this flag to true when TL suspend times out, so that when TL
2251 * suspend eventually happens and calls the callback, TL can be resumed
2252 * right away by looking at this flag when true.*/
2253 pWDA->txSuspendTimedOut = TRUE;
2254 }
2255 else
2256 {
2257 pWDA->txSuspendTimedOut = FALSE;
2258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2260 {
2261 status = VOS_STATUS_SUCCESS;
2262 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002263 return status;
2264}
Jeff Johnson295189b2012-06-20 16:38:30 -07002265/*
2266 * FUNCTION: WDA_resumeDataTx
2267 * Update TL to resume the data Transmission
2268 */
2269VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2270{
2271 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002272
2273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002274 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002275
2276 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 return status;
2278}
Jeff Johnson295189b2012-06-20 16:38:30 -07002279/*
2280 * FUNCTION: WDA_InitScanReqCallback
2281 * Trigger Init SCAN callback
2282 */
2283void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2284{
2285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2286 tWDA_CbContext *pWDA;
2287 tInitScanParams *pWDA_ScanParam ;
2288 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002290 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 if(NULL == pWdaParams)
2292 {
2293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002295 VOS_ASSERT(0) ;
2296 return ;
2297 }
2298 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2299 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 if(NULL == pWDA_ScanParam)
2301 {
2302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002303 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002304 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2306 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 return ;
2308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 if(WDI_STATUS_SUCCESS != wdiStatus)
2310 {
2311 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 if(VOS_STATUS_SUCCESS != status)
2313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002315 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 }
2317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002318 /* free WDI command buffer */
2319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002321
Jeff Johnson295189b2012-06-20 16:38:30 -07002322
2323 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002324 /* without converting the Status to Failure or Success Just
2325 pass the same status to lim */
2326 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 /* send SCAN RSP message back to PE */
2328 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 return ;
2330}
2331
2332/*
2333 * FUNCTION: WDA_ProcessInitScanReq
2334 * Trigger Init SCAN in DAL
2335 */
2336VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2337 tInitScanParams *initScanParams)
2338{
2339 WDI_Status status = WDI_STATUS_SUCCESS ;
2340 WDI_InitScanReqParamsType *wdiInitScanParam =
2341 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2342 sizeof(WDI_InitScanReqParamsType)) ;
2343 tWDA_ReqParams *pWdaParams;
2344 tANI_U8 i = 0;
2345
2346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 if(NULL == wdiInitScanParam)
2349 {
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002351 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 VOS_ASSERT(0);
2353 return VOS_STATUS_E_NOMEM;
2354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2356 if(NULL == pWdaParams)
2357 {
2358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 VOS_ASSERT(0);
2361 vos_mem_free(wdiInitScanParam);
2362 return VOS_STATUS_E_NOMEM;
2363 }
2364
2365 /* Copy init Scan params to WDI structure */
2366 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2367 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2368 sizeof(tSirMacAddr)) ;
2369 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2370 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2371 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2373 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2375 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2377 {
2378 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2379 initScanParams->scanEntry.bssIdx[i] ;
2380 }
2381
2382 /* if Frame length, copy macMgmtHdr or WDI structure */
2383 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2384 {
2385 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2386 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2387 }
2388 wdiInitScanParam->wdiReqStatusCB = NULL ;
2389
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 /* Store Init Req pointer, as this will be used for response */
2391 pWdaParams->pWdaContext = pWDA;
2392 pWdaParams->wdaMsgParam = initScanParams;
2393 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 /* first try to suspend TX */
2395 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 if(WDI_STATUS_SUCCESS != status)
2397 {
2398 goto handleWdiFailure;
2399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 /* call DAL API to pass init scan request to DAL */
2401 status = WDI_InitScanReq(wdiInitScanParam,
2402 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 if(IS_WDI_STATUS_FAILURE(status))
2404 {
2405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2406 "error in WDA Init Scan, Resume Tx " );
2407 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 VOS_ASSERT(0) ;
2409
2410 goto handleWdiFailure;
2411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002413handleWdiFailure:
2414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2415 "Failure in WDI Api, free all the memory " );
2416 /* free WDI command buffer */
2417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2418 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002419 /* send Failure to PE */
2420 initScanParams->status = eSIR_FAILURE ;
2421 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 return CONVERT_WDI2VOS_STATUS(status) ;
2423}
2424
Jeff Johnson295189b2012-06-20 16:38:30 -07002425/*
2426 * FUNCTION: WDA_StartScanReqCallback
2427 * send Start SCAN RSP back to PE
2428 */
2429void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2430 void* pUserData)
2431{
2432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2433 tWDA_CbContext *pWDA;
2434 tStartScanParams *pWDA_ScanParam;
2435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002436 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002437 if(NULL == pWdaParams)
2438 {
2439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002440 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 VOS_ASSERT(0) ;
2442 return ;
2443 }
2444 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2445 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 if(NULL == pWDA_ScanParam)
2447 {
2448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002449 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002451 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 return ;
2453 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2455 {
2456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002457 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002458 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002459 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 return ;
2461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2463 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002464
Jeff Johnson295189b2012-06-20 16:38:30 -07002465
2466 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002467 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 /* send SCAN RSP message back to PE */
2469 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 return ;
2471}
2472
Jeff Johnson295189b2012-06-20 16:38:30 -07002473/*
2474 * FUNCTION: WDA_ProcessStartScanReq
2475 * Trigger start SCAN in WDI
2476 */
2477VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2478 tStartScanParams *startScanParams)
2479{
2480 WDI_Status status = WDI_STATUS_SUCCESS;
2481 WDI_StartScanReqParamsType *wdiStartScanParams =
2482 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2483 sizeof(WDI_StartScanReqParamsType)) ;
2484 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 if(NULL == wdiStartScanParams)
2488 {
2489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 VOS_ASSERT(0);
2492 return VOS_STATUS_E_NOMEM;
2493 }
2494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2495 if(NULL == pWdaParams)
2496 {
2497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 VOS_ASSERT(0);
2500 vos_mem_free(wdiStartScanParams);
2501 return VOS_STATUS_E_NOMEM;
2502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 /* Copy init Scan params to WDI structure */
2504 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2505 wdiStartScanParams->wdiReqStatusCB = NULL ;
2506
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 /* Store Init Req pointer, as this will be used for response */
2508 /* store Params pass it to WDI */
2509 pWdaParams->pWdaContext = pWDA;
2510 pWdaParams->wdaMsgParam = startScanParams;
2511 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 /* call DAL API to pass init scan request to DAL */
2513 status = WDI_StartScanReq(wdiStartScanParams,
2514 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 /* failure returned by WDI API */
2516 if(IS_WDI_STATUS_FAILURE(status))
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2519 "Failure in Start Scan WDI API, free all the memory "
2520 "It should be due to previous abort scan." );
2521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2522 vos_mem_free(pWdaParams) ;
2523 startScanParams->status = eSIR_FAILURE ;
2524 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 return CONVERT_WDI2VOS_STATUS(status) ;
2527}
Jeff Johnson295189b2012-06-20 16:38:30 -07002528/*
2529 * FUNCTION: WDA_EndScanReqCallback
2530 * END SCAN callback
2531 */
2532void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2533{
2534 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2535 tWDA_CbContext *pWDA;
2536 tEndScanParams *endScanParam;
2537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002538 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 if(NULL == pWdaParams)
2540 {
2541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002542 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 VOS_ASSERT(0) ;
2544 return ;
2545 }
2546 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2547 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 if(NULL == endScanParam)
2549 {
2550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002551 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002552 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2554 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 return ;
2556 }
2557
2558 /* Free WDI command buffer */
2559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2560 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002562 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 /* send response back to PE */
2564 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2565 return ;
2566}
2567
Jeff Johnson295189b2012-06-20 16:38:30 -07002568/*
2569 * FUNCTION: WDA_ProcessEndScanReq
2570 * Trigger END SCAN in WDI
2571 */
2572VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2573 tEndScanParams *endScanParams)
2574{
2575 WDI_Status status = WDI_STATUS_SUCCESS;
2576 WDI_EndScanReqParamsType *wdiEndScanParams =
2577 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2578 sizeof(WDI_EndScanReqParamsType)) ;
2579 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002581 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 if(NULL == wdiEndScanParams)
2583 {
2584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 VOS_ASSERT(0);
2587 return VOS_STATUS_E_NOMEM;
2588 }
2589 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2590 if(NULL == pWdaParams)
2591 {
2592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 VOS_ASSERT(0);
2595 vos_mem_free(wdiEndScanParams);
2596 return VOS_STATUS_E_NOMEM;
2597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 /* Copy init Scan params to WDI structure */
2599 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2600 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 /* Store Init Req pointer, as this will be used for response */
2602 /* store Params pass it to WDI */
2603 pWdaParams->pWdaContext = pWDA;
2604 pWdaParams->wdaMsgParam = endScanParams;
2605 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 /* call DAL API to pass init scan request to DAL */
2607 status = WDI_EndScanReq(wdiEndScanParams,
2608 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(IS_WDI_STATUS_FAILURE(status))
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2612 "Failure in End Scan WDI API, free all the memory "
2613 "It should be due to previous abort scan." );
2614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2615 vos_mem_free(pWdaParams) ;
2616 endScanParams->status = eSIR_FAILURE ;
2617 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2618 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 return CONVERT_WDI2VOS_STATUS(status) ;
2620}
Jeff Johnson295189b2012-06-20 16:38:30 -07002621/*
2622 * FUNCTION: WDA_FinishScanReqCallback
2623 * Trigger Finish SCAN callback
2624 */
2625void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2626{
2627 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2628 tWDA_CbContext *pWDA;
2629 tFinishScanParams *finishScanParam;
2630 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002632 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 if(NULL == pWdaParams)
2634 {
2635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002636 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002637 VOS_ASSERT(0) ;
2638 return ;
2639 }
2640
2641 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2642 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002643 if(NULL == finishScanParam)
2644 {
2645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002646 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2649 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 return ;
2651 }
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 /*
2655 * Now Resume TX, if we reached here means, TX is already suspended, we
2656 * have to resume it unconditionaly
2657 */
2658 status = WDA_ResumeDataTx(pWDA) ;
2659
2660 if(VOS_STATUS_SUCCESS != status)
2661 {
2662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002663 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002665 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2667 return ;
2668}
Jeff Johnson295189b2012-06-20 16:38:30 -07002669/*
2670 * FUNCTION: WDA_ProcessFinshScanReq
2671 * Trigger Finish SCAN in WDI
2672 */
2673VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2674 tFinishScanParams *finishScanParams)
2675{
2676 WDI_Status status = WDI_STATUS_SUCCESS;
2677 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2678 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2679 sizeof(WDI_FinishScanReqParamsType)) ;
2680 tWDA_ReqParams *pWdaParams ;
2681 tANI_U8 i = 0;
2682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 if(NULL == wdiFinishScanParams)
2685 {
2686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 VOS_ASSERT(0);
2689 return VOS_STATUS_E_NOMEM;
2690 }
2691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2692 if(NULL == pWdaParams)
2693 {
2694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 VOS_ASSERT(0);
2697 vos_mem_free(wdiFinishScanParams);
2698 return VOS_STATUS_E_NOMEM;
2699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 /* Copy init Scan params to WDI structure */
2701 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2702 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2703 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2705 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2706 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2707 finishScanParams->frameLength ;
2708 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2709 finishScanParams->currentOperChannel ;
2710 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2711 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2712 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2714 {
2715 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2716 finishScanParams->scanEntry.bssIdx[i] ;
2717 }
2718
2719
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 /* if Frame length, copy macMgmtHdr ro WDI structure */
2721 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2722 {
2723 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2724 &finishScanParams->macMgmtHdr,
2725 sizeof(WDI_MacMgmtHdr)) ;
2726 }
2727 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* Store Init Req pointer, as this will be used for response */
2729 /* store Params pass it to WDI */
2730 pWdaParams->pWdaContext = pWDA;
2731 pWdaParams->wdaMsgParam = finishScanParams;
2732 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002733 /* call DAL API to pass init scan request to DAL */
2734 status = WDI_FinishScanReq(wdiFinishScanParams,
2735 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002736
Jeff Johnson295189b2012-06-20 16:38:30 -07002737
2738 /*
2739 * WDI API returns failure..
2740 */
2741 if(IS_WDI_STATUS_FAILURE( status))
2742 {
2743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2744 "Failure in Finish Scan WDI API, free all the memory " );
2745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2746 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 finishScanParams->status = eSIR_FAILURE ;
2748 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 return CONVERT_WDI2VOS_STATUS(status) ;
2751}
Jeff Johnson295189b2012-06-20 16:38:30 -07002752/*---------------------------------------------------------------------
2753 * ASSOC API's
2754 *---------------------------------------------------------------------
2755 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002756/*
2757 * FUNCTION: WDA_JoinReqCallback
2758 * Trigger Init SCAN callback
2759 */
2760void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2761{
2762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2763 tWDA_CbContext *pWDA;
2764 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002766 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002767 if(NULL == pWdaParams)
2768 {
2769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002770 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 VOS_ASSERT(0) ;
2772 return ;
2773 }
2774 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2775 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2777 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 /* reset macBSSID */
2779 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 /* reset macSTASelf */
2781 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002782 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 return ;
2785}
Jeff Johnson295189b2012-06-20 16:38:30 -07002786/*
2787 * FUNCTION: WDA_ProcessJoinReq
2788 * Trigger Join REQ in WDI
2789 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002790VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2791 tSwitchChannelParams* joinReqParam)
2792{
2793 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 WDI_JoinReqParamsType *wdiJoinReqParam =
2795 (WDI_JoinReqParamsType *)vos_mem_malloc(
2796 sizeof(WDI_JoinReqParamsType)) ;
2797 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002799 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002800 if(NULL == wdiJoinReqParam)
2801 {
2802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002803 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002804 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002805 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002806 return VOS_STATUS_E_NOMEM;
2807 }
2808 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2809 if(NULL == pWdaParams)
2810 {
2811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002813 VOS_ASSERT(0);
2814 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002815 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002816 return VOS_STATUS_E_NOMEM;
2817 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002818
2819 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2820 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2821 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2822 {
2823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2824 "%s: received join request when BSSID or self-STA is NULL "
2825 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002827 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2828 VOS_ASSERT(0);
2829 vos_mem_free(wdiJoinReqParam);
2830 vos_mem_free(pWdaParams);
2831 joinReqParam->status = eSIR_FAILURE ;
2832 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2833 return VOS_STATUS_E_INVAL;
2834 }
2835
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 /* copy the BSSID for pWDA */
2837 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2838 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2840 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2842 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002843#ifdef WLAN_FEATURE_VOWIFI
2844 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2845 joinReqParam->maxTxPower ;
2846#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2848 joinReqParam->localPowerConstraint ;
2849#endif
2850 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2851 joinReqParam->secondaryChannelOffset ;
2852 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2853
2854 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 /* Store Init Req pointer, as this will be used for response */
2856 /* store Params pass it to WDI */
2857 pWdaParams->pWdaContext = pWDA;
2858 pWdaParams->wdaMsgParam = joinReqParam;
2859 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 status = WDI_JoinReq(wdiJoinReqParam,
2861 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 if(IS_WDI_STATUS_FAILURE(status))
2863 {
2864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2865 "Failure in Join WDI API, free all the memory " );
2866 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2867 vos_mem_free(pWdaParams) ;
2868 joinReqParam->status = eSIR_FAILURE ;
2869 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 return CONVERT_WDI2VOS_STATUS(status) ;
2872}
Jeff Johnson295189b2012-06-20 16:38:30 -07002873/*
2874 * FUNCTION: WDA_SwitchChannelReqCallback
2875 * send Switch channel RSP back to PE
2876 */
2877void WDA_SwitchChannelReqCallback(
2878 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2879{
2880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2881 tWDA_CbContext *pWDA;
2882 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002884 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 if(NULL == pWdaParams)
2886 {
2887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002888 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 VOS_ASSERT(0) ;
2890 return ;
2891 }
2892 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2893 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2894
2895#ifdef WLAN_FEATURE_VOWIFI
2896 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2897#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2899 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002901 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002902 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 return ;
2904}
Jeff Johnson295189b2012-06-20 16:38:30 -07002905/*
2906 * FUNCTION: WDA_ProcessChannelSwitchReq
2907 * Request to WDI to switch channel REQ params.
2908 */
2909VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2910 tSwitchChannelParams *pSwitchChanParams)
2911{
2912 WDI_Status status = WDI_STATUS_SUCCESS ;
2913 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2914 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2915 sizeof(WDI_SwitchChReqParamsType)) ;
2916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(NULL == wdiSwitchChanParam)
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0);
2924 return VOS_STATUS_E_NOMEM;
2925 }
2926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2927 if(NULL == pWdaParams)
2928 {
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_ASSERT(0);
2932 vos_mem_free(wdiSwitchChanParam);
2933 return VOS_STATUS_E_NOMEM;
2934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2936#ifndef WLAN_FEATURE_VOWIFI
2937 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2938 pSwitchChanParams->localPowerConstraint;
2939#endif
2940 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2941 pSwitchChanParams->secondaryChannelOffset;
2942 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Store req pointer, as this will be used for response */
2944 /* store Params pass it to WDI */
2945 pWdaParams->pWdaContext = pWDA;
2946 pWdaParams->wdaMsgParam = pSwitchChanParams;
2947 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948#ifdef WLAN_FEATURE_VOWIFI
2949 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2950 = pSwitchChanParams->maxTxPower;
2951 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2952 pSwitchChanParams ->selfStaMacAddr,
2953 sizeof(tSirMacAddr));
2954#endif
2955 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2956 pSwitchChanParams->bssId,
2957 sizeof(tSirMacAddr));
2958
2959 status = WDI_SwitchChReq(wdiSwitchChanParam,
2960 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 if(IS_WDI_STATUS_FAILURE(status))
2962 {
2963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2964 "Failure in process channel switch Req WDI API, free all the memory " );
2965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2966 vos_mem_free(pWdaParams) ;
2967 pSwitchChanParams->status = eSIR_FAILURE ;
2968 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 return CONVERT_WDI2VOS_STATUS(status) ;
2971}
Jeff Johnson295189b2012-06-20 16:38:30 -07002972/*
2973 * FUNCTION: WDA_ConfigBssReqCallback
2974 * config BSS Req Callback, called by WDI
2975 */
2976void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2977 ,void* pUserData)
2978{
2979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2980 tWDA_CbContext *pWDA;
2981 tAddBssParams *configBssReqParam;
2982 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == pWdaParams)
2986 {
2987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002988 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 VOS_ASSERT(0) ;
2990 return ;
2991 }
2992 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2993 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2994 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002996 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2998 {
2999 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3000 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003001 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3002 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3003 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3004
3005 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3006 {
3007 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3008 {
3009 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3010 staConfigBssParam->staType = STA_ENTRY_BSSID;
3011 }
3012 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3013 (staConfigBssParam->staType == STA_ENTRY_SELF))
3014 {
3015 /* This is the 1st add BSS Req for the BTAMP STA */
3016 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3017 staConfigBssParam->staType = STA_ENTRY_BSSID;
3018 }
3019 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3020 (staConfigBssParam->staType == STA_ENTRY_PEER))
3021 {
3022 /* This is the 2nd ADD BSS Request that is sent
3023 * on the BTAMP STA side. The Sta type is
3024 * set to STA_ENTRY_PEER here.*/
3025 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3026 }
3027 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3028 (staConfigBssParam->staType == STA_ENTRY_SELF))
3029 {
3030 /* statype is already set by PE.
3031 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3032 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3033 staConfigBssParam->staType = STA_ENTRY_BSSID;
3034 }
3035 else
3036 {
3037 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3038 staConfigBssParam->staType = STA_ENTRY_PEER;
3039 }
3040 }
3041 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3042 {
3043 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3044 staConfigBssParam->staType = STA_ENTRY_SELF;
3045 }
3046 else
3047 {
3048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3049 "Invalid operation mode specified");
3050 VOS_ASSERT(0);
3051 }
3052
3053 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3058 sizeof(tSirMacAddr));
3059 staConfigBssParam->txChannelWidthSet =
3060 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3062 staConfigBssParam->htCapable)
3063 {
3064 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3065 wdiConfigBssRsp->ucBSSIdx;
3066 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3067 WDA_VALID_STA_INDEX ;
3068 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3070 wdiConfigBssRsp->ucBSSIdx,
3071 wdiConfigBssRsp->ucSTAIdx))
3072 {
3073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003074 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 VOS_ASSERT(0) ;
3076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3078 {
3079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003080 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003081 VOS_ASSERT(0) ;
3082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003083#ifdef WLAN_FEATURE_VOWIFI
3084 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3085#endif
3086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3088 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 return ;
3091}
Jeff Johnson295189b2012-06-20 16:38:30 -07003092/*
3093 * FUNCTION: WDA_UpdateEdcaParamsForAC
3094 * Update WDI EDCA params with PE edca params
3095 */
3096void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3097 WDI_EdcaParamRecord *wdiEdcaParam,
3098 tSirMacEdcaParamRecord *macEdcaParam)
3099{
3100 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3101 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3102 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3103 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3104 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3105 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3106}
Jeff Johnson295189b2012-06-20 16:38:30 -07003107/*
3108 * FUNCTION: WDA_ProcessConfigBssReq
3109 * Configure BSS before starting Assoc with AP
3110 */
3111VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3112 tAddBssParams* configBssReqParam)
3113{
3114 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303115 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003118 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303119 if (NULL == configBssReqParam)
3120 {
3121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3122 "%s: configBssReqParam is NULL", __func__);
3123 return VOS_STATUS_E_INVAL;
3124 }
3125
3126 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3127 sizeof(WDI_ConfigBSSReqParamsType)) ;
3128
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 if(NULL == wdiConfigBssReqParam)
3130 {
3131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_ASSERT(0);
3134 return VOS_STATUS_E_NOMEM;
3135 }
3136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3137 if(NULL == pWdaParams)
3138 {
3139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 VOS_ASSERT(0);
3142 vos_mem_free(wdiConfigBssReqParam);
3143 return VOS_STATUS_E_NOMEM;
3144 }
Kiran4a17ebe2013-01-31 10:43:43 -08003145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3146 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3149 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 /* Store Init Req pointer, as this will be used for response */
3151 /* store Params pass it to WDI */
3152 pWdaParams->pWdaContext = pWDA;
3153 pWdaParams->wdaMsgParam = configBssReqParam;
3154 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3156 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003157 if(IS_WDI_STATUS_FAILURE(status))
3158 {
3159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3160 "Failure in Config BSS WDI API, free all the memory " );
3161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3162 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3165 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003166 return CONVERT_WDI2VOS_STATUS(status) ;
3167}
Jeff Johnson295189b2012-06-20 16:38:30 -07003168#ifdef ENABLE_HAL_COMBINED_MESSAGES
3169/*
3170 * FUNCTION: WDA_PostAssocReqCallback
3171 * Post ASSOC req callback, send RSP back to PE
3172 */
3173void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3174 void* pUserData)
3175{
3176 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3177 tPostAssocParams *postAssocReqParam =
3178 (tPostAssocParams *)pWDA->wdaMsgParam ;
3179 /*STA context within the BSS Params*/
3180 tAddStaParams *staPostAssocParam =
3181 &postAssocReqParam->addBssParams.staContext ;
3182 /*STA Params for self STA*/
3183 tAddStaParams *selfStaPostAssocParam =
3184 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003188 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3190 {
3191 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3192 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3193 sizeof(tSirMacAddr)) ;
3194 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3195 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3196 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3198 }
3199 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3200 pWDA->wdaWdiApiMsgParam = NULL;
3201 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 return ;
3204}
Jeff Johnson295189b2012-06-20 16:38:30 -07003205/*
3206 * FUNCTION: WDA_ProcessPostAssocReq
3207 * Trigger POST ASSOC processing in WDI
3208 */
3209VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3210 tPostAssocParams *postAssocReqParam)
3211{
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 WDI_Status status = WDI_STATUS_SUCCESS ;
3213
3214 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3215 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3216 sizeof(WDI_PostAssocReqParamsType)) ;
3217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003219
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 if(NULL == wdiPostAssocReqParam)
3221 {
3222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003223 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 VOS_ASSERT(0);
3225 return VOS_STATUS_E_NOMEM;
3226 }
3227
3228 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3229 {
3230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003231 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 VOS_ASSERT(0);
3233 return VOS_STATUS_E_FAILURE;
3234 }
3235
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 /* update BSS params into WDI structure */
3237 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3238 &postAssocReqParam->addBssParams) ;
3239 /* update STA params into WDI structure */
3240 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3241 &postAssocReqParam->addStaParams) ;
3242
3243 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3244 postAssocReqParam->addBssParams.highPerformance;
3245 WDA_UpdateEdcaParamsForAC(pWDA,
3246 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3247 &postAssocReqParam->addBssParams.acbe);
3248 WDA_UpdateEdcaParamsForAC(pWDA,
3249 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3250 &postAssocReqParam->addBssParams.acbk);
3251 WDA_UpdateEdcaParamsForAC(pWDA,
3252 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3253 &postAssocReqParam->addBssParams.acvi);
3254 WDA_UpdateEdcaParamsForAC(pWDA,
3255 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3256 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 /* Store Init Req pointer, as this will be used for response */
3258 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 /* store Params pass it to WDI */
3260 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3262 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 if(IS_WDI_STATUS_FAILURE(status))
3264 {
3265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3266 "Failure in Post Assoc WDI API, free all the memory " );
3267 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3268 pWDA->wdaWdiApiMsgParam = NULL;
3269 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 return CONVERT_WDI2VOS_STATUS(status) ;
3274}
3275#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003276/*
3277 * FUNCTION: WDA_AddStaReqCallback
3278 * ADD STA req callback, send RSP back to PE
3279 */
3280void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3281 void* pUserData)
3282{
3283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3284 tWDA_CbContext *pWDA;
3285 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003287 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 if(NULL == pWdaParams)
3289 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 VOS_ASSERT(0) ;
3292 return ;
3293 }
3294 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3295 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003297 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3299 {
3300 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3301 /*TODO: UMAC structure doesn't have these fields*/
3302 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3303 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3304 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3305 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3306 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3307 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003308#ifdef FEATURE_WLAN_TDLS
3309 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3310 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3311#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003313#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 {
3315 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3316 wdiConfigStaRsp->ucBssIdx;
3317 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3318 WDA_VALID_STA_INDEX ;
3319 }
3320 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3321 {
3322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003323 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 VOS_ASSERT(0) ;
3325 return ;
3326 }
3327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3329 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 return ;
3332}
Jeff Johnson295189b2012-06-20 16:38:30 -07003333/*
3334 * FUNCTION: WDA_ConfigStaReq
3335 * Trigger Config STA processing in WDI
3336 */
3337VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3338 tAddStaParams *addStaReqParam)
3339{
Jeff Johnson295189b2012-06-20 16:38:30 -07003340 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3342 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3343 sizeof(WDI_ConfigSTAReqParamsType)) ;
3344 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003346 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 if(NULL == wdiConfigStaReqParam)
3348 {
3349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 VOS_ASSERT(0);
3352 return VOS_STATUS_E_NOMEM;
3353 }
3354 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3355 if(NULL == pWdaParams)
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_ASSERT(0);
3360 vos_mem_free(wdiConfigStaReqParam);
3361 return VOS_STATUS_E_NOMEM;
3362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 /* update STA params into WDI structure */
3365 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3366 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 /* Store Init Req pointer, as this will be used for response */
3368 /* store Params pass it to WDI */
3369 pWdaParams->pWdaContext = pWDA;
3370 pWdaParams->wdaMsgParam = addStaReqParam;
3371 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3373 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 if(IS_WDI_STATUS_FAILURE(status))
3375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3377 "Failure in Config STA WDI API, free all the memory " );
3378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3379 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 return CONVERT_WDI2VOS_STATUS(status) ;
3384}
Jeff Johnson295189b2012-06-20 16:38:30 -07003385/*
3386 * FUNCTION: WDA_DelBSSReqCallback
3387 * Dens DEL BSS RSP back to PE
3388 */
3389void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3390 void* pUserData)
3391{
3392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3393 tWDA_CbContext *pWDA;
3394 tDeleteBssParams *delBssReqParam;
3395 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 if(NULL == pWdaParams)
3399 {
3400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003401 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_ASSERT(0) ;
3403 return ;
3404 }
3405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3406 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003407 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3409 {
3410 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3411 sizeof(tSirMacAddr)) ;
3412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3414 {
3415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003416 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003417 VOS_ASSERT(0) ;
3418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003419 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3420 {
3421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003422 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003423 VOS_ASSERT(0) ;
3424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003425 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3426 {
3427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003428 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003429 VOS_ASSERT(0) ;
3430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3432 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 /* reset the the system role*/
3434 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3435
3436 /* Reset the BA related information */
3437 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3438 {
3439 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3440 {
3441 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3442 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3443 /* Reset framesTxed counters here */
3444 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3445 {
3446 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3447 }
3448 }
3449 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 return ;
3452}
3453
Jeff Johnson295189b2012-06-20 16:38:30 -07003454/*
3455 * FUNCTION: WDA_ProcessDelBssReq
3456 * Init DEL BSS req with WDI
3457 */
3458VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3459 tDeleteBssParams *delBssParam)
3460{
3461 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3463 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3464 sizeof(WDI_DelBSSReqParamsType)) ;
3465 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 if(NULL == wdiDelBssReqParam)
3469 {
3470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0);
3473 return VOS_STATUS_E_NOMEM;
3474 }
3475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3476 if(NULL == pWdaParams)
3477 {
3478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 VOS_ASSERT(0);
3481 vos_mem_free(wdiDelBssReqParam);
3482 return VOS_STATUS_E_NOMEM;
3483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3485 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3486
3487 /* Store Init Req pointer, as this will be used for response */
3488 /* store Params pass it to WDI */
3489 pWdaParams->pWdaContext = pWDA;
3490 pWdaParams->wdaMsgParam = delBssParam;
3491 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003492 status = WDI_DelBSSReq(wdiDelBssReqParam,
3493 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 if(IS_WDI_STATUS_FAILURE(status))
3495 {
3496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3497 "Failure in Del BSS WDI API, free all the memory " );
3498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3499 vos_mem_free(pWdaParams) ;
3500 delBssParam->status = eSIR_FAILURE ;
3501 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 return CONVERT_WDI2VOS_STATUS(status) ;
3504}
Jeff Johnson295189b2012-06-20 16:38:30 -07003505/*
3506 * FUNCTION: WDA_DelSTAReqCallback
3507 * Dens DEL STA RSP back to PE
3508 */
3509void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3510 void* pUserData)
3511{
3512 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3513 tWDA_CbContext *pWDA;
3514 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003516 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 if(NULL == pWdaParams)
3518 {
3519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003520 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 VOS_ASSERT(0) ;
3522 return ;
3523 }
3524 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3525 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003526 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3528 {
3529 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3530 {
3531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003532 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 VOS_ASSERT(0) ;
3534 }
3535 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3536 }
3537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3538 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 /*Reset the BA information corresponding to this STAIdx */
3540 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3541 WDA_INVALID_STA_INDEX;
3542 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3543
3544 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 return ;
3546}
Jeff Johnson295189b2012-06-20 16:38:30 -07003547/*
3548 * FUNCTION: WDA_ProcessDelStaReq
3549 * Init DEL STA req with WDI
3550 */
3551VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3552 tDeleteStaParams *delStaParam)
3553{
3554 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3556 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3557 sizeof(WDI_DelSTAReqParamsType)) ;
3558 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003560 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 if(NULL == wdiDelStaReqParam)
3562 {
3563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003564 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 VOS_ASSERT(0);
3566 return VOS_STATUS_E_NOMEM;
3567 }
3568 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3569 if(NULL == pWdaParams)
3570 {
3571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_ASSERT(0);
3574 vos_mem_free(wdiDelStaReqParam);
3575 return VOS_STATUS_E_NOMEM;
3576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3578 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 /* Store Init Req pointer, as this will be used for response */
3580 /* store Params pass it to WDI */
3581 pWdaParams->pWdaContext = pWDA;
3582 pWdaParams->wdaMsgParam = delStaParam;
3583 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 status = WDI_DelSTAReq(wdiDelStaReqParam,
3585 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 if(IS_WDI_STATUS_FAILURE(status))
3587 {
3588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3589 "Failure in Del STA WDI API, free all the memory status = %d",
3590 status );
3591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3592 vos_mem_free(pWdaParams) ;
3593 delStaParam->status = eSIR_FAILURE ;
3594 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3595 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 return CONVERT_WDI2VOS_STATUS(status) ;
3597}
Jeff Johnson295189b2012-06-20 16:38:30 -07003598void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3599{
3600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3601 tWDA_CbContext *pWDA;
3602 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003604 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 if(NULL == pWdaParams)
3606 {
3607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003608 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003609 VOS_ASSERT(0) ;
3610 return ;
3611 }
3612 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3613 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3615 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3617 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3618 pwdiAddSTASelfRsp->macSelfSta,
3619 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003620 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 return ;
3622}
Jeff Johnson295189b2012-06-20 16:38:30 -07003623/*
3624 * FUNCTION: WDA_ProcessAddStaSelfReq
3625 *
3626 */
3627VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3628{
3629 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003630 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3632 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3633 sizeof(WDI_AddSTASelfReqParamsType)) ;
3634 tWDA_ReqParams *pWdaParams;
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 == wdiAddStaSelfReq )
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 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003644 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 if( NULL == pWdaParams )
3646 {
3647 VOS_ASSERT( 0 );
3648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003649 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 vos_mem_free(wdiAddStaSelfReq) ;
3651 return( VOS_STATUS_E_NOMEM );
3652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003654 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003655 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 /* Store Init Req pointer, as this will be used for response */
3657 /* store Params pass it to WDI */
3658 pWdaParams->pWdaContext = pWDA;
3659 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3660 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003661 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003662
Jeff Johnson43971f52012-07-17 12:26:56 -07003663 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 {
3665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3666 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003667 wstatus );
3668 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3670 vos_mem_free(pWdaParams) ;
3671 pAddStaSelfReq->status = eSIR_FAILURE ;
3672 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3673 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003674 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003675}
Jeff Johnson295189b2012-06-20 16:38:30 -07003676/*
3677 * FUNCTION: WDA_DelSTASelfRespCallback
3678 *
3679 */
3680void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3681 wdiDelStaSelfRspParams , void* pUserData)
3682{
3683 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3684 tWDA_CbContext *pWDA;
3685 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003687 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 if (NULL == pWdaParams)
3689 {
3690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003691 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003692 VOS_ASSERT(0);
3693 return;
3694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3696 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003698 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003699
3700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3701 vos_mem_free(pWdaParams) ;
3702
3703 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003704 return ;
3705}
Jeff Johnson295189b2012-06-20 16:38:30 -07003706/*
3707 * FUNCTION: WDA_DelSTASelfReqCallback
3708 *
3709 */
3710void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3711 void* pUserData)
3712{
3713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3714 tWDA_CbContext *pWDA;
3715 tDelStaSelfParams *delStaSelfParams;
3716
3717 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303718 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003719 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003720
3721 if (NULL == pWdaParams)
3722 {
3723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003724 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003725 VOS_ASSERT(0);
3726 return;
3727 }
3728
3729 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3730 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3731
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003732 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003733
3734 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3735 {
3736 VOS_ASSERT(0);
3737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3738 vos_mem_free(pWdaParams) ;
3739 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3740 }
3741
3742 return ;
3743}
3744
3745/*
3746 * FUNCTION: WDA_DelSTASelfReq
3747 * Trigger Config STA processing in WDI
3748 */
3749VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3750 tDelStaSelfParams* pDelStaSelfReqParam)
3751{
3752 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003753 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 tWDA_ReqParams *pWdaParams = NULL;
3755 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3756 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3757 sizeof(WDI_DelSTASelfReqParamsType)) ;
3758
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 if( NULL == wdiDelStaSelfReq )
3762 {
3763 VOS_ASSERT( 0 );
3764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003765 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 return( VOS_STATUS_E_NOMEM );
3767 }
3768
3769 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3770 if( NULL == pWdaParams )
3771 {
3772 VOS_ASSERT( 0 );
3773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003774 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 vos_mem_free(wdiDelStaSelfReq) ;
3776 return( VOS_STATUS_E_NOMEM );
3777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003778 pWdaParams->pWdaContext = pWDA;
3779 /* Store param pointer as passed in by caller */
3780 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3781 /* store Params pass it to WDI */
3782 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003783 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3784 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3785
3786 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3787 wdiDelStaSelfReq->pUserData = pWdaParams;
3788
Jeff Johnson43971f52012-07-17 12:26:56 -07003789 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003790 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3791
Jeff Johnson43971f52012-07-17 12:26:56 -07003792 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 {
3794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3795 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3796 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003797 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3799 vos_mem_free(pWdaParams) ;
3800 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3801 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3802 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003803 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003804}
3805
Jeff Johnson295189b2012-06-20 16:38:30 -07003806/*
3807 * FUNCTION: WDA_SendMsg
3808 * Send Message back to PE
3809 */
3810void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3811 void *pBodyptr, tANI_U32 bodyVal)
3812{
3813 tSirMsgQ msg = {0} ;
3814 tANI_U32 status = VOS_STATUS_SUCCESS ;
3815 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 msg.type = msgType;
3817 msg.bodyval = bodyVal;
3818 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 if (VOS_STATUS_SUCCESS != status)
3821 {
3822 if(NULL != pBodyptr)
3823 {
3824 vos_mem_free(pBodyptr);
3825 }
3826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003827 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003828 VOS_ASSERT(0) ;
3829 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 return ;
3831}
Jeff Johnson295189b2012-06-20 16:38:30 -07003832/*
3833 * FUNCTION: WDA_UpdateBSSParams
3834 * Translated WDA/PE BSS info into WDI BSS info..
3835 */
3836void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3837 WDI_ConfigBSSReqInfoType *wdiBssParams,
3838 tAddBssParams *wdaBssParams)
3839{
3840 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003841 /* copy bssReq Params to WDI structure */
3842 vos_mem_copy(wdiBssParams->macBSSID,
3843 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3844 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3845 sizeof(tSirMacAddr)) ;
3846 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3847 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3848 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003849 wdiBssParams->ucShortSlotTimeSupported =
3850 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003851 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3852 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3853 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3854 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3855 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3856
3857 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3858 wdiBssParams->ucTXOPProtectionFullSupport =
3859 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003860 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3861 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3864 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3865 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3866 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3867
Chet Lanctot186b5732013-03-18 10:26:30 -07003868 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3869
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 /* copy SSID into WDI structure */
3871 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3872 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3873 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3875 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003877#ifdef WLAN_FEATURE_VOWIFI
3878 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3879#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003881 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003882#ifdef WLAN_FEATURE_VOWIFI_11R
3883 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 if(wdiBssParams->bExtSetStaKeyParamValid)
3885 {
3886 /* copy set STA key params to WDI structure */
3887 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3888 wdaBssParams->extSetStaKeyParam.staIdx;
3889 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3890 wdaBssParams->extSetStaKeyParam.encType;
3891 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3892 wdaBssParams->extSetStaKeyParam.wepType;
3893 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3894 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3896 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003897 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3899 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3900 {
3901 WDA_GetWepKeysFromCfg( pWDA,
3902 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3903 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3904 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3905 }
3906 else
3907 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3909 keyIndex++)
3910 {
3911 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3912 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3913 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3914 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3915 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3916 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3918 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3919 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3920 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3921 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3922 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3923 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3924 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3927 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 }
3929 }
3930 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3931 }
3932 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3933 {
3934 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3935 sizeof(wdaBssParams->extSetStaKeyParam) );
3936 }
3937#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003938#ifdef WLAN_FEATURE_11AC
3939 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3940 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3941#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003942
3943 return ;
3944}
Jeff Johnson295189b2012-06-20 16:38:30 -07003945/*
3946 * FUNCTION: WDA_UpdateSTAParams
3947 * Translated WDA/PE BSS info into WDI BSS info..
3948 */
3949void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3950 WDI_ConfigStaReqInfoType *wdiStaParams,
3951 tAddStaParams *wdaStaParams)
3952{
3953 tANI_U8 i = 0;
3954 /* Update STA params */
3955 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3956 sizeof(tSirMacAddr)) ;
3957 wdiStaParams->usAssocId = wdaStaParams->assocId;
3958 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003959 wdiStaParams->staIdx = wdaStaParams->staIdx;
3960
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 wdiStaParams->ucShortPreambleSupported =
3962 wdaStaParams->shortPreambleSupported;
3963 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3964 sizeof(tSirMacAddr)) ;
3965 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3966
3967 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3968
3969 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3970 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3971 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3972 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3973 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3974 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3975 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3976
3977 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3978 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 wdiStaParams->wdiSupportedRates.opRateMode =
3980 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3982 {
3983 wdiStaParams->wdiSupportedRates.llbRates[i] =
3984 wdaStaParams->supportedRates.llbRates[i];
3985 }
3986 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3987 {
3988 wdiStaParams->wdiSupportedRates.llaRates[i] =
3989 wdaStaParams->supportedRates.llaRates[i];
3990 }
3991 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3992 {
3993 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3994 wdaStaParams->supportedRates.aniLegacyRates[i];
3995 }
3996 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3997 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003998#ifdef WLAN_FEATURE_11AC
3999 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4000 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4001 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4002 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4003#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004004 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4005 {
4006 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4007 wdaStaParams->supportedRates.supportedMCSSet[i];
4008 }
4009 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4010 wdaStaParams->supportedRates.rxHighestDataRate;
4011
4012 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4013
4014 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4015
4016 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4017 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4018 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4019
4020 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4021 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4022 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4023 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004024 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004025#ifdef WLAN_FEATURE_11AC
4026 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4027 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004028 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004029#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004030 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4031 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004032 return ;
4033}
Jeff Johnson295189b2012-06-20 16:38:30 -07004034/*
4035 * -------------------------------------------------------------------------
4036 * CFG update to WDI
4037 * -------------------------------------------------------------------------
4038 */
4039
4040 /*
4041 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4042 * Convert the WNI CFG ID to HAL CFG ID
4043 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004044static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004045{
4046 switch(wniCfgId)
4047 {
4048 case WNI_CFG_STA_ID:
4049 return QWLAN_HAL_CFG_STA_ID;
4050 case WNI_CFG_CURRENT_TX_ANTENNA:
4051 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4052 case WNI_CFG_CURRENT_RX_ANTENNA:
4053 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4054 case WNI_CFG_LOW_GAIN_OVERRIDE:
4055 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4056 case WNI_CFG_POWER_STATE_PER_CHAIN:
4057 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4058 case WNI_CFG_CAL_PERIOD:
4059 return QWLAN_HAL_CFG_CAL_PERIOD;
4060 case WNI_CFG_CAL_CONTROL:
4061 return QWLAN_HAL_CFG_CAL_CONTROL;
4062 case WNI_CFG_PROXIMITY:
4063 return QWLAN_HAL_CFG_PROXIMITY;
4064 case WNI_CFG_NETWORK_DENSITY:
4065 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4066 case WNI_CFG_MAX_MEDIUM_TIME:
4067 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4068 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4069 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4070 case WNI_CFG_RTS_THRESHOLD:
4071 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4072 case WNI_CFG_SHORT_RETRY_LIMIT:
4073 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4074 case WNI_CFG_LONG_RETRY_LIMIT:
4075 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4076 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4077 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4078 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4079 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4080 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4081 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4082 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4083 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4084 case WNI_CFG_FIXED_RATE:
4085 return QWLAN_HAL_CFG_FIXED_RATE;
4086 case WNI_CFG_RETRYRATE_POLICY:
4087 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4088 case WNI_CFG_RETRYRATE_SECONDARY:
4089 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4090 case WNI_CFG_RETRYRATE_TERTIARY:
4091 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4092 case WNI_CFG_FORCE_POLICY_PROTECTION:
4093 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4094 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4095 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4096 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4097 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4098 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4099 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4100 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4101 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4102 case WNI_CFG_MAX_BA_SESSIONS:
4103 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4104 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4105 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4106 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4107 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4108 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4109 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4110 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4111 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4112 case WNI_CFG_STATS_PERIOD:
4113 return QWLAN_HAL_CFG_STATS_PERIOD;
4114 case WNI_CFG_CFP_MAX_DURATION:
4115 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4116#if 0 /*This is not part of CFG*/
4117 case WNI_CFG_FRAME_TRANS_ENABLED:
4118 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4119#endif
4120 case WNI_CFG_DTIM_PERIOD:
4121 return QWLAN_HAL_CFG_DTIM_PERIOD;
4122 case WNI_CFG_EDCA_WME_ACBK:
4123 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4124 case WNI_CFG_EDCA_WME_ACBE:
4125 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4126 case WNI_CFG_EDCA_WME_ACVI:
4127 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4128 case WNI_CFG_EDCA_WME_ACVO:
4129 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4130#if 0
4131 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4132 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4133 case WNI_CFG_TELE_BCN_TRANS_LI:
4134 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4135 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4136 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4137 case WNI_CFG_TELE_BCN_MAX_LI:
4138 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4139 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4140 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4141#endif
4142 case WNI_CFG_ENABLE_CLOSE_LOOP:
4143 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004144 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4145 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004146 default:
4147 {
4148 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4149 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4150 wniCfgId);
4151 return VOS_STATUS_E_INVAL;
4152 }
4153 }
4154}
Jeff Johnson295189b2012-06-20 16:38:30 -07004155/*
4156 * FUNCTION: WDA_UpdateCfgCallback
4157 *
4158 */
4159void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4160{
4161 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4162 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4163 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004165 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 /*
4167 * currently there is no response message is expected between PE and
4168 * WDA, Failure return from WDI is a ASSERT condition
4169 */
4170 if(WDI_STATUS_SUCCESS != wdiStatus)
4171 {
4172 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4175 }
4176
4177 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4178 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4179 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 return ;
4181}
Jeff Johnson295189b2012-06-20 16:38:30 -07004182/*
4183 * FUNCTION: WDA_UpdateCfg
4184 *
4185 */
4186VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4187{
4188
4189 WDI_Status status = WDI_STATUS_SUCCESS ;
4190 tANI_U32 val =0;
4191 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4192 tHalCfg *configData;
4193 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4194 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004196 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 if (NULL == pMac )
4198 {
4199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004200 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 return VOS_STATUS_E_FAILURE;
4202 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 if(WDA_START_STATE != pWDA->wdaState)
4204 {
4205 return VOS_STATUS_E_FAILURE;
4206 }
4207
4208 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 VOS_ASSERT(0);
4213 return VOS_STATUS_E_FAILURE;
4214 }
4215
4216 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4217 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 if(NULL == wdiCfgReqParam)
4219 {
4220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 VOS_ASSERT(0);
4223 return VOS_STATUS_E_NOMEM;
4224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4226 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 if(NULL == wdiCfgReqParam->pConfigBuffer)
4228 {
4229 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004230 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004231 vos_mem_free(wdiCfgReqParam);
4232 VOS_ASSERT(0);
4233 return VOS_STATUS_E_NOMEM;
4234 }
4235
4236 /*convert the WNI CFG Id to HAL CFG Id*/
4237 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4238 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4239
4240 /*TODO: revisit this for handling string parameters */
4241 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4242 &val) != eSIR_SUCCESS)
4243 {
4244 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4245 "Failed to cfg get id %d\n", cfgParam->bodyval);
4246 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4247 vos_mem_free(wdiCfgReqParam);
4248 return eSIR_FAILURE;
4249 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4251 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4252 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4253 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4254 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4255
4256 /* store Params pass it to WDI */
4257 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4259 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4260 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004261 if(IS_WDI_STATUS_FAILURE(status))
4262 {
4263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4264 "Failure in Update CFG WDI API, free all the memory " );
4265 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4266 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4267 pWDA->wdaWdiCfgApiMsgParam = NULL;
4268 /* Failure is not expected */
4269 VOS_ASSERT(0) ;
4270 }
4271#else
4272 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4273 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4274 pWDA->wdaWdiCfgApiMsgParam = NULL;
4275#endif
4276 return CONVERT_WDI2VOS_STATUS(status) ;
4277}
4278
Jeff Johnson295189b2012-06-20 16:38:30 -07004279VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4280 v_U8_t *pDefaultKeyId,
4281 v_U8_t *pNumKeys,
4282 WDI_KeysType *pWdiKeys )
4283{
4284 v_U32_t i, j, defKeyId = 0;
4285 v_U32_t val = SIR_MAC_KEY_LENGTH;
4286 VOS_STATUS status = WDI_STATUS_SUCCESS;
4287 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 if (NULL == pMac )
4289 {
4290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004291 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 return VOS_STATUS_E_FAILURE;
4293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4295 &defKeyId ))
4296 {
4297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4298 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4299 }
4300
4301 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 /* Need to extract ALL of the configured WEP Keys */
4303 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4304 {
4305 val = SIR_MAC_KEY_LENGTH;
4306 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4307 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4308 pWdiKeys[j].key,
4309 &val ))
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4312 "WEP Key index [%d] may not configured in CFG\n",i);
4313 }
4314 else
4315 {
4316 pWdiKeys[j].keyId = (tANI_U8) i;
4317 /*
4318 * Actually, a DC (Don't Care) because
4319 * this is determined (and set) by PE/MLME
4320 */
4321 pWdiKeys[j].unicast = 0;
4322 /*
4323 * Another DC (Don't Care)
4324 */
4325 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4326 /* Another DC (Don't Care). Unused for WEP */
4327 pWdiKeys[j].paeRole = 0;
4328 /* Determined from wlan_cfgGetStr() above.*/
4329 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 j++;
4331 *pNumKeys = (tANI_U8) j;
4332 }
4333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004334 return status;
4335}
Jeff Johnson295189b2012-06-20 16:38:30 -07004336/*
4337 * FUNCTION: WDA_SetBssKeyReqCallback
4338 * send SET BSS key RSP back to PE
4339 */
4340void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4341{
4342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4343 tWDA_CbContext *pWDA;
4344 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 if(NULL == pWdaParams)
4348 {
4349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004350 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 VOS_ASSERT(0) ;
4352 return ;
4353 }
4354 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4355 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4357 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004358 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 return ;
4361}
Jeff Johnson295189b2012-06-20 16:38:30 -07004362/*
4363 * FUNCTION: WDA_ProcessSetBssKeyReq
4364 * Request to WDI for programming the BSS key( key for
4365 * broadcast/multicast frames Encryption)
4366 */
4367VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4368 tSetBssKeyParams *setBssKeyParams )
4369{
4370 WDI_Status status = WDI_STATUS_SUCCESS ;
4371 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4372 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4373 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4374 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004375 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 if(NULL == wdiSetBssKeyParam)
4379 {
4380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 VOS_ASSERT(0);
4383 return VOS_STATUS_E_NOMEM;
4384 }
4385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4386 if(NULL == pWdaParams)
4387 {
4388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 VOS_ASSERT(0);
4391 vos_mem_free(wdiSetBssKeyParam);
4392 return VOS_STATUS_E_NOMEM;
4393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 /* copy set BSS params to WDI structure */
4396 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4397 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4398 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 if(setBssKeyParams->encType != eSIR_ED_NONE)
4400 {
4401 if( setBssKeyParams->numKeys == 0 &&
4402 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4403 setBssKeyParams->encType == eSIR_ED_WEP104))
4404 {
4405 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4407 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4408 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4409 }
4410 else
4411 {
4412 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4413 {
4414 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4415 setBssKeyParams->key[keyIndex].keyId;
4416 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4417 setBssKeyParams->key[keyIndex].unicast;
4418 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4419 setBssKeyParams->key[keyIndex].keyDirection;
4420 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4421 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4422 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4423 setBssKeyParams->key[keyIndex].paeRole;
4424 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4425 setBssKeyParams->key[keyIndex].keyLength;
4426 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4427 setBssKeyParams->key[keyIndex].key,
4428 SIR_MAC_MAX_KEY_LENGTH);
4429 }
4430 }
4431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4433 setBssKeyParams->singleTidRc;
4434 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 /* Store set key pointer, as this will be used for response */
4436 /* store Params pass it to WDI */
4437 pWdaParams->pWdaContext = pWDA;
4438 pWdaParams->wdaMsgParam = setBssKeyParams;
4439 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4441 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4442
4443 if(IS_WDI_STATUS_FAILURE(status))
4444 {
4445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4446 "Failure in Set BSS Key Req WDI API, free all the memory " );
4447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4448 vos_mem_free(pWdaParams) ;
4449 setBssKeyParams->status = eSIR_FAILURE ;
4450 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4451 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 return CONVERT_WDI2VOS_STATUS(status) ;
4453}
Jeff Johnson295189b2012-06-20 16:38:30 -07004454/*
4455 * FUNCTION: WDA_RemoveBssKeyReqCallback
4456 * send SET BSS key RSP back to PE
4457 */
4458void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4459{
4460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4461 tWDA_CbContext *pWDA;
4462 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004464 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 if(NULL == pWdaParams)
4466 {
4467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 VOS_ASSERT(0) ;
4470 return ;
4471 }
4472 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4473 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4475 vos_mem_free(pWdaParams) ;
4476
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004477 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004478 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 return ;
4480}
Jeff Johnson295189b2012-06-20 16:38:30 -07004481/*
4482 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4483 * Request to WDI to remove the BSS key( key for broadcast/multicast
4484 * frames Encryption)
4485 */
4486VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4487 tRemoveBssKeyParams *removeBssKeyParams )
4488{
4489 WDI_Status status = WDI_STATUS_SUCCESS ;
4490 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4491 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4492 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 if(NULL == wdiRemoveBssKeyParam)
4497 {
4498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 VOS_ASSERT(0);
4501 return VOS_STATUS_E_NOMEM;
4502 }
4503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4504 if(NULL == pWdaParams)
4505 {
4506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 VOS_ASSERT(0);
4509 vos_mem_free(wdiRemoveBssKeyParam);
4510 return VOS_STATUS_E_NOMEM;
4511 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 /* copy Remove BSS key params to WDI structure*/
4513 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4514 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4515 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4516 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4517 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 /* Store remove key pointer, as this will be used for response */
4519 /* store Params pass it to WDI */
4520 pWdaParams->pWdaContext = pWDA;
4521 pWdaParams->wdaMsgParam = removeBssKeyParams;
4522 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4524 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 if(IS_WDI_STATUS_FAILURE(status))
4526 {
4527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4528 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4530 vos_mem_free(pWdaParams) ;
4531 removeBssKeyParams->status = eSIR_FAILURE ;
4532 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 return CONVERT_WDI2VOS_STATUS(status) ;
4535}
Jeff Johnson295189b2012-06-20 16:38:30 -07004536/*
4537 * FUNCTION: WDA_SetBssKeyReqCallback
4538 * send SET BSS key RSP back to PE
4539 */
4540void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4541{
4542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4543 tWDA_CbContext *pWDA;
4544 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004546 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 if(NULL == pWdaParams)
4548 {
4549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004550 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004551 VOS_ASSERT(0) ;
4552 return ;
4553 }
4554 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4555 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4557 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004558 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 return ;
4561}
Jeff Johnson295189b2012-06-20 16:38:30 -07004562/*
4563 * FUNCTION: WDA_ProcessSetStaKeyReq
4564 * Request to WDI for programming the STA key( key for Unicast frames
4565 * Encryption)
4566 */
4567VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4568 tSetStaKeyParams *setStaKeyParams )
4569{
4570 WDI_Status status = WDI_STATUS_SUCCESS ;
4571 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4572 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4573 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4574 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004577 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 if(NULL == wdiSetStaKeyParam)
4579 {
4580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004581 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 VOS_ASSERT(0);
4583 return VOS_STATUS_E_NOMEM;
4584 }
4585 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4586 if(NULL == pWdaParams)
4587 {
4588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_ASSERT(0);
4591 vos_mem_free(wdiSetStaKeyParam);
4592 return VOS_STATUS_E_NOMEM;
4593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004594 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 /* copy set STA key params to WDI structure */
4597 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4598 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4599 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4600 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 if(setStaKeyParams->encType != eSIR_ED_NONE)
4602 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004603 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4605 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4606 {
4607 WDA_GetWepKeysFromCfg( pWDA,
4608 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4609 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4610 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4611 }
4612 else
4613 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4615 keyIndex++)
4616 {
4617 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4618 setStaKeyParams->key[keyIndex].keyId;
4619 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4620 setStaKeyParams->key[keyIndex].unicast;
4621 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4622 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4624 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4625 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4626 setStaKeyParams->key[keyIndex].paeRole;
4627 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4628 setStaKeyParams->key[keyIndex].keyLength;
4629 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4630 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4631 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4632 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4633 {
4634 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4635 }
4636 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4638 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004639 }
4640 }
4641 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4642 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004643 /* Store set key pointer, as this will be used for response */
4644 /* store Params pass it to WDI */
4645 pWdaParams->pWdaContext = pWDA;
4646 pWdaParams->wdaMsgParam = setStaKeyParams;
4647 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004648 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4649 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004650 if(IS_WDI_STATUS_FAILURE(status))
4651 {
4652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4653 "Failure in set STA Key Req WDI API, free all the memory " );
4654 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4655 vos_mem_free(pWdaParams) ;
4656 setStaKeyParams->status = eSIR_FAILURE ;
4657 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 return CONVERT_WDI2VOS_STATUS(status) ;
4660}
Jeff Johnson295189b2012-06-20 16:38:30 -07004661/*
4662 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4663 * send SET Bcast STA key RSP back to PE
4664 */
4665void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4666{
4667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4668 tWDA_CbContext *pWDA;
4669 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004671 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 if(NULL == pWdaParams)
4673 {
4674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004675 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_ASSERT(0) ;
4677 return ;
4678 }
4679 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4680 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4682 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004683 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 return ;
4686}
4687
Jeff Johnson295189b2012-06-20 16:38:30 -07004688/*
4689 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4690 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4691 * Encryption)
4692 */
4693VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4694 tSetStaKeyParams *setStaKeyParams )
4695{
4696 WDI_Status status = WDI_STATUS_SUCCESS ;
4697 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4698 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4699 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4700 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004703 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 if(NULL == wdiSetStaKeyParam)
4705 {
4706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 VOS_ASSERT(0);
4709 return VOS_STATUS_E_NOMEM;
4710 }
4711 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4712 if(NULL == pWdaParams)
4713 {
4714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004715 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 VOS_ASSERT(0);
4717 vos_mem_free(wdiSetStaKeyParam);
4718 return VOS_STATUS_E_NOMEM;
4719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 /* copy set STA key params to WDI structure */
4723 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4724 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4725 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4726 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 if(setStaKeyParams->encType != eSIR_ED_NONE)
4728 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4730 keyIndex++)
4731 {
4732 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4733 setStaKeyParams->key[keyIndex].keyId;
4734 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4735 setStaKeyParams->key[keyIndex].unicast;
4736 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4737 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004738 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4739 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4740 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4741 setStaKeyParams->key[keyIndex].paeRole;
4742 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4743 setStaKeyParams->key[keyIndex].keyLength;
4744 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4745 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4748 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004749 }
4750 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 /* Store set key pointer, as this will be used for response */
4752 /* store Params pass it to WDI */
4753 pWdaParams->pWdaContext = pWDA;
4754 pWdaParams->wdaMsgParam = setStaKeyParams;
4755 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004756 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4757 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 if(IS_WDI_STATUS_FAILURE(status))
4759 {
4760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4761 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4763 vos_mem_free(pWdaParams) ;
4764 setStaKeyParams->status = eSIR_FAILURE ;
4765 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 return CONVERT_WDI2VOS_STATUS(status) ;
4768}
Jeff Johnson295189b2012-06-20 16:38:30 -07004769/*
4770 * FUNCTION: WDA_RemoveStaKeyReqCallback
4771 * send SET BSS key RSP back to PE
4772 */
4773void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4774{
4775 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4776 tWDA_CbContext *pWDA;
4777 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 if(NULL == pWdaParams)
4781 {
4782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004783 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 VOS_ASSERT(0) ;
4785 return ;
4786 }
4787 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4788 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4790 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004791 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 return ;
4794}
4795
Jeff Johnson295189b2012-06-20 16:38:30 -07004796/*
4797 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4798 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4799 */
4800VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4801 tRemoveStaKeyParams *removeStaKeyParams )
4802{
4803 WDI_Status status = WDI_STATUS_SUCCESS ;
4804 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4805 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4806 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4807 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 if(NULL == wdiRemoveStaKeyParam)
4811 {
4812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004814 VOS_ASSERT(0);
4815 return VOS_STATUS_E_NOMEM;
4816 }
4817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4818 if(NULL == pWdaParams)
4819 {
4820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 VOS_ASSERT(0);
4823 vos_mem_free(wdiRemoveStaKeyParam);
4824 return VOS_STATUS_E_NOMEM;
4825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004826 /* copy remove STA key params to WDI structure*/
4827 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4828 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4829 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4830 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4831 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 /* Store remove key pointer, as this will be used for response */
4833 /* store Params pass it to WDI */
4834 pWdaParams->pWdaContext = pWDA;
4835 pWdaParams->wdaMsgParam = removeStaKeyParams;
4836 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4838 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 if(IS_WDI_STATUS_FAILURE(status))
4840 {
4841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4842 "Failure in remove STA Key Req WDI API, free all the memory " );
4843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4844 vos_mem_free(pWdaParams) ;
4845 removeStaKeyParams->status = eSIR_FAILURE ;
4846 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 return CONVERT_WDI2VOS_STATUS(status) ;
4849}
Jeff Johnson295189b2012-06-20 16:38:30 -07004850/*
4851 * FUNCTION: WDA_IsHandleSetLinkStateReq
4852 * Update the WDA state and return the status to handle this message or not
4853 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004854WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4855 tWDA_CbContext *pWDA,
4856 tLinkStateParams *linkStateParams)
4857{
4858 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004859 switch(linkStateParams->state)
4860 {
4861 case eSIR_LINK_PREASSOC_STATE:
4862 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4863 /*
4864 * set the WDA state to PRE ASSOC
4865 * copy the BSSID into pWDA to use it in join request and return,
4866 * No need to handle these messages.
4867 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004868 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4869 {
4870 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004871 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004872 }
4873 else
4874 {
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004877 VOS_ASSERT(0);
4878 }
4879
4880 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4881 {
4882 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004883 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004884 }
4885 else
4886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004888 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004889 VOS_ASSERT(0);
4890 }
4891
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4893 *channel and after ) so reset the WDA state to ready when the second
4894 * time UMAC issue the link state with PREASSOC
4895 */
4896 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4897 {
4898 /* RESET WDA state back to WDA_READY_STATE */
4899 pWDA->wdaState = WDA_READY_STATE;
4900 }
4901 else
4902 {
4903 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4904 }
4905 //populate linkState info in WDACbCtxt
4906 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 default:
4909 if(pWDA->wdaState != WDA_READY_STATE)
4910 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004911 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4912 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4913 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4914 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4915 *the ASSERT in WDA_Stop during module unload.*/
4916 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4917 {
4918 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004919 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004920 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004921 else
4922 {
4923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004924 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004925 status = WDA_IGNORE_SET_LINK_STATE;
4926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 }
4928 break;
4929 }
4930
4931 return status;
4932}
Jeff Johnson295189b2012-06-20 16:38:30 -07004933/*
4934 * FUNCTION: WDA_SetLinkStateCallback
4935 * call back function for set link state from WDI
4936 */
4937void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4938{
4939 tWDA_CbContext *pWDA;
4940 tLinkStateParams *linkStateParams;
4941 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004943 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 if(NULL == pWdaParams)
4945 {
4946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004947 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_ASSERT(0) ;
4949 return ;
4950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 /*
4954 * In STA mode start the BA activity check timer after association
4955 * and in AP mode start BA activity check timer after BSS start */
4956 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4957 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004958 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4959 ((status == WDI_STATUS_SUCCESS) &&
4960 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004961 {
4962 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 /*
4966 * No respone required for WDA_SET_LINK_STATE so free the request
4967 * param here
4968 */
4969 if( pWdaParams != NULL )
4970 {
4971 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4972 {
4973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4974 }
4975 vos_mem_free(pWdaParams);
4976 }
4977 return ;
4978}
Jeff Johnson295189b2012-06-20 16:38:30 -07004979/*
4980 * FUNCTION: WDA_ProcessSetLinkState
4981 * Request to WDI to set the link status.
4982 */
4983VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4984 tLinkStateParams *linkStateParams)
4985{
4986 WDI_Status status = WDI_STATUS_SUCCESS ;
4987 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4988 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4989 sizeof(WDI_SetLinkReqParamsType)) ;
4990 tWDA_ReqParams *pWdaParams ;
4991 tpAniSirGlobal pMac;
4992 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4993
4994 if(NULL == pMac)
4995 {
4996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004997 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004998 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004999 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 return VOS_STATUS_E_FAILURE;
5001 }
5002
5003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005004 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 if(NULL == wdiSetLinkStateParam)
5006 {
5007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 VOS_ASSERT(0);
5010 return VOS_STATUS_E_NOMEM;
5011 }
5012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5013 if(NULL == pWdaParams)
5014 {
5015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 VOS_ASSERT(0);
5018 vos_mem_free(wdiSetLinkStateParam);
5019 return VOS_STATUS_E_NOMEM;
5020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 if(WDA_IGNORE_SET_LINK_STATE ==
5022 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5023 {
5024 status = WDI_STATUS_E_FAILURE;
5025 }
5026 else
5027 {
5028 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5029 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5031 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5033 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 pWdaParams->pWdaContext = pWDA;
5035 /* Store remove key pointer, as this will be used for response */
5036 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 /* store Params pass it to WDI */
5038 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5039 /* Stop Timer only other than GO role and concurrent session */
5040 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005041 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5043 {
5044 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5047 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 if(IS_WDI_STATUS_FAILURE(status))
5049 {
5050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5051 "Failure in set link state Req WDI API, free all the memory " );
5052 }
5053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 if(IS_WDI_STATUS_FAILURE(status))
5055 {
5056 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005057 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 vos_mem_free(pWdaParams);
5059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 return CONVERT_WDI2VOS_STATUS(status) ;
5061}
Jeff Johnson295189b2012-06-20 16:38:30 -07005062/*
5063 * FUNCTION: WDA_GetStatsReqParamsCallback
5064 * send the response to PE with Stats received from WDI
5065 */
5066void WDA_GetStatsReqParamsCallback(
5067 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5068 void* pUserData)
5069{
5070 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5071 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5072
5073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005074 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 pGetPEStatsRspParams =
5076 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5077 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5078
5079 if(NULL == pGetPEStatsRspParams)
5080 {
5081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 VOS_ASSERT(0);
5084 return;
5085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5087 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5088 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5089 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005090
5091 //Fill the Session Id Properly in PE
5092 pGetPEStatsRspParams->sessionId = 0;
5093 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005094 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5096 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 vos_mem_copy( pGetPEStatsRspParams + 1,
5098 wdiGetStatsRsp + 1,
5099 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 /* send response to UMAC*/
5101 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5102
5103 return;
5104}
5105
Jeff Johnson295189b2012-06-20 16:38:30 -07005106/*
5107 * FUNCTION: WDA_ProcessGetStatsReq
5108 * Request to WDI to get the statistics
5109 */
5110VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5111 tAniGetPEStatsReq *pGetStatsParams)
5112{
5113 WDI_Status status = WDI_STATUS_SUCCESS ;
5114 WDI_GetStatsReqParamsType wdiGetStatsParam;
5115 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005118 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5119 pGetStatsParams->staId;
5120 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5121 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 status = WDI_GetStatsReq(&wdiGetStatsParam,
5124 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005125 if(IS_WDI_STATUS_FAILURE(status))
5126 {
5127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5128 "Failure in Get Stats Req WDI API, free all the memory " );
5129 pGetPEStatsRspParams =
5130 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5131 if(NULL == pGetPEStatsRspParams)
5132 {
5133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005136 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 return VOS_STATUS_E_NOMEM;
5138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5140 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5141 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5142 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5143 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5144 (void *)pGetPEStatsRspParams, 0) ;
5145 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005146 /* Free the request message */
5147 vos_mem_free(pGetStatsParams);
5148 return CONVERT_WDI2VOS_STATUS(status);
5149}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005150
5151#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5152/*
5153 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5154 * send the response to PE with roam Rssi received from WDI
5155 */
5156void WDA_GetRoamRssiReqParamsCallback(
5157 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5158 void* pUserData)
5159{
5160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5161 tWDA_CbContext *pWDA = NULL;
5162 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5163 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5165 "<------ %s " ,__func__);
5166 if(NULL == pWdaParams)
5167 {
5168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5169 "%s: pWdaParams received NULL", __func__);
5170 VOS_ASSERT(0) ;
5171 return ;
5172 }
5173 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5174 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5175
5176 if(NULL == pGetRoamRssiReqParams)
5177 {
5178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5179 "%s: pGetRoamRssiReqParams received NULL", __func__);
5180 VOS_ASSERT(0);
5181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5182 vos_mem_free(pWdaParams);
5183 return ;
5184 }
5185 pGetRoamRssiRspParams =
5186 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5187
5188 if(NULL == pGetRoamRssiRspParams)
5189 {
5190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5191 "%s: VOS MEM Alloc Failure", __func__);
5192 VOS_ASSERT(0);
5193 return;
5194 }
5195 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5196 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005197 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005198 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5199 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5200
5201 /* Assign get roam rssi req (backup) in to the response */
5202 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5203
5204 /* free WDI command buffer */
5205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5206 vos_mem_free(pWdaParams) ;
5207
5208 /* send response to UMAC*/
5209 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5210
5211 return;
5212}
5213
5214
5215
5216/*
5217 * FUNCTION: WDA_ProcessGetRoamRssiReq
5218 * Request to WDI to get the statistics
5219 */
5220VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5221 tAniGetRssiReq *pGetRoamRssiParams)
5222{
5223 WDI_Status status = WDI_STATUS_SUCCESS ;
5224 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5225 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5226 tWDA_ReqParams *pWdaParams = NULL;
5227
5228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5229 "------> %s " ,__func__);
5230 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5231 pGetRoamRssiParams->staId;
5232 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5233
5234 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5235 if(NULL == pWdaParams)
5236 {
5237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5238 "%s: VOS MEM Alloc Failure", __func__);
5239 VOS_ASSERT(0);
5240 return VOS_STATUS_E_NOMEM;
5241 }
5242
5243 /* Store Init Req pointer, as this will be used for response */
5244 pWdaParams->pWdaContext = pWDA;
5245
5246 /* Take Get roam Rssi req backup as it stores the callback to be called after
5247 receiving the response */
5248 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5249 pWdaParams->wdaWdiApiMsgParam = NULL;
5250
5251 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5252 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5253 if(IS_WDI_STATUS_FAILURE(status))
5254 {
5255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5256 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5257 pGetRoamRssiRspParams =
5258 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5259 if(NULL == pGetRoamRssiRspParams)
5260 {
5261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5262 "%s: VOS MEM Alloc Failure", __func__);
5263 VOS_ASSERT(0);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005264 return VOS_STATUS_E_NOMEM;
5265 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07005266 vos_mem_free(pGetRoamRssiParams);
5267 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005268 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5269 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5270 pGetRoamRssiRspParams->rssi = 0;
5271 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5272 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5273 (void *)pGetRoamRssiRspParams, 0) ;
5274 }
5275 return CONVERT_WDI2VOS_STATUS(status);
5276}
5277#endif
5278
5279
Jeff Johnson295189b2012-06-20 16:38:30 -07005280/*
5281 * FUNCTION: WDA_UpdateEDCAParamCallback
5282 * call back function for Update EDCA params from WDI
5283 */
5284void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5285{
5286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5287 tEdcaParams *pEdcaParams;
5288
5289 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 == pWdaParams)
5292 {
5293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005294 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 VOS_ASSERT(0) ;
5296 return ;
5297 }
5298 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5300 vos_mem_free(pWdaParams);
5301 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005302 return ;
5303}
Jeff Johnson295189b2012-06-20 16:38:30 -07005304/*
5305 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5306 * Request to WDI to Update the EDCA params.
5307 */
5308VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5309 tEdcaParams *pEdcaParams)
5310{
5311 WDI_Status status = WDI_STATUS_SUCCESS ;
5312 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5313 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5314 sizeof(WDI_UpdateEDCAParamsType)) ;
5315 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 if(NULL == wdiEdcaParam)
5319 {
5320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005323 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005324 return VOS_STATUS_E_NOMEM;
5325 }
5326 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5327 if(NULL == pWdaParams)
5328 {
5329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005330 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 VOS_ASSERT(0);
5332 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005333 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 return VOS_STATUS_E_NOMEM;
5335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005337 /*
5338 Since firmware is not using highperformance flag, we have removed
5339 this flag from wdiEDCAInfo structure to match sizeof the structure
5340 between host and firmware.In future if we are planning to use
5341 highperformance flag then Please define this flag in wdiEDCAInfo
5342 structure, update it here and send it to firmware. i.e.
5343 Following is the original line which we removed as part of the fix
5344 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5345 pEdcaParams->highPerformance;
5346 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5348 &pEdcaParams->acbe);
5349 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5350 &pEdcaParams->acbk);
5351 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5352 &pEdcaParams->acvi);
5353 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5354 &pEdcaParams->acvo);
5355 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 pWdaParams->pWdaContext = pWDA;
5357 /* Store remove key pointer, as this will be used for response */
5358 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005359 /* store Params pass it to WDI */
5360 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5362 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 if(IS_WDI_STATUS_FAILURE(status))
5364 {
5365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5366 "Failure in Update EDCA Params WDI API, free all the memory " );
5367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5368 vos_mem_free(pWdaParams);
5369 vos_mem_free(pEdcaParams);
5370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 return CONVERT_WDI2VOS_STATUS(status) ;
5372}
Jeff Johnson295189b2012-06-20 16:38:30 -07005373/*
5374 * FUNCTION: WDA_AddBAReqCallback
5375 * send ADD BA RSP back to PE
5376 */
5377void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5378 void* pUserData)
5379{
5380 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5381 tWDA_CbContext *pWDA;
5382 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005384 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(NULL == pWdaParams)
5386 {
5387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005388 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 VOS_ASSERT(0) ;
5390 return ;
5391 }
5392 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5393 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5395 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005396 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 return ;
5399}
5400
Jeff Johnson295189b2012-06-20 16:38:30 -07005401/*
5402 * FUNCTION: WDA_ProcessAddBAReq
5403 * Request to WDI to Update the ADDBA REQ params.
5404 */
5405VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5406 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5407{
Jeff Johnson43971f52012-07-17 12:26:56 -07005408 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005409 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5410 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5411 sizeof(WDI_AddBAReqParamsType)) ;
5412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 if(NULL == wdiAddBAReqParam)
5416 {
5417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005418 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005419 VOS_ASSERT(0);
5420 return VOS_STATUS_E_NOMEM;
5421 }
5422 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5423 if(NULL == pWdaParams)
5424 {
5425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 VOS_ASSERT(0);
5428 vos_mem_free(wdiAddBAReqParam);
5429 return VOS_STATUS_E_NOMEM;
5430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 do
5432 {
5433 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005434 wdiAddBaInfo->ucSTAIdx = staIdx ;
5435 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5436 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 } while(0) ;
5438 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005439 pWdaParams->pWdaContext = pWDA;
5440 /* store Params pass it to WDI */
5441 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5442 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005443 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5444 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005445
Jeff Johnson43971f52012-07-17 12:26:56 -07005446 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 {
5448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005449 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5450 status = CONVERT_WDI2VOS_STATUS(wstatus);
5451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005452 vos_mem_free(pWdaParams);
5453 pAddBAReqParams->status = eSIR_FAILURE;
5454 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5455 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005456 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457}
Jeff Johnson295189b2012-06-20 16:38:30 -07005458/*
5459 * FUNCTION: WDA_AddBASessionReqCallback
5460 * send ADD BA SESSION RSP back to PE/(or TL)
5461 */
5462void WDA_AddBASessionReqCallback(
5463 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5464{
5465 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5466 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5467 tWDA_CbContext *pWDA;
5468 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005470 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 if(NULL == pWdaParams)
5472 {
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005474 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005475 VOS_ASSERT(0) ;
5476 return ;
5477 }
5478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5479 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 if( NULL == pAddBAReqParams )
5481 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005483 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5486 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005487 return ;
5488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5490 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 /*
5492 * if WDA in update TL state, update TL with BA session parama and send
5493 * another request to HAL(/WDI) (ADD_BA_REQ)
5494 */
5495
5496 if((VOS_STATUS_SUCCESS ==
5497 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5498 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5499 {
5500 /* Update TL with BA info received from HAL/WDI */
5501 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5502 wdiAddBaSession->usBaSessionID,
5503 wdiAddBaSession->ucSTAIdx,
5504 wdiAddBaSession->ucBaTID,
5505 wdiAddBaSession->ucBaBufferSize,
5506 wdiAddBaSession->ucWinSize,
5507 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005508 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5509 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5510 }
5511 else
5512 {
5513 pAddBAReqParams->status =
5514 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5515
5516 /* Setting Flag to indicate that Set BA is success */
5517 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5518 {
5519 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5520 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5521 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 /*Reset the WDA state to READY */
5526 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005527 return ;
5528}
5529
Jeff Johnson295189b2012-06-20 16:38:30 -07005530/*
5531 * FUNCTION: WDA_ProcessAddBASessionReq
5532 * Request to WDI to Update the ADDBA REQ params.
5533 */
5534VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5535 tAddBAParams *pAddBAReqParams)
5536{
5537 WDI_Status status = WDI_STATUS_SUCCESS ;
5538 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5539 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5540 sizeof(WDI_AddBASessionReqParamsType)) ;
5541 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005542 WLANTL_STAStateType tlSTAState = 0;
5543
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 if(NULL == wdiAddBASessionReqParam)
5547 {
5548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_ASSERT(0);
5551 return VOS_STATUS_E_NOMEM;
5552 }
5553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5554 if(NULL == pWdaParams)
5555 {
5556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 VOS_ASSERT(0);
5559 vos_mem_free(wdiAddBASessionReqParam);
5560 return VOS_STATUS_E_NOMEM;
5561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 /*
5563 * Populate ADD BA parameters and pass these paarmeters to WDI.
5564 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5565 * the state to track if these is BA recipient case or BA initiator
5566 * case.
5567 */
5568 do
5569 {
5570 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5571 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5572 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5573 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5574 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5575 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5576 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005578 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5579 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5580 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5581 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5582 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 /* check the BA direction and update state accordingly */
5584 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5585 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5586 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5587
5588 }while(0) ;
5589 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005590 pWdaParams->pWdaContext = pWDA;
5591 /* Store ADD BA pointer, as this will be used for response */
5592 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5593 /* store Params pass it to WDI */
5594 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005595
5596 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5597 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5598 */
5599 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5600 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5601 {
5602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5603 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5604 status = WDI_STATUS_E_NOT_ALLOWED;
5605 pAddBAReqParams->status =
5606 CONVERT_WDI2SIR_STATUS(status) ;
5607 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5608 /*Reset the WDA state to READY */
5609 pWDA->wdaState = WDA_READY_STATE;
5610 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5611 vos_mem_free(pWdaParams);
5612
5613 return CONVERT_WDI2VOS_STATUS(status) ;
5614 }
5615
Jeff Johnson295189b2012-06-20 16:38:30 -07005616 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5617 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 if(IS_WDI_STATUS_FAILURE(status))
5619 {
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005621 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5623 "Send ADD BA failure response to PE\n");
5624 pAddBAReqParams->status =
5625 CONVERT_WDI2SIR_STATUS(status) ;
5626 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005627 /*Reset the WDA state to READY */
5628 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 vos_mem_free(pWdaParams);
5631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005633}
Jeff Johnson295189b2012-06-20 16:38:30 -07005634/*
5635 * FUNCTION: WDA_DelBANotifyTL
5636 * send DEL BA IND to TL
5637 */
5638void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5639 tDelBAParams *pDelBAReqParams)
5640{
5641 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5642 //tSirMsgQ msg;
5643 vos_msg_t vosMsg;
5644 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 if(NULL == pDelBAInd)
5646 {
5647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 VOS_ASSERT(0) ;
5650 return;
5651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5653 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5654 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5655 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005656
Jeff Johnson295189b2012-06-20 16:38:30 -07005657
5658 vosMsg.type = WDA_DELETEBA_IND;
5659 vosMsg.bodyptr = pDelBAInd;
5660 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5661 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5662 {
5663 vosStatus = VOS_STATUS_E_BADMSG;
5664 }
5665}
Jeff Johnson295189b2012-06-20 16:38:30 -07005666/*
5667 * FUNCTION: WDA_DelBAReqCallback
5668 * send DEL BA RSP back to PE
5669 */
5670void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5671{
5672 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5673 tWDA_CbContext *pWDA;
5674 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005676 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 if(NULL == pWdaParams)
5678 {
5679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005680 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005681 VOS_ASSERT(0) ;
5682 return ;
5683 }
5684 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5685 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005686 /* Notify TL about DEL BA in case of recipinet */
5687 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5688 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5689 {
5690 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 /*
5693 * No respone required for WDA_DELBA_IND so just free the request
5694 * param here
5695 */
5696 vos_mem_free(pDelBAReqParams);
5697 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5698 vos_mem_free(pWdaParams);
5699 return ;
5700}
5701
Jeff Johnson295189b2012-06-20 16:38:30 -07005702/*
5703 * FUNCTION: WDA_ProcessDelBAReq
5704 * Request to WDI to Update the DELBA REQ params.
5705 */
5706VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5707 tDelBAParams *pDelBAReqParams)
5708{
5709 WDI_Status status = WDI_STATUS_SUCCESS ;
5710 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5711 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5712 sizeof(WDI_DelBAReqParamsType)) ;
5713 tWDA_ReqParams *pWdaParams ;
5714 tANI_U16 staIdx = 0;
5715 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 if(NULL == wdiDelBAReqParam)
5719 {
5720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 VOS_ASSERT(0);
5723 return VOS_STATUS_E_NOMEM;
5724 }
5725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5726 if(NULL == pWdaParams)
5727 {
5728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 VOS_ASSERT(0);
5731 vos_mem_free(wdiDelBAReqParam);
5732 return VOS_STATUS_E_NOMEM;
5733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005734 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5735 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5736 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5737 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 pWdaParams->pWdaContext = pWDA;
5739 /* Store DEL BA pointer, as this will be used for response */
5740 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 /* store Params pass it to WDI */
5742 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5744 * maintained in WDA, so that WDA can retry for another BA session
5745 */
5746 staIdx = pDelBAReqParams->staIdx;
5747 tid = pDelBAReqParams->baTID;
5748 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 status = WDI_DelBAReq(wdiDelBAReqParam,
5750 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 if(IS_WDI_STATUS_FAILURE(status))
5752 {
5753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5754 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5756 vos_mem_free(pWdaParams->wdaMsgParam);
5757 vos_mem_free(pWdaParams);
5758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005760}
Jeff Johnson295189b2012-06-20 16:38:30 -07005761/*
5762 * FUNCTION: WDA_AddTSReqCallback
5763 * send ADD TS RSP back to PE
5764 */
5765void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5766{
5767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5768 tWDA_CbContext *pWDA;
5769 tAddTsParams *pAddTsReqParams;
5770
5771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005772 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 if(NULL == pWdaParams)
5774 {
5775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005776 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 VOS_ASSERT(0) ;
5778 return ;
5779 }
5780 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5781 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5783 vos_mem_free(pWdaParams);
5784
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005785 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 return ;
5788}
5789
Jeff Johnson295189b2012-06-20 16:38:30 -07005790/*
5791 * FUNCTION: WDA_ProcessAddTSReq
5792 * Request to WDI to Update the ADD TS REQ params.
5793 */
5794VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5795 tAddTsParams *pAddTsReqParams)
5796{
5797 WDI_Status status = WDI_STATUS_SUCCESS ;
5798 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5799 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5800 sizeof(WDI_AddTSReqParamsType)) ;
5801 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005803 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005804 if(NULL == wdiAddTSReqParam)
5805 {
5806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 VOS_ASSERT(0);
5809 return VOS_STATUS_E_NOMEM;
5810 }
5811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5812 if(NULL == pWdaParams)
5813 {
5814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 VOS_ASSERT(0);
5817 vos_mem_free(wdiAddTSReqParam);
5818 return VOS_STATUS_E_NOMEM;
5819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5821 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 //TS IE
5823 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5824 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5825 pAddTsReqParams->tspec.length;
5826
5827 //TS IE : TS INFO : TRAFFIC
5828 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5829 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5830 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5831 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5832 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5833 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5834 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5835 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5836 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5837 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5838 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5839 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5840 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5841 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5842 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5843 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5844
5845 //TS IE : TS INFO : SCHEDULE
5846 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5847 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5848 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5849 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 //TS IE
5851 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5852 pAddTsReqParams->tspec.nomMsduSz;
5853 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5854 pAddTsReqParams->tspec.maxMsduSz;
5855 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5856 pAddTsReqParams->tspec.minSvcInterval;
5857 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5858 pAddTsReqParams->tspec.maxSvcInterval;
5859 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5860 pAddTsReqParams->tspec.inactInterval;
5861 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5862 pAddTsReqParams->tspec.suspendInterval;
5863 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5864 pAddTsReqParams->tspec.svcStartTime;
5865 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5866 pAddTsReqParams->tspec.minDataRate;
5867 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5868 pAddTsReqParams->tspec.meanDataRate;
5869 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5870 pAddTsReqParams->tspec.peakDataRate;
5871 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5872 pAddTsReqParams->tspec.maxBurstSz;
5873 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5874 pAddTsReqParams->tspec.delayBound;
5875 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5876 pAddTsReqParams->tspec.minPhyRate;
5877 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5878 pAddTsReqParams->tspec.surplusBw;
5879 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5880 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 /* TODO: tAddTsParams doesn't have the following fields */
5882#if 0
5883 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5884 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5885 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5886 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5887#endif
5888 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5889
5890 pWdaParams->pWdaContext = pWDA;
5891 /* Store ADD TS pointer, as this will be used for response */
5892 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 /* store Params pass it to WDI */
5894 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 status = WDI_AddTSReq(wdiAddTSReqParam,
5896 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005897 if(IS_WDI_STATUS_FAILURE(status))
5898 {
5899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5900 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5902 vos_mem_free(pWdaParams);
5903 pAddTsReqParams->status = eSIR_FAILURE ;
5904 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907}
5908
Jeff Johnson295189b2012-06-20 16:38:30 -07005909/*
5910 * FUNCTION: WDA_DelTSReqCallback
5911 * send DEL TS RSP back to PE
5912 */
5913void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5914{
5915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005917 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5919 vos_mem_free(pWdaParams->wdaMsgParam) ;
5920 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 /*
5922 * No respone required for WDA_DEL_TS_REQ so just free the request
5923 * param here
5924 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 return ;
5926}
5927
Jeff Johnson295189b2012-06-20 16:38:30 -07005928/*
5929 * FUNCTION: WDA_ProcessDelTSReq
5930 * Request to WDI to Update the DELTS REQ params.
5931 */
5932VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5933 tDelTsParams *pDelTSReqParams)
5934{
5935 WDI_Status status = WDI_STATUS_SUCCESS ;
5936 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5937 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5938 sizeof(WDI_DelTSReqParamsType)) ;
5939 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005941 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 if(NULL == wdiDelTSReqParam)
5943 {
5944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 VOS_ASSERT(0);
5947 return VOS_STATUS_E_NOMEM;
5948 }
5949 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5950 if(NULL == pWdaParams)
5951 {
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005953 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 VOS_ASSERT(0);
5955 vos_mem_free(wdiDelTSReqParam);
5956 return VOS_STATUS_E_NOMEM;
5957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5959 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5960 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5961 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5962 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 pWdaParams->pWdaContext = pWDA;
5964 /* Store DEL TS pointer, as this will be used for response */
5965 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 /* store Params pass it to WDI */
5967 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 status = WDI_DelTSReq(wdiDelTSReqParam,
5969 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 if(IS_WDI_STATUS_FAILURE(status))
5971 {
5972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5973 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5974 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5975 vos_mem_free(pWdaParams->wdaMsgParam);
5976 vos_mem_free(pWdaParams);
5977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005978 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005979}
Jeff Johnson295189b2012-06-20 16:38:30 -07005980/*
5981 * FUNCTION: WDA_UpdateBeaconParamsCallback
5982 * Free the memory. No need to send any response to PE in this case
5983 */
5984void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5985{
5986 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005988 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 if(NULL == pWdaParams)
5990 {
5991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 VOS_ASSERT(0) ;
5994 return ;
5995 }
5996 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5997 vos_mem_free(pWdaParams->wdaMsgParam) ;
5998 vos_mem_free(pWdaParams);
5999 /*
6000 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6001 * param here
6002 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 return ;
6004}
Jeff Johnson295189b2012-06-20 16:38:30 -07006005/*
6006 * FUNCTION: WDA_ProcessUpdateBeaconParams
6007 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6008 */
6009VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6010 tUpdateBeaconParams *pUpdateBeaconParams)
6011{
6012 WDI_Status status = WDI_STATUS_SUCCESS ;
6013 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6014 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6015 sizeof(WDI_UpdateBeaconParamsType)) ;
6016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006019 if(NULL == wdiUpdateBeaconParams)
6020 {
6021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 VOS_ASSERT(0);
6024 return VOS_STATUS_E_NOMEM;
6025 }
6026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6027 if(NULL == pWdaParams)
6028 {
6029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 VOS_ASSERT(0);
6032 vos_mem_free(wdiUpdateBeaconParams);
6033 return VOS_STATUS_E_NOMEM;
6034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6036 pUpdateBeaconParams->bssIdx;
6037 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6038 pUpdateBeaconParams->fShortPreamble;
6039 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6040 pUpdateBeaconParams->fShortSlotTime;
6041 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6042 pUpdateBeaconParams->beaconInterval;
6043 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6044 pUpdateBeaconParams->llaCoexist;
6045 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6046 pUpdateBeaconParams->llbCoexist;
6047 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6048 pUpdateBeaconParams->llgCoexist;
6049 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6050 pUpdateBeaconParams->ht20MhzCoexist;
6051 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6052 pUpdateBeaconParams->llnNonGFCoexist;
6053 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6054 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6055 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6056 pUpdateBeaconParams->fRIFSMode;
6057 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6058 pUpdateBeaconParams->paramChangeBitmap;
6059 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6060
6061 pWdaParams->pWdaContext = pWDA;
6062 /* Store UpdateBeacon Req pointer, as this will be used for response */
6063 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006064 /* store Params pass it to WDI */
6065 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6067 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6068 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 if(IS_WDI_STATUS_FAILURE(status))
6070 {
6071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6072 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6074 vos_mem_free(pWdaParams->wdaMsgParam);
6075 vos_mem_free(pWdaParams);
6076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078}
Jeff Johnson295189b2012-06-20 16:38:30 -07006079#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006080/*
6081 * FUNCTION: WDA_TSMStatsReqCallback
6082 * send TSM Stats RSP back to PE
6083 */
6084void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6085{
6086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6087 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006088 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6089 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006090
6091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006092 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 if(NULL == pWdaParams)
6094 {
6095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006096 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 VOS_ASSERT(0) ;
6098 return ;
6099 }
6100 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006101 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6102
6103 if(NULL == pGetTsmStatsReqParams)
6104 {
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6106 "%s: pGetTsmStatsReqParams received NULL", __func__);
6107 VOS_ASSERT(0);
6108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6109 vos_mem_free(pWdaParams);
6110 return;
6111 }
6112
6113 pTsmRspParams =
6114 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 if( NULL == pTsmRspParams )
6116 {
6117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 VOS_ASSERT( 0 );
6120 return ;
6121 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006122 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6123 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6124 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6125
Jeff Johnson295189b2012-06-20 16:38:30 -07006126 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6127 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6128 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6129 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6130 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6131 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6132 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6133 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6134 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6135 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006136
6137 /* Assign get tsm stats req req (backup) in to the response */
6138 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6139
6140 /* free WDI command buffer */
6141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6142 vos_mem_free(pWdaParams);
6143
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 return ;
6146}
6147
6148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149/*
6150 * FUNCTION: WDA_ProcessTsmStatsReq
6151 * Request to WDI to get the TSM Stats params.
6152 */
6153VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006154 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006155{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006156 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006158 tWDA_ReqParams *pWdaParams = NULL;
6159 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6160
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006162 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6164 sizeof(WDI_TSMStatsReqParamsType));
6165 if(NULL == wdiTSMReqParam)
6166 {
6167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 VOS_ASSERT(0);
6170 return VOS_STATUS_E_NOMEM;
6171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6173 if(NULL == pWdaParams)
6174 {
6175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 VOS_ASSERT(0);
6178 vos_mem_free(wdiTSMReqParam);
6179 return VOS_STATUS_E_NOMEM;
6180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6182 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6183 pTsmStats->bssId,
6184 sizeof(wpt_macAddr));
6185 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6186
6187 pWdaParams->pWdaContext = pWDA;
6188 /* Store TSM Stats pointer, as this will be used for response */
6189 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006190 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 status = WDI_TSMStatsReq(wdiTSMReqParam,
6192 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006193 if(IS_WDI_STATUS_FAILURE(status))
6194 {
6195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6196 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006197 vos_mem_free(pWdaParams);
6198
6199 pGetTsmStatsRspParams =
6200 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6201 if(NULL == pGetTsmStatsRspParams)
6202 {
6203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6204 "%s: VOS MEM Alloc Failure", __func__);
6205 VOS_ASSERT(0);
6206 vos_mem_free(pTsmStats);
6207 return VOS_STATUS_E_NOMEM;
6208 }
6209 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6210 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6211 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6212
6213 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006215 return CONVERT_WDI2VOS_STATUS(status) ;
6216}
6217#endif
6218/*
6219 * FUNCTION: WDA_SendBeaconParamsCallback
6220 * No need to send any response to PE in this case
6221 */
6222void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6223{
6224
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 return ;
6228}
Jeff Johnson295189b2012-06-20 16:38:30 -07006229/*
6230 * FUNCTION: WDA_ProcessSendBeacon
6231 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6232 * start beacon trasmission
6233 */
6234VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6235 tSendbeaconParams *pSendbeaconParams)
6236{
6237 WDI_Status status = WDI_STATUS_SUCCESS ;
6238 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6242 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6243 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6244 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6246 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306247 /* p2pIeOffset should be atleast greater than timIeOffset */
6248 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6249 (pSendbeaconParams->p2pIeOffset <
6250 pSendbeaconParams->timIeOffset))
6251 {
6252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6253 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6254 VOS_ASSERT( 0 );
6255 return WDI_STATUS_E_FAILURE;
6256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6258 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 /* Copy the beacon template to local buffer */
6260 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6261 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6262 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6263
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6265 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 if(IS_WDI_STATUS_FAILURE(status))
6267 {
6268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6269 "Failure in SEND BEACON REQ Params WDI API" );
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 vos_mem_free(pSendbeaconParams);
6272 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006273}
Jeff Johnson295189b2012-06-20 16:38:30 -07006274/*
6275 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6276 * No need to send any response to PE in this case
6277 */
6278void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6279{
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 return ;
6283}
6284
Jeff Johnson295189b2012-06-20 16:38:30 -07006285/*
6286 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6287 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6288 * send probe response
6289 */
6290VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6291 tSendProbeRespParams *pSendProbeRspParams)
6292{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006293 WDI_Status status = WDI_STATUS_SUCCESS;
6294 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6295 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006297 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006298
6299 if (!wdiSendProbeRspParam)
6300 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006303 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006305 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 /* Copy the Probe Response template to local buffer */
6308 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006309 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 pSendProbeRspParams->pProbeRespTemplate,
6311 pSendProbeRspParams->probeRespTemplateLen);
6312 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006313 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6315 WDI_PROBE_REQ_BITMAP_IE_LEN);
6316
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006317 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006318
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006319 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 if(IS_WDI_STATUS_FAILURE(status))
6322 {
6323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6324 "Failure in SEND Probe RSP Params WDI API" );
6325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006327 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006329}
Jeff Johnson295189b2012-06-20 16:38:30 -07006330#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6331/*
6332 * FUNCTION: WDA_SetMaxTxPowerCallBack
6333 * send the response to PE with power value received from WDI
6334 */
6335void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6336 void* pUserData)
6337{
6338 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6339 tWDA_CbContext *pWDA = NULL;
6340 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6341
6342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006343 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 if(NULL == pWdaParams)
6345 {
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006347 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 VOS_ASSERT(0) ;
6349 return ;
6350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6352 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 if( NULL == pMaxTxPowerParams )
6354 {
6355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006356 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006357 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6359 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 return ;
6361 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006362
Jeff Johnson295189b2012-06-20 16:38:30 -07006363
6364 /*need to free memory for the pointers used in the
6365 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6367 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006369
Jeff Johnson295189b2012-06-20 16:38:30 -07006370
6371 /* send response to UMAC*/
6372 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6373
6374 return;
6375}
Jeff Johnson295189b2012-06-20 16:38:30 -07006376/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006377 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 * Request to WDI to send set Max Tx Power Request
6379 */
6380 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6381 tMaxTxPowerParams *MaxTxPowerParams)
6382{
6383 WDI_Status status = WDI_STATUS_SUCCESS;
6384 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6385 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006386
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006388 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006389
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6391 sizeof(WDI_SetMaxTxPowerParamsType));
6392 if(NULL == wdiSetMaxTxPowerParams)
6393 {
6394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 VOS_ASSERT(0);
6397 return VOS_STATUS_E_NOMEM;
6398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6400 if(NULL == pWdaParams)
6401 {
6402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 vos_mem_free(wdiSetMaxTxPowerParams);
6405 VOS_ASSERT(0);
6406 return VOS_STATUS_E_NOMEM;
6407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 /* Copy.Max.Tx.Power Params to WDI structure */
6409 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6410 MaxTxPowerParams->bssId,
6411 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6413 MaxTxPowerParams->selfStaMacAddr,
6414 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6416 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006417 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 pWdaParams->pWdaContext = pWDA;
6419 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 /* store Params pass it to WDI */
6421 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6423 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 if(IS_WDI_STATUS_FAILURE(status))
6425 {
6426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6427 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6429 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006430 /* send response to UMAC*/
6431 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 }
6433 return CONVERT_WDI2VOS_STATUS(status);
6434
6435}
Jeff Johnson295189b2012-06-20 16:38:30 -07006436#endif
schang86c22c42013-03-13 18:41:24 -07006437
6438/*
6439 * FUNCTION: WDA_SetTxPowerCallBack
6440 * send the response to PE with power value received from WDI
6441 */
6442void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6443 void* pUserData)
6444{
6445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6446 tWDA_CbContext *pWDA = NULL;
6447 tSirSetTxPowerReq *pTxPowerParams = NULL;
6448
6449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6450 "<------ %s ", __func__);
6451 if(NULL == pWdaParams)
6452 {
6453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6454 "%s: pWdaParams received NULL", __func__);
6455 VOS_ASSERT(0) ;
6456 return ;
6457 }
6458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6459 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6460 if(NULL == pTxPowerParams)
6461 {
6462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6463 "%s: pTxPowerParams received NULL " ,__func__);
6464 VOS_ASSERT(0);
6465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6466 vos_mem_free(pWdaParams);
6467 return ;
6468 }
6469
6470 /*need to free memory for the pointers used in the
6471 WDA Process.Set Max Tx Power Req function*/
6472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6473 vos_mem_free(pWdaParams);
6474
6475 /* send response to UMAC*/
6476 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6477 return;
6478}
6479
6480/*
6481 * FUNCTION: WDA_ProcessSetTxPowerReq
6482 * Request to WDI to send set Tx Power Request
6483 */
6484 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6485 tSirSetTxPowerReq *txPowerParams)
6486{
6487 WDI_Status status = WDI_STATUS_SUCCESS;
6488 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6489 tWDA_ReqParams *pWdaParams = NULL;
6490
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6492 "------> %s ", __func__);
6493
6494 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6495 sizeof(WDI_SetTxPowerParamsType));
6496 if(NULL == wdiSetTxPowerParams)
6497 {
6498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6499 "%s: VOS MEM Alloc Failure", __func__);
6500 VOS_ASSERT(0);
6501 return VOS_STATUS_E_NOMEM;
6502 }
6503 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6504 if(NULL == pWdaParams)
6505 {
6506 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6507 "%s: VOS MEM Alloc Failure", __func__);
6508 vos_mem_free(wdiSetTxPowerParams);
6509 VOS_ASSERT(0);
6510 return VOS_STATUS_E_NOMEM;
6511 }
6512 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6513 txPowerParams->bssIdx;
6514 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6515 txPowerParams->mwPower;
6516 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6517 pWdaParams->pWdaContext = pWDA;
6518 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6519 /* store Params pass it to WDI */
6520 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6521 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6522 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6523 if(IS_WDI_STATUS_FAILURE(status))
6524 {
6525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6526 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6528 vos_mem_free(pWdaParams);
6529 /* send response to UMAC*/
6530 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6531 }
6532 return CONVERT_WDI2VOS_STATUS(status);
6533}
6534
Jeff Johnson295189b2012-06-20 16:38:30 -07006535/*
6536 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6537 * Free the memory. No need to send any response to PE in this case
6538 */
6539void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6540{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006541 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6542
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006545
6546 if(NULL == pWdaParams)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006550 VOS_ASSERT(0) ;
6551 return ;
6552 }
6553
6554 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6555 vos_mem_free(pWdaParams->wdaMsgParam) ;
6556 vos_mem_free(pWdaParams);
6557
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 /*
6559 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6560 * so just free the request param here
6561 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006562 return ;
6563}
6564
Jeff Johnson295189b2012-06-20 16:38:30 -07006565/*
6566 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6567 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6568 */
6569VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6570 tP2pPsParams *pP2pPsConfigParams)
6571{
6572 WDI_Status status = WDI_STATUS_SUCCESS ;
6573 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6574 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6575 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006576 tWDA_ReqParams *pWdaParams = NULL;
6577
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006579 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006580 if(NULL == wdiSetP2PGONOAReqParam)
6581 {
6582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 VOS_ASSERT(0);
6585 return VOS_STATUS_E_NOMEM;
6586 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006587
6588 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6589 if(NULL == pWdaParams)
6590 {
6591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006592 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006593 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006594 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006595 VOS_ASSERT(0);
6596 return VOS_STATUS_E_NOMEM;
6597 }
6598
Jeff Johnson295189b2012-06-20 16:38:30 -07006599 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6600 pP2pPsConfigParams->opp_ps;
6601 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6602 pP2pPsConfigParams->ctWindow;
6603 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6604 pP2pPsConfigParams->count;
6605 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6606 pP2pPsConfigParams->duration;
6607 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6608 pP2pPsConfigParams->interval;
6609 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6610 pP2pPsConfigParams->single_noa_duration;
6611 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6612 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006613
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6615 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006616 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6617
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006619 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6620 pWdaParams->pWdaContext = pWDA;
6621
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006623 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6624
Jeff Johnson295189b2012-06-20 16:38:30 -07006625 if(IS_WDI_STATUS_FAILURE(status))
6626 {
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6628 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006629 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6630 vos_mem_free(pWdaParams->wdaMsgParam);
6631 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 return CONVERT_WDI2VOS_STATUS(status);
6634
Jeff Johnson295189b2012-06-20 16:38:30 -07006635}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306636
6637#ifdef FEATURE_WLAN_TDLS
6638/*
6639 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6640 * Free the memory. No need to send any response to PE in this case
6641 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306642void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6643 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306644{
6645 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6646 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306647 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306648
6649
6650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6651 "<------ %s " ,__func__);
6652 if(NULL == pWdaParams)
6653 {
6654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6655 "%s: pWdaParams received NULL", __func__);
6656 VOS_ASSERT(0) ;
6657 return ;
6658 }
6659 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6660
6661 if(NULL == pWdaParams)
6662 {
6663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6664 "%s: pWdaParams received NULL", __func__);
6665 VOS_ASSERT(0) ;
6666 return ;
6667 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306668 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6669 if( NULL == pTdlsLinkEstablishParams )
6670 {
6671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6672 "%s: pTdlsLinkEstablishParams "
6673 "received NULL " ,__func__);
6674 VOS_ASSERT(0);
6675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6676 vos_mem_free(pWdaParams);
6677 return ;
6678 }
6679 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6680 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306682 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306683 /* send response to UMAC*/
6684 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6685
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306686 return ;
6687}
6688
6689VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6690 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6691{
6692 WDI_Status status = WDI_STATUS_SUCCESS ;
6693 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6694 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6695 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6696 tWDA_ReqParams *pWdaParams = NULL;
6697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6698 "------> %s " ,__func__);
6699 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6700 {
6701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6702 "%s: VOS MEM Alloc Failure", __func__);
6703 VOS_ASSERT(0);
6704 return VOS_STATUS_E_NOMEM;
6705 }
6706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6707 if(NULL == pWdaParams)
6708 {
6709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6710 "%s: VOS MEM Alloc Failure", __func__);
6711 vos_mem_free(pTdlsLinkEstablishParams);
6712 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6713 VOS_ASSERT(0);
6714 return VOS_STATUS_E_NOMEM;
6715 }
6716 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306717 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306718 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306719 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306720 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306721 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306722 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306723 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306724 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306725 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306726
6727 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6728 /* Store msg pointer from PE, as this will be used for response */
6729 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6730 /* store Params pass it to WDI */
6731 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6732 pWdaParams->pWdaContext = pWDA;
6733
6734 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6735 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6736 WDA_SetTDLSLinkEstablishReqParamsCallback,
6737 pWdaParams);
6738 if(IS_WDI_STATUS_FAILURE(status))
6739 {
6740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6741 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6743 vos_mem_free(pWdaParams->wdaMsgParam);
6744 vos_mem_free(pWdaParams);
6745 }
6746 return CONVERT_WDI2VOS_STATUS(status);
6747}
6748#endif
6749
6750
Jeff Johnson295189b2012-06-20 16:38:30 -07006751#ifdef WLAN_FEATURE_VOWIFI_11R
6752/*
6753 * FUNCTION: WDA_AggrAddTSReqCallback
6754 * send ADD AGGREGATED TS RSP back to PE
6755 */
6756void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6757{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006758 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6759 tWDA_CbContext *pWDA;
6760 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 int i;
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__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006764 if(NULL == pWdaParams)
6765 {
6766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006767 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006768 VOS_ASSERT(0) ;
6769 return ;
6770 }
6771
6772 pWDA = pWdaParams->pWdaContext;
6773 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774
6775 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6776 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006777 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006780
6781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6782 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 return ;
6784}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006785/*
6786 * FUNCTION: WDA_ProcessAddTSReq
6787 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6788 */
6789VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6790 tAggrAddTsParams *pAggrAddTsReqParams)
6791{
6792 WDI_Status status = WDI_STATUS_SUCCESS ;
6793 int i;
6794 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006795 tWDA_ReqParams *pWdaParams = NULL;
6796
6797
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006799 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6801 sizeof(WDI_AggrAddTSReqParamsType)) ;
6802 if(NULL == wdiAggrAddTSReqParam)
6803 {
6804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 VOS_ASSERT(0);
6807 return VOS_STATUS_E_NOMEM;
6808 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006809
6810
6811 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6812 if(NULL == pWdaParams)
6813 {
6814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006815 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006816 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006817 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006818 VOS_ASSERT(0);
6819 return VOS_STATUS_E_NOMEM;
6820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6822 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6823 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6825 {
6826 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6827 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6828 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006829 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6830 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6831 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6832 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6833 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6834 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6835 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6836 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6837 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6838 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6839 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6840 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6841 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6842 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6843 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6844 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6846 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6848 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6849 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6850 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6851 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6852 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6853 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6854 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6855 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6856 pAggrAddTsReqParams->tspec[i].inactInterval;
6857 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6858 pAggrAddTsReqParams->tspec[i].suspendInterval;
6859 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6860 pAggrAddTsReqParams->tspec[i].svcStartTime;
6861 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6862 pAggrAddTsReqParams->tspec[i].minDataRate;
6863 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6864 pAggrAddTsReqParams->tspec[i].meanDataRate;
6865 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6866 pAggrAddTsReqParams->tspec[i].peakDataRate;
6867 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6868 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6869 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6870 pAggrAddTsReqParams->tspec[i].delayBound;
6871 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6872 pAggrAddTsReqParams->tspec[i].minPhyRate;
6873 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6874 pAggrAddTsReqParams->tspec[i].surplusBw;
6875 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6876 pAggrAddTsReqParams->tspec[i].mediumTime;
6877 }
6878
6879 /* TODO: tAggrAddTsParams doesn't have the following fields */
6880#if 0
6881 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6882 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6883 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6884 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6885#endif
6886 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6887
6888 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006889 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006891 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6892
6893 pWdaParams->pWdaContext = pWDA;
6894
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006896 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6897
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 if(IS_WDI_STATUS_FAILURE(status))
6899 {
6900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6901 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6903 vos_mem_free(pWdaParams);
6904
6905 /* send the failure response back to PE*/
6906 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6907 {
6908 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6909 }
6910
6911 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6912 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 return CONVERT_WDI2VOS_STATUS(status) ;
6915}
6916#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006917/*
6918 * FUNCTION: WDA_EnterImpsReqCallback
6919 * send Enter IMPS RSP back to PE
6920 */
6921void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6922{
6923 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006925 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006926 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 return ;
6928}
Jeff Johnson295189b2012-06-20 16:38:30 -07006929/*
6930 * FUNCTION: WDA_ProcessEnterImpsReq
6931 * Request to WDI to Enter IMPS power state.
6932 */
6933VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6934{
6935 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 if(IS_WDI_STATUS_FAILURE(status))
6940 {
6941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6942 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006943 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 return CONVERT_WDI2VOS_STATUS(status) ;
6946}
Jeff Johnson295189b2012-06-20 16:38:30 -07006947/*
6948 * FUNCTION: WDA_ExitImpsReqCallback
6949 * send Exit IMPS RSP back to PE
6950 */
6951void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6952{
6953 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006955 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006956 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006957 return ;
6958}
Jeff Johnson295189b2012-06-20 16:38:30 -07006959/*
6960 * FUNCTION: WDA_ProcessExitImpsReq
6961 * Request to WDI to Exit IMPS power state.
6962 */
6963VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6964{
6965 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006968 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 if(IS_WDI_STATUS_FAILURE(status))
6970 {
6971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6972 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006973 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 return CONVERT_WDI2VOS_STATUS(status) ;
6976}
Jeff Johnson295189b2012-06-20 16:38:30 -07006977/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006978 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006979 * send Enter BMPS RSP back to PE
6980 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006981void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006982{
6983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6984 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006985 tEnterBmpsParams *pEnterBmpsRspParams;
6986
Jeff Johnson295189b2012-06-20 16:38:30 -07006987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006988 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 if(NULL == pWdaParams)
6990 {
6991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006992 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 VOS_ASSERT(0) ;
6994 return ;
6995 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006996
6997 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6998 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6999
7000 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007001 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007002
7003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007005 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7006
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 return ;
7008}
Jeff Johnson295189b2012-06-20 16:38:30 -07007009/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007010 * FUNCTION: WDA_EnterBmpsReqCallback
7011 * Free memory and send Enter BMPS RSP back to PE.
7012 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7013 */
7014void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7015{
7016 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7017 tWDA_CbContext *pWDA;
7018 tEnterBmpsParams *pEnterBmpsRspParams;
7019
7020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7021 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7022
7023 if(NULL == pWdaParams)
7024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "%s: pWdaParams received NULL", __func__);
7027 VOS_ASSERT(0);
7028 return;
7029 }
7030
7031 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7032 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7033 pEnterBmpsRspParams->status = wdiStatus;
7034
7035 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7036 {
7037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7038 vos_mem_free(pWdaParams);
7039 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7040 }
7041
7042 return;
7043}
7044/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 * FUNCTION: WDA_ProcessEnterBmpsReq
7046 * Request to WDI to Enter BMPS power state.
7047 */
7048VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7049 tEnterBmpsParams *pEnterBmpsReqParams)
7050{
7051 WDI_Status status = WDI_STATUS_SUCCESS;
7052 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7053 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007055 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7057 {
7058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007059 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 VOS_ASSERT(0);
7061 return VOS_STATUS_E_FAILURE;
7062 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7064 if (NULL == wdiEnterBmpsReqParams)
7065 {
7066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007069 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7070 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 return VOS_STATUS_E_NOMEM;
7072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7074 if (NULL == pWdaParams)
7075 {
7076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 VOS_ASSERT(0);
7079 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007080 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7081 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 return VOS_STATUS_E_NOMEM;
7083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7085 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7086 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7087 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 // For CCX and 11R Roaming
7089 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7090 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7091 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007092 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7093 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007094
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 /* Store param pointer as passed in by caller */
7096 /* store Params pass it to WDI */
7097 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007098 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007101 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 if (IS_WDI_STATUS_FAILURE(status))
7103 {
7104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7105 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007107 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007109 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 return CONVERT_WDI2VOS_STATUS(status);
7112}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007113
7114
7115static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7116 WDI_Status wdiStatus,
7117 tExitBmpsParams *pExitBmpsReqParams)
7118{
7119 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7120
7121 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7122}
7123
7124
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007126 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007127 * send Exit BMPS RSP back to PE
7128 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007129void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007130{
7131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7132 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007133 tExitBmpsParams *pExitBmpsRspParams;
7134
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 if(NULL == pWdaParams)
7138 {
7139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007140 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 VOS_ASSERT(0) ;
7142 return ;
7143 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007144
7145 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7146 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7147
7148 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007149 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007150
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7152 vos_mem_free(pWdaParams) ;
7153
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007154 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007155 return ;
7156}
Jeff Johnson295189b2012-06-20 16:38:30 -07007157/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007158 * FUNCTION: WDA_ExitBmpsReqCallback
7159 * Free memory and send Exit BMPS RSP back to PE.
7160 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7161 */
7162void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7163{
7164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7165 tWDA_CbContext *pWDA;
7166 tExitBmpsParams *pExitBmpsRspParams;
7167
7168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7169 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7170
7171 if(NULL == pWdaParams)
7172 {
7173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7174 "%s: pWdaParams received NULL", __func__);
7175 VOS_ASSERT(0);
7176 return;
7177 }
7178
7179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7180 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7181 pExitBmpsRspParams->status = wdiStatus;
7182
7183 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7184 {
7185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7186 vos_mem_free(pWdaParams);
7187 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7188 }
7189
7190 return;
7191}
7192/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 * FUNCTION: WDA_ProcessExitBmpsReq
7194 * Request to WDI to Exit BMPS power state.
7195 */
7196VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7197 tExitBmpsParams *pExitBmpsReqParams)
7198{
7199 WDI_Status status = WDI_STATUS_SUCCESS ;
7200 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7201 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7202 sizeof(WDI_ExitBmpsReqParamsType)) ;
7203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 if(NULL == wdiExitBmpsReqParams)
7207 {
7208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007211 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007212 return VOS_STATUS_E_NOMEM;
7213 }
7214 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7215 if(NULL == pWdaParams)
7216 {
7217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 VOS_ASSERT(0);
7220 vos_mem_free(wdiExitBmpsReqParams);
7221 return VOS_STATUS_E_NOMEM;
7222 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007224
7225 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7226
Yue Ma7f44bbe2013-04-12 11:47:39 -07007227 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7228 wdiExitBmpsReqParams->pUserData = pWdaParams;
7229
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 /* Store param pointer as passed in by caller */
7231 /* store Params pass it to WDI */
7232 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7233 pWdaParams->pWdaContext = pWDA;
7234 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007235 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007236 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 if(IS_WDI_STATUS_FAILURE(status))
7238 {
7239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7240 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7242 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007243 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 return CONVERT_WDI2VOS_STATUS(status) ;
7246}
Jeff Johnson295189b2012-06-20 16:38:30 -07007247/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007248 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 * send Enter UAPSD RSP back to PE
7250 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007251void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007252{
7253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7254 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007255 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007257 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007258 if(NULL == pWdaParams)
7259 {
7260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007261 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 VOS_ASSERT(0) ;
7263 return ;
7264 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007265
7266 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7267 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7268
7269 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007270 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007271
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7273 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007274 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 return ;
7276}
Jeff Johnson295189b2012-06-20 16:38:30 -07007277/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007278 * FUNCTION: WDA_EnterUapsdReqCallback
7279 * Free memory and send Enter UAPSD RSP back to PE.
7280 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7281 */
7282void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7283{
7284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7285 tWDA_CbContext *pWDA;
7286 tUapsdParams *pEnterUapsdRsqParams;
7287
7288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7289 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7290
7291 if(NULL == pWdaParams)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7294 "%s: pWdaParams received NULL", __func__);
7295 VOS_ASSERT(0);
7296 return;
7297 }
7298
7299 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7300 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7301 pEnterUapsdRsqParams->status = wdiStatus;
7302
7303 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7304 {
7305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7306 vos_mem_free(pWdaParams);
7307 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7308 }
7309
7310 return;
7311}
7312/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007313 * FUNCTION: WDA_ProcessEnterUapsdReq
7314 * Request to WDI to Enter UAPSD power state.
7315 */
7316VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7317 tUapsdParams *pEnterUapsdReqParams)
7318{
7319 WDI_Status status = WDI_STATUS_SUCCESS ;
7320 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7321 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7322 sizeof(WDI_EnterUapsdReqParamsType)) ;
7323 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007325 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 if(NULL == wdiEnterUapsdReqParams)
7327 {
7328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007329 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007330 VOS_ASSERT(0);
7331 return VOS_STATUS_E_NOMEM;
7332 }
7333 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7334 if(NULL == pWdaParams)
7335 {
7336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007337 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007338 VOS_ASSERT(0);
7339 vos_mem_free(wdiEnterUapsdReqParams);
7340 return VOS_STATUS_E_NOMEM;
7341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7343 pEnterUapsdReqParams->beDeliveryEnabled;
7344 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7345 pEnterUapsdReqParams->beTriggerEnabled;
7346 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7347 pEnterUapsdReqParams->bkDeliveryEnabled;
7348 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7349 pEnterUapsdReqParams->bkTriggerEnabled;
7350 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7351 pEnterUapsdReqParams->viDeliveryEnabled;
7352 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7353 pEnterUapsdReqParams->viTriggerEnabled;
7354 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7355 pEnterUapsdReqParams->voDeliveryEnabled;
7356 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7357 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007358 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007359
Yue Ma7f44bbe2013-04-12 11:47:39 -07007360 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7361 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007362
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 /* Store param pointer as passed in by caller */
7364 /* store Params pass it to WDI */
7365 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7366 pWdaParams->pWdaContext = pWDA;
7367 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007369 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 if(IS_WDI_STATUS_FAILURE(status))
7371 {
7372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7373 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7374 vos_mem_free(pWdaParams->wdaMsgParam) ;
7375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7376 vos_mem_free(pWdaParams) ;
7377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 return CONVERT_WDI2VOS_STATUS(status) ;
7379}
Jeff Johnson295189b2012-06-20 16:38:30 -07007380/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007381 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 * send Exit UAPSD RSP back to PE
7383 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007384void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007385{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007386
7387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7388 tWDA_CbContext *pWDA;
7389 tExitUapsdParams *pExitUapsdRspParams;
7390
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007392 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007393 if(NULL == pWdaParams)
7394 {
7395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007396 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007397 VOS_ASSERT(0);
7398 return;
7399 }
7400
7401 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7402 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7403
7404 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007405 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007406
7407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7408 vos_mem_free(pWdaParams) ;
7409
7410 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 return ;
7412}
Jeff Johnson295189b2012-06-20 16:38:30 -07007413/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007414 * FUNCTION: WDA_ExitUapsdReqCallback
7415 * Free memory and send Exit UAPSD RSP back to PE.
7416 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7417 */
7418void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7419{
7420 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7421 tWDA_CbContext *pWDA;
7422 tExitUapsdParams *pExitUapsdRspParams;
7423
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7425 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7426
7427 if(NULL == pWdaParams)
7428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7430 "%s: pWdaParams received NULL", __func__);
7431 VOS_ASSERT(0);
7432 return;
7433 }
7434
7435 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7436 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7437 pExitUapsdRspParams->status = wdiStatus;
7438
7439 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7440 {
7441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7442 vos_mem_free(pWdaParams);
7443 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7444 }
7445
7446 return;
7447}
7448/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 * FUNCTION: WDA_ProcessExitUapsdReq
7450 * Request to WDI to Exit UAPSD power state.
7451 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007452VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7453 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007454{
7455 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007456 tWDA_ReqParams *pWdaParams ;
7457 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7458 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7459 sizeof(WDI_ExitUapsdReqParamsType)) ;
7460
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007462 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007463
7464 if(NULL == wdiExitUapsdReqParams)
7465 {
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007468 VOS_ASSERT(0);
7469 return VOS_STATUS_E_NOMEM;
7470 }
7471 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7472 if(NULL == pWdaParams)
7473 {
7474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007475 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007476 VOS_ASSERT(0);
7477 vos_mem_free(wdiExitUapsdReqParams);
7478 return VOS_STATUS_E_NOMEM;
7479 }
7480
7481 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007482 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7483 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007484
7485 /* Store param pointer as passed in by caller */
7486 /* store Params pass it to WDI */
7487 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7488 pWdaParams->pWdaContext = pWDA;
7489 pWdaParams->wdaMsgParam = pExitUapsdParams;
7490
Yue Ma7f44bbe2013-04-12 11:47:39 -07007491 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 if(IS_WDI_STATUS_FAILURE(status))
7493 {
7494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7495 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007496 vos_mem_free(pWdaParams->wdaMsgParam) ;
7497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7498 vos_mem_free(pWdaParams) ;
7499
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 return CONVERT_WDI2VOS_STATUS(status) ;
7502}
7503
Jeff Johnson295189b2012-06-20 16:38:30 -07007504/*
7505 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7506 *
7507 */
7508void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7509{
7510 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007512 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 if(NULL == pWdaParams)
7514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007516 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 VOS_ASSERT(0) ;
7518 return ;
7519 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 if( pWdaParams != NULL )
7521 {
7522 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7523 {
7524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7525 }
7526 if( pWdaParams->wdaMsgParam != NULL )
7527 {
7528 vos_mem_free(pWdaParams->wdaMsgParam) ;
7529 }
7530 vos_mem_free(pWdaParams) ;
7531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 return ;
7533}
Jeff Johnson295189b2012-06-20 16:38:30 -07007534/*
7535 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7536 * Request to WDI to set the power save params at start.
7537 */
7538VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7539 tSirPowerSaveCfg *pPowerSaveCfg)
7540{
7541 WDI_Status status = WDI_STATUS_SUCCESS ;
7542 tHalCfg *tlvStruct = NULL ;
7543 tANI_U8 *tlvStructStart = NULL ;
7544 v_PVOID_t *configParam;
7545 tANI_U32 configParamSize;
7546 tANI_U32 *configDataValue;
7547 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7548 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007550 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007556 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007557 return VOS_STATUS_E_FAILURE;
7558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007559 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7560 if (NULL == wdiPowerSaveCfg)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007565 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 return VOS_STATUS_E_NOMEM;
7567 }
7568 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7569 if(NULL == pWdaParams)
7570 {
7571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 VOS_ASSERT(0);
7574 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007575 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 return VOS_STATUS_E_NOMEM;
7577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7579 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007580 if(NULL == configParam)
7581 {
7582 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007583 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007584 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 vos_mem_free(pWdaParams);
7586 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007587 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007588 return VOS_STATUS_E_NOMEM;
7589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 vos_mem_set(configParam, configParamSize, 0);
7591 wdiPowerSaveCfg->pConfigBuffer = configParam;
7592 tlvStruct = (tHalCfg *)configParam;
7593 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007594 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7595 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7596 tlvStruct->length = sizeof(tANI_U32);
7597 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7598 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007599 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7600 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7602 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7603 tlvStruct->length = sizeof(tANI_U32);
7604 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7605 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007606 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7607 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7609 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7610 tlvStruct->length = sizeof(tANI_U32);
7611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7612 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7614 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7616 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7617 tlvStruct->length = sizeof(tANI_U32);
7618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7619 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007620 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7621 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7623 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7624 tlvStruct->length = sizeof(tANI_U32);
7625 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7626 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7628 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007629 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7630 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7631 tlvStruct->length = sizeof(tANI_U32);
7632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7633 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7635 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7637 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7638 tlvStruct->length = sizeof(tANI_U32);
7639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7640 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7642 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7644 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7645 tlvStruct->length = sizeof(tANI_U32);
7646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7647 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7648 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7649 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007650 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7651 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7652 tlvStruct->length = sizeof(tANI_U32);
7653 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7654 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7658 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7659 tlvStruct->length = sizeof(tANI_U32);
7660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7661 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7663 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7665 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7666 tlvStruct->length = sizeof(tANI_U32);
7667 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7668 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7670 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 /* store Params pass it to WDI */
7674 pWdaParams->wdaMsgParam = configParam;
7675 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7676 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7678 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 if(IS_WDI_STATUS_FAILURE(status))
7680 {
7681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7682 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7683 vos_mem_free(pWdaParams->wdaMsgParam);
7684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7685 vos_mem_free(pWdaParams);
7686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 return CONVERT_WDI2VOS_STATUS(status);
7689}
Jeff Johnson295189b2012-06-20 16:38:30 -07007690/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007691 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 *
7693 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007694void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007695{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7697
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007700
7701 if(NULL == pWdaParams)
7702 {
7703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7704 "%s: pWdaParams received NULL", __func__);
7705 VOS_ASSERT(0);
7706 return ;
7707 }
7708
7709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 vos_mem_free(pWdaParams);
7711
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 return ;
7713}
Jeff Johnson295189b2012-06-20 16:38:30 -07007714/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007715 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7716 * Free memory.
7717 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7718 */
7719void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7720{
7721 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7722
7723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7724 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7725
7726 if(NULL == pWdaParams)
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7729 "%s: pWdaParams received NULL", __func__);
7730 VOS_ASSERT(0);
7731 return;
7732 }
7733
7734 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7735 {
7736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7737 vos_mem_free(pWdaParams);
7738 }
7739
7740 return;
7741}
7742/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 * FUNCTION: WDA_SetUapsdAcParamsReq
7744 * Request to WDI to set the UAPSD params for an ac (sta mode).
7745 */
7746VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7747 tUapsdInfo *pUapsdInfo)
7748{
7749 WDI_Status status = WDI_STATUS_SUCCESS;
7750 tWDA_CbContext *pWDA = NULL ;
7751 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7752 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7753 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7754 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007756 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 if(NULL == wdiUapsdParams)
7758 {
7759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 VOS_ASSERT(0);
7762 return VOS_STATUS_E_NOMEM;
7763 }
7764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7765 if(NULL == pWdaParams)
7766 {
7767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007769 VOS_ASSERT(0);
7770 vos_mem_free(wdiUapsdParams);
7771 return VOS_STATUS_E_NOMEM;
7772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7774 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7775 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7776 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7777 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7778 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007779 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7780 wdiUapsdParams->pUserData = pWdaParams;
7781
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 pWdaParams->pWdaContext = pWDA;
7784 /* Store param pointer as passed in by caller */
7785 pWdaParams->wdaMsgParam = pUapsdInfo;
7786 /* store Params pass it to WDI */
7787 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007789 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 if(IS_WDI_STATUS_FAILURE(status))
7792 {
7793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7794 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7796 vos_mem_free(pWdaParams);
7797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007798 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7799 return VOS_STATUS_SUCCESS;
7800 else
7801 return VOS_STATUS_E_FAILURE;
7802
Jeff Johnson295189b2012-06-20 16:38:30 -07007803}
7804/*
7805 * FUNCTION: WDA_ClearUapsdAcParamsReq
7806 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7807 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7808 * and again enter the UPASD with the modified params. Hence the disable
7809 * function was kept empty.
7810 *
7811 */
7812VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7813{
7814 /* do nothing */
7815 return VOS_STATUS_SUCCESS;
7816}
Jeff Johnson295189b2012-06-20 16:38:30 -07007817/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007818 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 *
7820 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007821void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007822{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007823 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7824
Jeff Johnson295189b2012-06-20 16:38:30 -07007825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007826 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007827
7828 if(NULL == pWdaParams)
7829 {
7830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007831 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007832 VOS_ASSERT(0) ;
7833 return ;
7834 }
7835
7836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7837 vos_mem_free(pWdaParams->wdaMsgParam);
7838 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 //print a msg, nothing else to do
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007842 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 return ;
7844}
Jeff Johnson295189b2012-06-20 16:38:30 -07007845/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007846 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7847 * Free memory.
7848 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7849 */
7850void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7851{
7852 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7853
7854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7855 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7856
7857 if(NULL == pWdaParams)
7858 {
7859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7860 "%s: pWdaParams received NULL", __func__);
7861 VOS_ASSERT(0);
7862 return;
7863 }
7864
7865 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7866 {
7867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7868 vos_mem_free(pWdaParams->wdaMsgParam);
7869 vos_mem_free(pWdaParams);
7870 }
7871
7872 return;
7873}
7874/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 * FUNCTION: WDA_UpdateUapsdParamsReq
7876 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7877 */
7878VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7879 tUpdateUapsdParams* pUpdateUapsdInfo)
7880{
7881 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007882 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7884 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7885 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007886 tWDA_ReqParams *pWdaParams = NULL;
7887
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 if(NULL == wdiUpdateUapsdParams)
7891 {
7892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 VOS_ASSERT(0);
7895 return VOS_STATUS_E_NOMEM;
7896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007897 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7898 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7899 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007900 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7901 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007902
7903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7904 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 {
7906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007908 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007909 vos_mem_free(pUpdateUapsdInfo);
7910 vos_mem_free(wdiUpdateUapsdParams);
7911 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007914 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007916 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7917 pWdaParams->pWdaContext = pWDA;
7918
Jeff Johnson43971f52012-07-17 12:26:56 -07007919 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007920 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007921 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007922
Jeff Johnson43971f52012-07-17 12:26:56 -07007923 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 {
7925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7926 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007927 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7929 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007930 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007932 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007933}
Jeff Johnson295189b2012-06-20 16:38:30 -07007934/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007935 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 *
7937 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007938void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007939{
7940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007942 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 if(WDI_STATUS_SUCCESS != wdiStatus)
7944 {
7945 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007946 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 if(NULL == pWdaParams)
7949 {
7950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007951 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 VOS_ASSERT(0) ;
7953 return ;
7954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7956 vos_mem_free(pWdaParams->wdaMsgParam);
7957 vos_mem_free(pWdaParams);
7958 return ;
7959}
Jeff Johnson295189b2012-06-20 16:38:30 -07007960/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007961 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7962 * Free memory.
7963 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7964 */
7965void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7966{
7967 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7968
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7970 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7971
7972 if(NULL == pWdaParams)
7973 {
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7975 "%s: pWdaParams received NULL", __func__);
7976 VOS_ASSERT(0);
7977 return;
7978 }
7979
7980 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7981 {
7982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7983 vos_mem_free(pWdaParams->wdaMsgParam);
7984 vos_mem_free(pWdaParams);
7985 }
7986
7987 return;
7988}
7989/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007990 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7991 *
7992 */
7993VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7994 tSirWlanSetRxpFilters *pWlanSuspendParam)
7995{
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007997 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7999 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8000 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
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 == wdiRxpFilterParams)
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 vos_mem_free(pWlanSuspendParam);
8010 return VOS_STATUS_E_NOMEM;
8011 }
8012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8013 if(NULL == pWdaParams)
8014 {
8015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 VOS_ASSERT(0);
8018 vos_mem_free(wdiRxpFilterParams);
8019 vos_mem_free(pWlanSuspendParam);
8020 return VOS_STATUS_E_NOMEM;
8021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8023 pWlanSuspendParam->setMcstBcstFilter;
8024 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8025 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8026
Yue Ma7f44bbe2013-04-12 11:47:39 -07008027 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8028 wdiRxpFilterParams->pUserData = pWdaParams;
8029
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 pWdaParams->pWdaContext = pWDA;
8031 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8032 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008033 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008034 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008036 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 {
8038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8039 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008040 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008041 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8042 vos_mem_free(pWdaParams->wdaMsgParam);
8043 vos_mem_free(pWdaParams);
8044 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008045 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008046}
Jeff Johnson295189b2012-06-20 16:38:30 -07008047/*
8048 * FUNCTION: WDA_WdiIndicationCallback
8049 *
8050 */
8051void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8052 void* pUserData)
8053{
8054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008055 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008056}
Jeff Johnson295189b2012-06-20 16:38:30 -07008057/*
8058 * FUNCTION: WDA_ProcessWlanSuspendInd
8059 *
8060 */
8061VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8062 tSirWlanSuspendParam *pWlanSuspendParam)
8063{
8064 WDI_Status wdiStatus;
8065 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8069 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8070 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8071 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8074 if(WDI_STATUS_PENDING == wdiStatus)
8075 {
8076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008077 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008078 }
8079 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8080 {
8081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008082 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 vos_mem_free(pWlanSuspendParam);
8085 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8086}
8087
Chet Lanctot186b5732013-03-18 10:26:30 -07008088#ifdef WLAN_FEATURE_11W
8089/*
8090 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8091 *
8092 */
8093VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8094 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8095{
8096 WDI_Status wdiStatus;
8097 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8099 "------> %s ", __func__);
8100
8101 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8102 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8103 sizeof(tSirMacAddr));
8104
8105 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8106 wdiExclUnencryptParams.pUserData = pWDA;
8107
8108 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8109 if(WDI_STATUS_PENDING == wdiStatus)
8110 {
8111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8112 "Pending received for %s:%d ", __func__, __LINE__ );
8113 }
8114 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8115 {
8116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8117 "Failure in %s:%d ", __func__, __LINE__ );
8118 }
8119 vos_mem_free(pExclUnencryptParam);
8120 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8121}
8122#endif
8123
Jeff Johnson295189b2012-06-20 16:38:30 -07008124/*
8125 * FUNCTION: WDA_ProcessWlanResumeCallback
8126 *
8127 */
8128void WDA_ProcessWlanResumeCallback(
8129 WDI_SuspendResumeRspParamsType *resumeRspParams,
8130 void* pUserData)
8131{
8132 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008135 if(NULL == pWdaParams)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008138 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 VOS_ASSERT(0) ;
8140 return ;
8141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8143 {
8144 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8148 vos_mem_free(pWdaParams->wdaMsgParam);
8149 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 return ;
8151}
Jeff Johnson295189b2012-06-20 16:38:30 -07008152/*
8153 * FUNCTION: WDA_ProcessWlanResumeReq
8154 *
8155 */
8156VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8157 tSirWlanResumeParam *pWlanResumeParam)
8158{
8159 WDI_Status wdiStatus;
8160 WDI_ResumeParamsType *wdiResumeParams =
8161 (WDI_ResumeParamsType *)vos_mem_malloc(
8162 sizeof(WDI_ResumeParamsType) ) ;
8163 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008165 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 if(NULL == wdiResumeParams)
8167 {
8168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 VOS_ASSERT(0);
8171 return VOS_STATUS_E_NOMEM;
8172 }
8173 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8174 if(NULL == pWdaParams)
8175 {
8176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008178 VOS_ASSERT(0);
8179 vos_mem_free(wdiResumeParams);
8180 return VOS_STATUS_E_NOMEM;
8181 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8183 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 wdiResumeParams->wdiReqStatusCB = NULL;
8186 pWdaParams->wdaMsgParam = pWlanResumeParam;
8187 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8188 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8190 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8191 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8195 "Failure in Host Resume REQ WDI API, free all the memory " );
8196 VOS_ASSERT(0);
8197 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8198 vos_mem_free(pWdaParams->wdaMsgParam);
8199 vos_mem_free(pWdaParams);
8200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8202}
8203
Jeff Johnson295189b2012-06-20 16:38:30 -07008204/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008205 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 *
8207 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008208void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008209{
8210 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008212 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 if(NULL == pWdaParams)
8214 {
8215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008216 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008217 VOS_ASSERT(0) ;
8218 return ;
8219 }
8220
8221 vos_mem_free(pWdaParams->wdaMsgParam) ;
8222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8223 vos_mem_free(pWdaParams) ;
8224 /*
8225 * No respone required for SetBeaconFilter req so just free the request
8226 * param here
8227 */
8228
Jeff Johnson295189b2012-06-20 16:38:30 -07008229 return ;
8230}
Jeff Johnson295189b2012-06-20 16:38:30 -07008231/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008232 * FUNCTION: WDA_SetBeaconFilterReqCallback
8233 * Free memory.
8234 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8235 */
8236void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8237{
8238 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8239
8240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8241 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8242
8243 if(NULL == pWdaParams)
8244 {
8245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8246 "%s: pWdaParams received NULL", __func__);
8247 VOS_ASSERT(0);
8248 return;
8249 }
8250
8251 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8252 {
8253 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8254 vos_mem_free(pWdaParams->wdaMsgParam);
8255 vos_mem_free(pWdaParams);
8256 }
8257
8258 return;
8259}
8260/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 * FUNCTION: WDA_SetBeaconFilterReq
8262 * Request to WDI to send the beacon filtering related information.
8263 */
8264VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8265 tBeaconFilterMsg* pBeaconFilterInfo)
8266{
8267 WDI_Status status = WDI_STATUS_SUCCESS;
8268 tANI_U8 *dstPtr, *srcPtr;
8269 tANI_U8 filterLength;
8270 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8271 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8272 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8273 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008276 if(NULL == wdiBeaconFilterInfo)
8277 {
8278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_ASSERT(0);
8281 return VOS_STATUS_E_NOMEM;
8282 }
8283 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8284 if(NULL == pWdaParams)
8285 {
8286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 VOS_ASSERT(0);
8289 vos_mem_free(wdiBeaconFilterInfo);
8290 return VOS_STATUS_E_NOMEM;
8291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8293 pBeaconFilterInfo->beaconInterval;
8294 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8295 pBeaconFilterInfo->capabilityInfo;
8296 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8297 pBeaconFilterInfo->capabilityMask;
8298 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008299
8300 //Fill the BssIdx
8301 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8302
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 //Fill structure with info contained in the beaconFilterTable
8304 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8305 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8306 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8307 if(WDI_BEACON_FILTER_LEN < filterLength)
8308 {
8309 filterLength = WDI_BEACON_FILTER_LEN;
8310 }
8311 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008312 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8313 wdiBeaconFilterInfo->pUserData = pWdaParams;
8314
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 /* Store param pointer as passed in by caller */
8316 /* store Params pass it to WDI */
8317 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8318 pWdaParams->pWdaContext = pWDA;
8319 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8320
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008322 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 if(IS_WDI_STATUS_FAILURE(status))
8324 {
8325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8326 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8327 vos_mem_free(pWdaParams->wdaMsgParam) ;
8328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8329 vos_mem_free(pWdaParams) ;
8330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 return CONVERT_WDI2VOS_STATUS(status) ;
8332}
Jeff Johnson295189b2012-06-20 16:38:30 -07008333/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008334 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 *
8336 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008337void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008338{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8340
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008342 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008343
8344 if(NULL == pWdaParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008347 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008348 VOS_ASSERT(0) ;
8349 return ;
8350 }
8351
8352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8353 vos_mem_free(pWdaParams->wdaMsgParam);
8354 vos_mem_free(pWdaParams);
8355
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 //print a msg, nothing else to do
8357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008358 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 return ;
8360}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008361/*
8362 * FUNCTION: WDA_RemBeaconFilterReqCallback
8363 * Free memory.
8364 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8365 */
8366void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8367{
8368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8369
8370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8371 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8372
8373 if(NULL == pWdaParams)
8374 {
8375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8376 "%s: pWdaParams received NULL", __func__);
8377 VOS_ASSERT(0);
8378 return;
8379 }
8380
8381 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8382 {
8383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8384 vos_mem_free(pWdaParams->wdaMsgParam);
8385 vos_mem_free(pWdaParams);
8386 }
8387
8388 return;
8389}
Jeff Johnson295189b2012-06-20 16:38:30 -07008390 // TODO: PE does not have this feature for now implemented,
8391 // but the support for removing beacon filter exists between
8392 // HAL and FW. This function can be called whenever PE defines
8393 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008394/*
8395 * FUNCTION: WDA_RemBeaconFilterReq
8396 * Request to WDI to send the removal of beacon filtering related information.
8397 */
8398VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8399 tRemBeaconFilterMsg* pBeaconFilterInfo)
8400{
8401 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008402 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008403 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8404 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8405 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008406 tWDA_ReqParams *pWdaParams ;
8407
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 if(NULL == wdiBeaconFilterInfo)
8411 {
8412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 VOS_ASSERT(0);
8415 return VOS_STATUS_E_NOMEM;
8416 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008417 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8418 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008423 vos_mem_free(wdiBeaconFilterInfo);
8424 vos_mem_free(pBeaconFilterInfo);
8425 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008427
8428 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8429 pBeaconFilterInfo->ucIeCount;
8430 //Fill structure with info contained in the ucRemIeId
8431 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8432 pBeaconFilterInfo->ucRemIeId,
8433 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8434 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8435 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008436
8437 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008438 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008440 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8441
8442 pWdaParams->pWdaContext = pWDA;
8443
Jeff Johnson43971f52012-07-17 12:26:56 -07008444 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008445 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008446 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 {
8448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8449 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008450 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8452 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008453 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008454 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008455 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008456}
Jeff Johnson295189b2012-06-20 16:38:30 -07008457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008458 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 *
8460 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008461void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008462{
8463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008465 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 if(NULL == pWdaParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008469 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 VOS_ASSERT(0) ;
8471 return ;
8472 }
8473
8474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8475 vos_mem_free(pWdaParams) ;
8476
Jeff Johnson295189b2012-06-20 16:38:30 -07008477 return ;
8478}
Jeff Johnson295189b2012-06-20 16:38:30 -07008479/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008480 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8481 * Free memory.
8482 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8483 */
8484void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8485{
8486 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8487
8488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8489 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8490
8491 if(NULL == pWdaParams)
8492 {
8493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8494 "%s: pWdaParams received NULL", __func__);
8495 VOS_ASSERT(0);
8496 return;
8497 }
8498
8499 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8500 {
8501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8502 vos_mem_free(pWdaParams);
8503 }
8504
8505 return;
8506}
8507/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 * FUNCTION: WDA_SetRSSIThresholdsReq
8509 * Request to WDI to set the RSSI thresholds (sta mode).
8510 */
8511VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8512{
8513 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008514 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008515 tWDA_CbContext *pWDA = NULL ;
8516 v_PVOID_t pVosContext = NULL;
8517 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8518 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8519 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8520 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008522 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008523 if(NULL == wdiRSSIThresholdsInfo)
8524 {
8525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 VOS_ASSERT(0);
8528 return VOS_STATUS_E_NOMEM;
8529 }
8530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8531 if(NULL == pWdaParams)
8532 {
8533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008534 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 VOS_ASSERT(0);
8536 vos_mem_free(wdiRSSIThresholdsInfo);
8537 return VOS_STATUS_E_NOMEM;
8538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8541 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8542 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8544 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8545 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8547 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8548 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008549 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8550 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8552 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8553
Jeff Johnson295189b2012-06-20 16:38:30 -07008554 /* Store param pointer as passed in by caller */
8555 /* store Params pass it to WDI */
8556 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8557 pWdaParams->pWdaContext = pWDA;
8558 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008559 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008560 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008561 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 {
8563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8564 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008565 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8567 vos_mem_free(pWdaParams) ;
8568 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008569 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008570
8571}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008572/*
Yue Madb90ac12013-04-04 13:39:13 -07008573 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008574 *
8575 */
Yue Madb90ac12013-04-04 13:39:13 -07008576void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008577{
8578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8579
8580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008581 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 if(NULL == pWdaParams)
8583 {
8584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008585 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 VOS_ASSERT(0) ;
8587 return ;
8588 }
8589
8590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8591 vos_mem_free(pWdaParams->wdaMsgParam);
8592 vos_mem_free(pWdaParams) ;
8593
8594 //print a msg, nothing else to do
8595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008596 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 return ;
8598}
Jeff Johnson295189b2012-06-20 16:38:30 -07008599/*
Yue Madb90ac12013-04-04 13:39:13 -07008600 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008601 * Free memory.
8602 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008603 */
8604void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8605{
8606 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8607
8608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8609 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8610
8611 if(NULL == pWdaParams)
8612 {
8613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8614 "%s: Invalid pWdaParams pointer", __func__);
8615 VOS_ASSERT(0);
8616 return;
8617 }
8618
8619 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8620 {
8621 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8622 vos_mem_free(pWdaParams->wdaMsgParam);
8623 vos_mem_free(pWdaParams);
8624 }
8625
8626 return;
8627}
8628/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008629 * FUNCTION: WDA_ProcessHostOffloadReq
8630 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8631 * to broadcast traffic (sta mode).
8632 */
8633VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8634 tSirHostOffloadReq *pHostOffloadParams)
8635{
8636 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008637 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8639 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8640 sizeof(WDI_HostOffloadReqParamsType)) ;
8641 tWDA_ReqParams *pWdaParams ;
8642
8643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008644 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008645
8646 if(NULL == wdiHostOffloadInfo)
8647 {
8648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 VOS_ASSERT(0);
8651 return VOS_STATUS_E_NOMEM;
8652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008653 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8654 if(NULL == pWdaParams)
8655 {
8656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008658 VOS_ASSERT(0);
8659 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008660 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 return VOS_STATUS_E_NOMEM;
8662 }
8663
8664 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8665 pHostOffloadParams->offloadType;
8666 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8667 pHostOffloadParams->enableOrDisable;
8668
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008669 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8670 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8671
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8673 {
8674 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8675 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8676 pHostOffloadParams->params.hostIpv4Addr,
8677 4);
8678 break;
8679 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8680 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8681 pHostOffloadParams->params.hostIpv6Addr,
8682 16);
8683 break;
8684 case SIR_IPV6_NS_OFFLOAD:
8685 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8686 pHostOffloadParams->params.hostIpv6Addr,
8687 16);
8688
8689#ifdef WLAN_NS_OFFLOAD
8690 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8691 {
8692 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8693 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8694 16);
8695 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8696 }
8697 else
8698 {
8699 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8700 }
8701
8702 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8703 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8704 16);
8705 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8706 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8707 6);
8708
8709 //Only two are supported so let's go through them without a loop
8710 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8711 {
8712 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8713 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8714 16);
8715 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8716 }
8717 else
8718 {
8719 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8720 }
8721
8722 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8723 {
8724 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8725 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8726 16);
8727 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8728 }
8729 else
8730 {
8731 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8732 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308733 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8734 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 break;
8736#endif //WLAN_NS_OFFLOAD
8737 default:
8738 {
8739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8740 "No Handling for Offload Type %x in WDA "
8741 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8742 //WDA_VOS_ASSERT(0) ;
8743 }
8744 }
Yue Madb90ac12013-04-04 13:39:13 -07008745 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8746 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008747
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008749 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 /* store Params pass it to WDI */
8751 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8752 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008753
Jeff Johnson295189b2012-06-20 16:38:30 -07008754
Jeff Johnson43971f52012-07-17 12:26:56 -07008755 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008756 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008757
Jeff Johnson43971f52012-07-17 12:26:56 -07008758 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 {
8760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8761 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008762 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008763 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8764 vos_mem_free(pWdaParams->wdaMsgParam);
8765 vos_mem_free(pWdaParams) ;
8766 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008767 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008768
8769}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008770/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008771 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 *
8773 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008774void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008775{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8777
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008779 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008780
8781 if(NULL == pWdaParams)
8782 {
8783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008784 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008785 VOS_ASSERT(0) ;
8786 return ;
8787 }
8788
8789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8790 vos_mem_free(pWdaParams->wdaMsgParam);
8791 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008792
Jeff Johnson295189b2012-06-20 16:38:30 -07008793 //print a msg, nothing else to do
8794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008795 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008796 return ;
8797}
Jeff Johnson295189b2012-06-20 16:38:30 -07008798/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008799 * FUNCTION: WDA_KeepAliveReqCallback
8800 * Free memory.
8801 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8802 */
8803void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8804{
8805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8806
8807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8808 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8809
8810 if(NULL == pWdaParams)
8811 {
8812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8813 "%s: pWdaParams received NULL", __func__);
8814 VOS_ASSERT(0);
8815 return;
8816 }
8817
8818 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8819 {
8820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8821 vos_mem_free(pWdaParams->wdaMsgParam);
8822 vos_mem_free(pWdaParams);
8823 }
8824
8825 return;
8826}
8827/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008828 * FUNCTION: WDA_ProcessKeepAliveReq
8829 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8830 * wakeup due to broadcast traffic (sta mode).
8831 */
8832VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8833 tSirKeepAliveReq *pKeepAliveParams)
8834{
8835 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008836 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8838 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8839 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008840 tWDA_ReqParams *pWdaParams;
8841
Jeff Johnson295189b2012-06-20 16:38:30 -07008842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008843 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008844 if(NULL == wdiKeepAliveInfo)
8845 {
8846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008848 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008849 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 return VOS_STATUS_E_NOMEM;
8851 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008852
8853 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8854 if(NULL == pWdaParams)
8855 {
8856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008857 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008858 VOS_ASSERT(0);
8859 vos_mem_free(wdiKeepAliveInfo);
8860 vos_mem_free(pKeepAliveParams);
8861 return VOS_STATUS_E_NOMEM;
8862 }
8863
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8865 pKeepAliveParams->packetType;
8866 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8867 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008868
8869 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8870 pKeepAliveParams->bssId,
8871 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008872
8873 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8874 {
8875 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8876 pKeepAliveParams->hostIpv4Addr,
8877 SIR_IPV4_ADDR_LEN);
8878 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8879 pKeepAliveParams->destIpv4Addr,
8880 SIR_IPV4_ADDR_LEN);
8881 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8882 pKeepAliveParams->destMacAddr,
8883 SIR_MAC_ADDR_LEN);
8884 }
8885 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8886 {
8887 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8888 SIR_IPV4_ADDR_LEN,
8889 0);
8890 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8891 SIR_IPV4_ADDR_LEN,
8892 0);
8893 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8894 SIR_MAC_ADDR_LEN,
8895 0);
8896 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008897 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8898 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008899
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008901 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008902 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8904 pWdaParams->pWdaContext = pWDA;
8905
Jeff Johnson295189b2012-06-20 16:38:30 -07008906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8907 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8908 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8909 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8910 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8912 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8913 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8914 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8915 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8917 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8918 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8919 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8920 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8921 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8922 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8923 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8925 "TimePeriod %d PacketType %d",
8926 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8927 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008928 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008929 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008930
Jeff Johnson43971f52012-07-17 12:26:56 -07008931 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8934 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008935 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8937 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008938 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008940 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008941
8942}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008943/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008944 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 *
8946 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008947void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008948 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8949 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008950{
8951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008954 if(NULL == pWdaParams)
8955 {
8956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008957 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 VOS_ASSERT(0) ;
8959 return ;
8960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8962 vos_mem_free(pWdaParams->wdaMsgParam);
8963 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008964 return ;
8965}
Jeff Johnson295189b2012-06-20 16:38:30 -07008966/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008967 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8968 * Free memory.
8969 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8970 */
8971void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8972{
8973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8974
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8976 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8977
8978 if(NULL == pWdaParams)
8979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8981 "%s: pWdaParams received NULL", __func__);
8982 VOS_ASSERT(0);
8983 return;
8984 }
8985
8986 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8987 {
8988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8989 vos_mem_free(pWdaParams->wdaMsgParam);
8990 vos_mem_free(pWdaParams);
8991 }
8992
8993 return;
8994}
8995
8996/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8998 * Request to WDI to add WOWL Bcast pattern
8999 */
9000VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9001 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9002{
9003 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009004 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9006 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9007 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9008 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 if(NULL == wdiWowlAddBcPtrnInfo)
9012 {
9013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009014 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 VOS_ASSERT(0);
9016 return VOS_STATUS_E_NOMEM;
9017 }
9018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9019 if(NULL == pWdaParams)
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 VOS_ASSERT(0);
9024 vos_mem_free(wdiWowlAddBcPtrnInfo);
9025 return VOS_STATUS_E_NOMEM;
9026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9028 pWowlAddBcPtrnParams->ucPatternId;
9029 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9030 pWowlAddBcPtrnParams->ucPatternByteOffset;
9031 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9032 pWowlAddBcPtrnParams->ucPatternMaskSize;
9033 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9034 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9036 {
9037 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9038 pWowlAddBcPtrnParams->ucPattern,
9039 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9040 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9041 pWowlAddBcPtrnParams->ucPatternMask,
9042 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9043 }
9044 else
9045 {
9046 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9047 pWowlAddBcPtrnParams->ucPattern,
9048 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9049 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9050 pWowlAddBcPtrnParams->ucPatternMask,
9051 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9052
9053 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9054 pWowlAddBcPtrnParams->ucPatternExt,
9055 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9056 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9057 pWowlAddBcPtrnParams->ucPatternMaskExt,
9058 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9059 }
9060
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009061 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9062 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9063
Yue Ma7f44bbe2013-04-12 11:47:39 -07009064 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9065 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 /* Store param pointer as passed in by caller */
9067 /* store Params pass it to WDI */
9068 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9069 pWdaParams->pWdaContext = pWDA;
9070 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009071 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009072 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009073 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 {
9075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9076 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009077 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009078 vos_mem_free(pWdaParams->wdaMsgParam) ;
9079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9080 vos_mem_free(pWdaParams) ;
9081 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009082 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083
9084}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009085/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009086 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 *
9088 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009089void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009090 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9091 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009092{
9093 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009095 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 if(NULL == pWdaParams)
9097 {
9098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009099 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009100 VOS_ASSERT(0) ;
9101 return ;
9102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009103 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9104 vos_mem_free(pWdaParams->wdaMsgParam);
9105 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 return ;
9107}
Jeff Johnson295189b2012-06-20 16:38:30 -07009108/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009109 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9110 * Free memory.
9111 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9112 */
9113void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9114{
9115 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9116
9117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9118 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9119
9120 if(NULL == pWdaParams)
9121 {
9122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9123 "%s: pWdaParams received NULL", __func__);
9124 VOS_ASSERT(0);
9125 return;
9126 }
9127
9128 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9129 {
9130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9131 vos_mem_free(pWdaParams->wdaMsgParam);
9132 vos_mem_free(pWdaParams);
9133 }
9134
9135 return;
9136}
9137/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009138 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9139 * Request to WDI to delete WOWL Bcast pattern
9140 */
9141VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9142 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9143{
9144 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009145 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009146 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9147 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9148 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9149 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009151 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 if(NULL == wdiWowlDelBcPtrnInfo)
9153 {
9154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009156 VOS_ASSERT(0);
9157 return VOS_STATUS_E_NOMEM;
9158 }
9159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9160 if(NULL == pWdaParams)
9161 {
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009164 VOS_ASSERT(0);
9165 vos_mem_free(wdiWowlDelBcPtrnInfo);
9166 return VOS_STATUS_E_NOMEM;
9167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9169 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009170
9171 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9172 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9173
Yue Ma7f44bbe2013-04-12 11:47:39 -07009174 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9175 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009176 /* Store param pointer as passed in by caller */
9177 /* store Params pass it to WDI */
9178 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9179 pWdaParams->pWdaContext = pWDA;
9180 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009181 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009182 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009183 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 {
9185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9186 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009187 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 vos_mem_free(pWdaParams->wdaMsgParam) ;
9189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9190 vos_mem_free(pWdaParams) ;
9191 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009192 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009193
9194}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009195/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009196 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 *
9198 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009199void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009200{
9201 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9202 tWDA_CbContext *pWDA;
9203 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 if(NULL == pWdaParams)
9207 {
9208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009209 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 VOS_ASSERT(0) ;
9211 return ;
9212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9214 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9215
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009216 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9217
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9219 vos_mem_free(pWdaParams) ;
9220
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009221 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009222 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 return ;
9225}
Jeff Johnson295189b2012-06-20 16:38:30 -07009226/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009227 * FUNCTION: WDA_WowlEnterReqCallback
9228 * Free memory and send WOWL Enter RSP back to PE.
9229 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9230 */
9231void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9232{
9233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9234 tWDA_CbContext *pWDA;
9235 tSirHalWowlEnterParams *pWowlEnterParams;
9236
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9238 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9239
9240 if(NULL == pWdaParams)
9241 {
9242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9243 "%s: pWdaParams received NULL", __func__);
9244 VOS_ASSERT(0);
9245 return;
9246 }
9247
9248 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9249 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9250 pWowlEnterParams->status = wdiStatus;
9251
9252 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9253 {
9254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9255 vos_mem_free(pWdaParams);
9256 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9257 }
9258
9259 return;
9260}
9261/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 * FUNCTION: WDA_ProcessWowlEnterReq
9263 * Request to WDI to enter WOWL
9264 */
9265VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9266 tSirHalWowlEnterParams *pWowlEnterParams)
9267{
9268 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009269 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9271 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9272 sizeof(WDI_WowlEnterReqParamsType)) ;
9273 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009275 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 if(NULL == wdiWowlEnterInfo)
9277 {
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 VOS_ASSERT(0);
9281 return VOS_STATUS_E_NOMEM;
9282 }
9283 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9284 if(NULL == pWdaParams)
9285 {
9286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_ASSERT(0);
9289 vos_mem_free(wdiWowlEnterInfo);
9290 return VOS_STATUS_E_NOMEM;
9291 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009292
9293 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9294
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9296 pWowlEnterParams->magicPtrn,
9297 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9299 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009300 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9301 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9303 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9305 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9307 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9309 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9311 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9313 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009314#ifdef WLAN_WAKEUP_EVENTS
9315 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9316 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9317
9318 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9319 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9320
9321 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9322 pWowlEnterParams->ucWowNetScanOffloadMatch;
9323
9324 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9325 pWowlEnterParams->ucWowGTKRekeyError;
9326
9327 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9328 pWowlEnterParams->ucWoWBSSConnLoss;
9329#endif // WLAN_WAKEUP_EVENTS
9330
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009331 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9332 pWowlEnterParams->bssIdx;
9333
Yue Ma7f44bbe2013-04-12 11:47:39 -07009334 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9335 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009336 /* Store param pointer as passed in by caller */
9337 /* store Params pass it to WDI */
9338 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9339 pWdaParams->pWdaContext = pWDA;
9340 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009341 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009342 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009343 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9346 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009347 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 vos_mem_free(pWdaParams->wdaMsgParam) ;
9349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9350 vos_mem_free(pWdaParams) ;
9351 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009352 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009353
9354}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009355/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009356 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 *
9358 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009359void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009360{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9362 tWDA_CbContext *pWDA;
9363 tSirHalWowlExitParams *pWowlExitParams;
9364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009365 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009366 if(NULL == pWdaParams)
9367 {
9368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009369 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009370 VOS_ASSERT(0) ;
9371 return ;
9372 }
9373 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9374 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9375
9376 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009377 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009378
9379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9380 vos_mem_free(pWdaParams) ;
9381
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009384 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 return ;
9386}
Jeff Johnson295189b2012-06-20 16:38:30 -07009387/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009388 * FUNCTION: WDA_WowlExitReqCallback
9389 * Free memory and send WOWL Exit RSP back to PE.
9390 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9391 */
9392void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9393{
9394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9395 tWDA_CbContext *pWDA;
9396 tSirHalWowlExitParams *pWowlExitParams;
9397
9398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9399 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9400
9401 if(NULL == pWdaParams)
9402 {
9403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9404 "%s: pWdaParams received NULL", __func__);
9405 VOS_ASSERT(0);
9406 return;
9407 }
9408
9409 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9410 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9411 pWowlExitParams->status = wdiStatus;
9412
9413 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9414 {
9415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9416 vos_mem_free(pWdaParams);
9417 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9418 }
9419
9420 return;
9421}
9422/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 * FUNCTION: WDA_ProcessWowlExitReq
9424 * Request to WDI to add WOWL Bcast pattern
9425 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009426VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9427 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009428{
9429 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009430 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009431 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9432 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9433 sizeof(WDI_WowlExitReqParamsType)) ;
9434 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009436 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009437 if(NULL == wdiWowlExitInfo)
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009441 VOS_ASSERT(0);
9442 return VOS_STATUS_E_NOMEM;
9443 }
9444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9445 if(NULL == pWdaParams)
9446 {
9447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009448 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009449 VOS_ASSERT(0);
9450 vos_mem_free(wdiWowlExitInfo);
9451 return VOS_STATUS_E_NOMEM;
9452 }
9453
9454 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9455 pWowlExitParams->bssIdx;
9456
Yue Ma7f44bbe2013-04-12 11:47:39 -07009457 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9458 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009459
9460 /* Store param pointer as passed in by caller */
9461 /* store Params pass it to WDI */
9462 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9463 pWdaParams->pWdaContext = pWDA;
9464 pWdaParams->wdaMsgParam = pWowlExitParams;
9465
9466 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009467 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009468
Jeff Johnson43971f52012-07-17 12:26:56 -07009469 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9472 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009473 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9475 vos_mem_free(pWdaParams->wdaMsgParam);
9476 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009478 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009480/*
9481 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9482 * Request to WDI to determine whether a given station is capable of
9483 * using HW-based frame translation
9484 */
9485v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9486 tANI_U8 staIdx)
9487{
9488 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9489}
Jeff Johnson295189b2012-06-20 16:38:30 -07009490/*
9491 * FUNCTION: WDA_NvDownloadReqCallback
9492 * send NV Download RSP back to PE
9493 */
9494void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9495 void* pUserData)
9496{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009497
9498 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9499 tWDA_CbContext *pWDA;
9500
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009502 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009503
9504 if(NULL == pWdaParams)
9505 {
9506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009507 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009508 VOS_ASSERT(0) ;
9509 return ;
9510 }
9511
9512 pWDA = pWdaParams->pWdaContext;
9513
Jeff Johnson295189b2012-06-20 16:38:30 -07009514 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9516 vos_mem_free(pWdaParams);
9517
Jeff Johnson295189b2012-06-20 16:38:30 -07009518 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 return ;
9520}
Jeff Johnson295189b2012-06-20 16:38:30 -07009521/*
9522 * FUNCTION: WDA_ProcessNvDownloadReq
9523 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9524 */
9525VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9526{
9527 /* Initialize the local Variables*/
9528 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9529 v_VOID_t *pNvBuffer=NULL;
9530 v_SIZE_t bufferSize = 0;
9531 WDI_Status status = WDI_STATUS_E_FAILURE;
9532 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009533 tWDA_ReqParams *pWdaParams ;
9534
Jeff Johnson295189b2012-06-20 16:38:30 -07009535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009537 if(NULL == pWDA)
9538 {
9539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009540 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009541 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009542 return VOS_STATUS_E_FAILURE;
9543 }
9544
9545 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009546 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9547
Jeff Johnson295189b2012-06-20 16:38:30 -07009548 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9549 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 if(NULL == wdiNvDownloadReqParam)
9551 {
9552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009554 VOS_ASSERT(0);
9555 return VOS_STATUS_E_NOMEM;
9556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 /* Copy Params to wdiNvDownloadReqParam*/
9558 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9559 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009560
9561 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9562 if(NULL == pWdaParams)
9563 {
9564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009565 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009566 VOS_ASSERT(0);
9567 vos_mem_free(wdiNvDownloadReqParam);
9568 return VOS_STATUS_E_NOMEM;
9569 }
9570
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009572 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9573 pWdaParams->wdaMsgParam = NULL;
9574 pWdaParams->pWdaContext = pWDA;
9575
9576
Jeff Johnson295189b2012-06-20 16:38:30 -07009577 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009578
Jeff Johnson295189b2012-06-20 16:38:30 -07009579 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009580 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9581
Jeff Johnson295189b2012-06-20 16:38:30 -07009582 if(IS_WDI_STATUS_FAILURE(status))
9583 {
9584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9585 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9587 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009590}
9591/*
9592 * FUNCTION: WDA_FlushAcReqCallback
9593 * send Flush AC RSP back to TL
9594 */
9595void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9596{
9597 vos_msg_t wdaMsg = {0} ;
9598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9599 tFlushACReq *pFlushACReqParams;
9600 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009602 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 if(NULL == pWdaParams)
9604 {
9605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009606 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009607 VOS_ASSERT(0) ;
9608 return ;
9609 }
9610
9611 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9612 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9613 if(NULL == pFlushACRspParams)
9614 {
9615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009616 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009617 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009618 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 return ;
9620 }
9621 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9622 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9623 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9624 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9625 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009626 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 vos_mem_free(pWdaParams->wdaMsgParam) ;
9628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9629 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9631 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9632 // POST message to TL
9633 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9634
Jeff Johnson295189b2012-06-20 16:38:30 -07009635 return ;
9636}
Jeff Johnson295189b2012-06-20 16:38:30 -07009637/*
9638 * FUNCTION: WDA_ProcessFlushAcReq
9639 * Request to WDI to Update the DELBA REQ params.
9640 */
9641VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9642 tFlushACReq *pFlushAcReqParams)
9643{
9644 WDI_Status status = WDI_STATUS_SUCCESS ;
9645 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9646 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9647 sizeof(WDI_FlushAcReqParamsType)) ;
9648 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009649 if(NULL == wdiFlushAcReqParam)
9650 {
9651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009653 VOS_ASSERT(0);
9654 return VOS_STATUS_E_NOMEM;
9655 }
9656 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9657 if(NULL == pWdaParams)
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009660 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 VOS_ASSERT(0);
9662 vos_mem_free(wdiFlushAcReqParam);
9663 return VOS_STATUS_E_NOMEM;
9664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009666 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009667 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9668 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9669 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9670 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009671 /* Store Flush AC pointer, as this will be used for response */
9672 /* store Params pass it to WDI */
9673 pWdaParams->pWdaContext = pWDA;
9674 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9675 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9677 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 if(IS_WDI_STATUS_FAILURE(status))
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9681 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9682 vos_mem_free(pWdaParams->wdaMsgParam) ;
9683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9684 vos_mem_free(pWdaParams) ;
9685 //TODO: respond to TL with failure
9686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009688}
Jeff Johnson295189b2012-06-20 16:38:30 -07009689/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009690 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 *
9692 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009693void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009694{
9695 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9696 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009697 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009698
9699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009700 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 if(NULL == pWdaParams)
9702 {
9703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009704 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009705 VOS_ASSERT(0) ;
9706 return ;
9707 }
9708 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9709 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9710 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9711 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9712 {
9713 pWDA->wdaAmpSessionOn = VOS_FALSE;
9714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009715 vos_mem_free(pWdaParams->wdaMsgParam) ;
9716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9717 vos_mem_free(pWdaParams) ;
9718 /*
9719 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9720 * param here
9721 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009722 return ;
9723}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009724/*
9725 * FUNCTION: WDA_BtAmpEventReqCallback
9726 * Free memory.
9727 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9728 */
9729void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9730{
9731 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9732 tWDA_CbContext *pWDA;
9733 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009734
Yue Ma7f44bbe2013-04-12 11:47:39 -07009735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9736 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9737
9738 if(NULL == pWdaParams)
9739 {
9740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9741 "%s: pWdaParams received NULL", __func__);
9742 VOS_ASSERT(0);
9743 return;
9744 }
9745
9746 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9747 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9748
9749 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9750 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9751 {
9752 pWDA->wdaAmpSessionOn = VOS_FALSE;
9753 }
9754
9755 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9756 {
9757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9758 vos_mem_free(pWdaParams->wdaMsgParam);
9759 vos_mem_free(pWdaParams);
9760 }
9761
9762 return;
9763}
Jeff Johnson295189b2012-06-20 16:38:30 -07009764/*
9765 * FUNCTION: WDA_ProcessBtAmpEventReq
9766 * Request to WDI to Update with BT AMP events.
9767 */
9768VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9769 tSmeBtAmpEvent *pBtAmpEventParams)
9770{
9771 WDI_Status status = WDI_STATUS_SUCCESS ;
9772 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9773 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9774 sizeof(WDI_BtAmpEventParamsType)) ;
9775 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009778 if(NULL == wdiBtAmpEventParam)
9779 {
9780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 VOS_ASSERT(0);
9783 return VOS_STATUS_E_NOMEM;
9784 }
9785 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9786 if(NULL == pWdaParams)
9787 {
9788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009789 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009790 VOS_ASSERT(0);
9791 vos_mem_free(wdiBtAmpEventParam);
9792 return VOS_STATUS_E_NOMEM;
9793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9795 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009796 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9797 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 /* Store BT AMP event pointer, as this will be used for response */
9799 /* store Params pass it to WDI */
9800 pWdaParams->pWdaContext = pWDA;
9801 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9802 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009804 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009805 if(IS_WDI_STATUS_FAILURE(status))
9806 {
9807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9808 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9809 vos_mem_free(pWdaParams->wdaMsgParam) ;
9810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9811 vos_mem_free(pWdaParams) ;
9812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9814 {
9815 pWDA->wdaAmpSessionOn = VOS_TRUE;
9816 }
9817 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009818}
9819
Jeff Johnson295189b2012-06-20 16:38:30 -07009820/*
9821 * FUNCTION: WDA_FTMCommandReqCallback
9822 * Handle FTM CMD response came from HAL
9823 * Route responce to HDD FTM
9824 */
9825void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9826 void *usrData)
9827{
9828 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009829 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9830 {
9831 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309832 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009833 return;
9834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009835 /* Release Current FTM Command Request */
9836 vos_mem_free(pWDA->wdaFTMCmdReq);
9837 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009838 /* Post FTM Responce to HDD FTM */
9839 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009840 return;
9841}
Jeff Johnson295189b2012-06-20 16:38:30 -07009842/*
9843 * FUNCTION: WDA_ProcessFTMCommand
9844 * Send FTM command to WDI
9845 */
9846VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9847 tPttMsgbuffer *pPTTFtmCmd)
9848{
9849 WDI_Status status = WDI_STATUS_SUCCESS;
9850 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009851 ftmCMDReq = (WDI_FTMCommandReqType *)
9852 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9853 if(NULL == ftmCMDReq)
9854 {
9855 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9856 "WDA FTM Command buffer alloc fail");
9857 return VOS_STATUS_E_NOMEM;
9858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9860 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009861 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 /* Send command to WDI */
9863 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009864 return status;
9865}
Jeff Johnsone7245742012-09-05 17:12:55 -07009866#ifdef FEATURE_OEM_DATA_SUPPORT
9867/*
9868 * FUNCTION: WDA_StartOemDataReqCallback
9869 *
9870 */
9871void WDA_StartOemDataReqCallback(
9872 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9873 void* pUserData)
9874{
9875 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9877 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009878 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009879
Jeff Johnsone7245742012-09-05 17:12:55 -07009880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009881 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009882
9883 if(NULL == pWdaParams)
9884 {
9885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009886 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009887 VOS_ASSERT(0) ;
9888 return ;
9889 }
9890 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9891
Jeff Johnsone7245742012-09-05 17:12:55 -07009892 if(NULL == pWDA)
9893 {
9894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009895 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009896 VOS_ASSERT(0);
9897 return ;
9898 }
9899
9900 /*
9901 * Allocate memory for response params sent to PE
9902 */
9903 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9904
9905 // Check if memory is allocated for OemdataMeasRsp Params.
9906 if(NULL == pOemDataRspParams)
9907 {
9908 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9909 "OEM DATA WDA callback alloc fail");
9910 VOS_ASSERT(0) ;
9911 return;
9912 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009913
Jeff Johnsone7245742012-09-05 17:12:55 -07009914 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9916 vos_mem_free(pWdaParams->wdaMsgParam);
9917 vos_mem_free(pWdaParams) ;
9918
Jeff Johnsone7245742012-09-05 17:12:55 -07009919 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009920 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009921 * Also, here success always means that we have atleast one BSSID.
9922 */
9923 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9924
9925 //enable Tx
9926 status = WDA_ResumeDataTx(pWDA);
9927 if(status != VOS_STATUS_SUCCESS)
9928 {
9929 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9930 }
9931 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9932 return ;
9933}
9934/*
9935 * FUNCTION: WDA_ProcessStartOemDataReq
9936 * Send Start Oem Data Req to WDI
9937 */
9938VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9939 tStartOemDataReq *pOemDataReqParams)
9940{
9941 WDI_Status status = WDI_STATUS_SUCCESS;
9942 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009943 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009944
9945 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9946
9947 if(NULL == wdiOemDataReqParams)
9948 {
9949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009950 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009951 VOS_ASSERT(0);
9952 return VOS_STATUS_E_NOMEM;
9953 }
9954
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009955 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9956 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9957 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9958 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009959
9960 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9961
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009962 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9963 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009964 {
9965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009967 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009968 vos_mem_free(pOemDataReqParams);
9969 VOS_ASSERT(0);
9970 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009971 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009972
Bernald44a1ae2013-01-09 08:30:39 -08009973 pWdaParams->pWdaContext = (void*)pWDA;
9974 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9975 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009976
9977 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9978 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009979
9980 if(IS_WDI_STATUS_FAILURE(status))
9981 {
9982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9983 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009984 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9985 vos_mem_free(pWdaParams->wdaMsgParam);
9986 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009987 }
9988 return CONVERT_WDI2VOS_STATUS(status) ;
9989}
9990#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009991/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009992 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009993 *
9994 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009995void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009996{
9997 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010000 if(NULL == pWdaParams)
10001 {
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010003 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 VOS_ASSERT(0) ;
10005 return ;
10006 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010007
10008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10009 vos_mem_free(pWdaParams->wdaMsgParam);
10010 vos_mem_free(pWdaParams);
10011
10012 return ;
10013}
10014/*
10015 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10016 * Free memory.
10017 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10018 */
10019void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10020{
10021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10022
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10025
10026 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10029 "%s: pWdaParams received NULL", __func__);
10030 VOS_ASSERT(0);
10031 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010032 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010033
10034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 {
10036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010037 vos_mem_free(pWdaParams->wdaMsgParam);
10038 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010039 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010040
10041 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010042}
Jeff Johnson295189b2012-06-20 16:38:30 -070010043#ifdef WLAN_FEATURE_GTK_OFFLOAD
10044/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010045 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 *
10047 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010048void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010049 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010050{
10051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10052
10053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010054 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010055
10056 VOS_ASSERT(NULL != pWdaParams);
10057
10058 vos_mem_free(pWdaParams->wdaMsgParam) ;
10059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10060 vos_mem_free(pWdaParams) ;
10061
10062 //print a msg, nothing else to do
10063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010064 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010065
10066 return ;
10067}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010068/*
10069 * FUNCTION: WDA_GTKOffloadReqCallback
10070 * Free memory.
10071 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10072 */
10073void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10074{
10075 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010076
Yue Ma7f44bbe2013-04-12 11:47:39 -070010077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10078 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10079
10080 if(NULL == pWdaParams)
10081 {
10082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10083 "%s: pWdaParams received NULL", __func__);
10084 VOS_ASSERT(0);
10085 return;
10086 }
10087
10088 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10089 {
10090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10091 vos_mem_free(pWdaParams->wdaMsgParam);
10092 vos_mem_free(pWdaParams);
10093 }
10094
10095 return;
10096}
Jeff Johnson295189b2012-06-20 16:38:30 -070010097/*
10098 * FUNCTION: WDA_ProcessGTKOffloadReq
10099 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10100 * to broadcast traffic (sta mode).
10101 */
10102VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10103 tpSirGtkOffloadParams pGtkOffloadParams)
10104{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010105 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10107 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10108 sizeof(WDI_GtkOffloadReqMsg)) ;
10109 tWDA_ReqParams *pWdaParams ;
10110
10111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010113
10114 if(NULL == wdiGtkOffloadReqMsg)
10115 {
10116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010117 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010118 VOS_ASSERT(0);
10119 return VOS_STATUS_E_NOMEM;
10120 }
10121
10122 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10123 if(NULL == pWdaParams)
10124 {
10125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010126 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010127 VOS_ASSERT(0);
10128 vos_mem_free(wdiGtkOffloadReqMsg);
10129 return VOS_STATUS_E_NOMEM;
10130 }
10131
10132 //
10133 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10134 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010135
10136 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010137 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010138
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10140 // Copy KCK
10141 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10142 // Copy KEK
10143 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10144 // Copy KeyReplayCounter
10145 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10146 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10147
Yue Ma7f44bbe2013-04-12 11:47:39 -070010148 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10149 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010150
Jeff Johnson295189b2012-06-20 16:38:30 -070010151
10152 /* Store Params pass it to WDI */
10153 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10154 pWdaParams->pWdaContext = pWDA;
10155 /* Store param pointer as passed in by caller */
10156 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10157
Yue Ma7f44bbe2013-04-12 11:47:39 -070010158 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010159
10160 if(IS_WDI_STATUS_FAILURE(status))
10161 {
10162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10163 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10165 vos_mem_free(pWdaParams->wdaMsgParam);
10166 vos_mem_free(pWdaParams);
10167 }
10168
10169 return CONVERT_WDI2VOS_STATUS(status) ;
10170}
10171
10172/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010173 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 *
10175 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010176void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010177 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010178{
10179 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10180 tWDA_CbContext *pWDA;
10181 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010182 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 vos_msg_t vosMsg;
10184
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010186 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010187
10188 VOS_ASSERT(NULL != pWdaParams);
10189
10190 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10191 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10192
10193 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10194 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10195
10196 /* Message Header */
10197 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010198 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010199
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010200 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10201 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10202 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10203 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10204 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010205
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010206 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10207 pwdiGtkOffloadGetInfoRsparams->bssId,
10208 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 /* VOS message wrapper */
10210 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10211 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10212 vosMsg.bodyval = 0;
10213
10214 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10215 {
10216 /* free the mem and return */
10217 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10218 }
10219
10220 vos_mem_free(pWdaParams->wdaMsgParam) ;
10221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10222 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010223
10224 return;
10225}
10226/*
10227 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10228 * Free memory and send RSP back to SME.
10229 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10230 */
10231void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10232{
10233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10234 vos_msg_t vosMsg;
10235
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10237 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10238
10239 if(NULL == pWdaParams)
10240 {
10241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10242 "%s: pWdaParams received NULL", __func__);
10243 VOS_ASSERT(0);
10244 return;
10245 }
10246
10247 /* VOS message wrapper */
10248 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10249 vosMsg.bodyptr = NULL;
10250 vosMsg.bodyval = 0;
10251
10252 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10253 {
10254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10255 vos_mem_free(pWdaParams->wdaMsgParam);
10256 vos_mem_free(pWdaParams);
10257 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10258 }
10259
10260 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010261}
10262#endif
10263
10264/*
10265 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10266 * Request to WDI to set Tx Per Tracking configurations
10267 */
10268VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10269{
10270 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010271 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10273 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10274 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10275 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 if(NULL == pwdiSetTxPerTrackingReqParams)
10279 {
10280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 vos_mem_free(pTxPerTrackingParams);
10283 VOS_ASSERT(0);
10284 return VOS_STATUS_E_NOMEM;
10285 }
10286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10287 if(NULL == pWdaParams)
10288 {
10289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10292 vos_mem_free(pTxPerTrackingParams);
10293 VOS_ASSERT(0);
10294 return VOS_STATUS_E_NOMEM;
10295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10297 pTxPerTrackingParams->ucTxPerTrackingEnable;
10298 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10299 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10300 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10301 pTxPerTrackingParams->ucTxPerTrackingRatio;
10302 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10303 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010304 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10305 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 /* Store param pointer as passed in by caller */
10307 /* store Params pass it to WDI
10308 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10309 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10310 pWdaParams->pWdaContext = pWDA;
10311 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010312 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010313 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010314 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 {
10316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10317 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010318 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 vos_mem_free(pWdaParams->wdaMsgParam) ;
10320 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10321 vos_mem_free(pWdaParams) ;
10322 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010323 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010324
10325}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010326/*
10327 * FUNCTION: WDA_HALDumpCmdCallback
10328 * Send the VOS complete .
10329 */
10330void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10331 void* pUserData)
10332{
10333 tANI_U8 *buffer = NULL;
10334 tWDA_CbContext *pWDA = NULL;
10335 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010336 if(NULL == pWdaParams)
10337 {
10338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010339 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010340 VOS_ASSERT(0) ;
10341 return ;
10342 }
10343
10344 pWDA = pWdaParams->pWdaContext;
10345 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 if(wdiRspParams->usBufferLen > 0)
10347 {
10348 /*Copy the Resp data to UMAC supplied buffer*/
10349 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10350 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10352 vos_mem_free(pWdaParams);
10353
10354 /* Indicate VOSS about the start complete */
10355 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010356 return ;
10357}
10358
Jeff Johnson295189b2012-06-20 16:38:30 -070010359/*
10360 * FUNCTION: WDA_ProcessHALDumpCmdReq
10361 * Send Dump command to WDI
10362 */
10363VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10364 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10365 tANI_U32 arg4, tANI_U8 *pBuffer)
10366{
10367 WDI_Status status = WDI_STATUS_SUCCESS;
10368 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10369 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10370 tWDA_ReqParams *pWdaParams ;
10371 pVosContextType pVosContext = NULL;
10372 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010373 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10374 (void *)pMac);
10375
10376 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10377 if(NULL == pWdaParams)
10378 {
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 return VOS_STATUS_E_NOMEM;
10382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 /* Allocate memory WDI request structure*/
10384 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10385 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10386 if(NULL == wdiHALDumpCmdReqParam)
10387 {
10388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10389 "WDA HAL DUMP Command buffer alloc fail");
10390 vos_mem_free(pWdaParams);
10391 return WDI_STATUS_E_FAILURE;
10392 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 /* Extract the arguments */
10395 wdiHalDumpCmdInfo->command = cmd;
10396 wdiHalDumpCmdInfo->argument1 = arg1;
10397 wdiHalDumpCmdInfo->argument2 = arg2;
10398 wdiHalDumpCmdInfo->argument3 = arg3;
10399 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10402
10403 /* Response message will be passed through the buffer */
10404 pWdaParams->wdaMsgParam = (void *)pBuffer;
10405
10406 /* store Params pass it to WDI */
10407 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010408 /* Send command to WDI */
10409 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010410 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010411 if ( vStatus != VOS_STATUS_SUCCESS )
10412 {
10413 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10414 {
10415 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010416 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 }
10418 else
10419 {
10420 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010421 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010422 }
10423 VOS_ASSERT(0);
10424 }
10425 return status;
10426}
Jeff Johnson295189b2012-06-20 16:38:30 -070010427#ifdef WLAN_FEATURE_GTK_OFFLOAD
10428/*
10429 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10430 * Request to WDI to get GTK Offload Information
10431 */
10432VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10433 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10434{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010435 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010436 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10437 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10438 tWDA_ReqParams *pWdaParams ;
10439
10440 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10441 {
10442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010444 VOS_ASSERT(0);
10445 return VOS_STATUS_E_NOMEM;
10446 }
10447
10448 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10449 if(NULL == pWdaParams)
10450 {
10451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 VOS_ASSERT(0);
10454 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10455 return VOS_STATUS_E_NOMEM;
10456 }
10457
Yue Ma7f44bbe2013-04-12 11:47:39 -070010458 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10459 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010460
Jeff Johnson295189b2012-06-20 16:38:30 -070010461 /* Store Params pass it to WDI */
10462 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10463 pWdaParams->pWdaContext = pWDA;
10464 /* Store param pointer as passed in by caller */
10465 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10466
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010467 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010468 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010469
Yue Ma7f44bbe2013-04-12 11:47:39 -070010470 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010471
10472 if(IS_WDI_STATUS_FAILURE(status))
10473 {
10474 /* failure returned by WDI API */
10475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10476 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10477 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10478 vos_mem_free(pWdaParams) ;
10479 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10480 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10481 }
10482
10483 return CONVERT_WDI2VOS_STATUS(status) ;
10484}
10485#endif // WLAN_FEATURE_GTK_OFFLOAD
10486
10487/*
Yue Mab9c86f42013-08-14 15:59:08 -070010488 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10489 *
10490 */
10491VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10492 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10493{
10494 WDI_Status wdiStatus;
10495 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10496
10497 addPeriodicTxPtrnParams =
10498 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10499
10500 if (NULL == addPeriodicTxPtrnParams)
10501 {
10502 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10503 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10504 __func__);
10505
10506 return VOS_STATUS_E_NOMEM;
10507 }
10508
10509 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10510 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10511
10512 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10513 addPeriodicTxPtrnParams->pUserData = pWDA;
10514
10515 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10516
10517 if (WDI_STATUS_PENDING == wdiStatus)
10518 {
10519 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10520 "Pending received for %s:%d", __func__, __LINE__ );
10521 }
10522 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10523 {
10524 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10525 "Failure in %s:%d", __func__, __LINE__ );
10526 }
10527
10528 vos_mem_free(addPeriodicTxPtrnParams);
10529
10530 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10531}
10532
10533/*
10534 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10535 *
10536 */
10537VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10538 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10539{
10540 WDI_Status wdiStatus;
10541 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10542
10543 delPeriodicTxPtrnParams =
10544 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10545
10546 if (NULL == delPeriodicTxPtrnParams)
10547 {
10548 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10550 __func__);
10551
10552 return VOS_STATUS_E_NOMEM;
10553 }
10554
10555 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10556 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10557
10558 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10559 delPeriodicTxPtrnParams->pUserData = pWDA;
10560
10561 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10562
10563 if (WDI_STATUS_PENDING == wdiStatus)
10564 {
10565 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10566 "Pending received for %s:%d", __func__, __LINE__ );
10567 }
10568 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10569 {
10570 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10571 "Failure in %s:%d", __func__, __LINE__ );
10572 }
10573
10574 vos_mem_free(delPeriodicTxPtrnParams);
10575
10576 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10577}
10578
Rajeev79dbe4c2013-10-05 11:03:42 +053010579#ifdef FEATURE_WLAN_BATCH_SCAN
10580/*
10581 * FUNCTION: WDA_ProcessStopBatchScanInd
10582 *
10583 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10584 *
10585 * PARAM:
10586 * pWDA: pointer to WDA context
10587 * pReq: pointer to stop batch scan request
10588 */
10589VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10590 tSirStopBatchScanInd *pReq)
10591{
10592 WDI_Status wdiStatus;
10593 WDI_StopBatchScanIndType wdiReq;
10594
10595 wdiReq.param = pReq->param;
10596
10597 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10598
10599 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10600 {
10601 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10602 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10603 }
10604
10605 vos_mem_free(pReq);
10606
10607 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10608}
10609/*==========================================================================
10610 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10611
10612 DESCRIPTION
10613 API to pull batch scan result from FW
10614
10615 PARAMETERS
10616 pWDA: Pointer to WDA context
10617 pGetBatchScanReq: Pointer to get batch scan result indication
10618
10619 RETURN VALUE
10620 NONE
10621
10622===========================================================================*/
10623VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10624 tSirTriggerBatchScanResultInd *pReq)
10625{
10626 WDI_Status wdiStatus;
10627 WDI_TriggerBatchScanResultIndType wdiReq;
10628
10629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10630 "------> %s " ,__func__);
10631
10632 wdiReq.param = pReq->param;
10633
10634 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10635
10636 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10637 {
10638 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10639 "Trigger batch scan result ind failed %s:%d",
10640 __func__, wdiStatus);
10641 }
10642
10643 vos_mem_free(pReq);
10644
10645 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10646}
10647
10648/*==========================================================================
10649 FUNCTION WDA_SetBatchScanRespCallback
10650
10651 DESCRIPTION
10652 API to process set batch scan response from FW
10653
10654 PARAMETERS
10655 pRsp: Pointer to set batch scan response
10656 pUserData: Pointer to user data
10657
10658 RETURN VALUE
10659 NONE
10660
10661===========================================================================*/
10662void WDA_SetBatchScanRespCallback
10663(
10664 WDI_SetBatchScanRspType *pRsp,
10665 void* pUserData
10666)
10667{
10668 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10669 tpAniSirGlobal pMac;
10670 void *pCallbackContext;
10671 tWDA_CbContext *pWDA = NULL ;
10672 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10673
10674
10675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10676 "<------ %s " ,__func__);
10677 if (NULL == pWdaParams)
10678 {
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10680 "%s: pWdaParams received NULL", __func__);
10681 VOS_ASSERT(0) ;
10682 return ;
10683 }
10684
10685 /*extract WDA context*/
10686 pWDA = pWdaParams->pWdaContext;
10687 if (NULL == pWDA)
10688 {
10689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10690 "%s:pWDA is NULL can't invole HDD callback",
10691 __func__);
10692 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10693 vos_mem_free(pWdaParams->wdaMsgParam);
10694 vos_mem_free(pWdaParams);
10695 VOS_ASSERT(0);
10696 return;
10697 }
10698
10699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10700 vos_mem_free(pWdaParams->wdaMsgParam);
10701 vos_mem_free(pWdaParams);
10702
10703 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10704 if (NULL == pMac)
10705 {
10706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10707 "%s:pMac is NULL", __func__);
10708 VOS_ASSERT(0);
10709 return;
10710 }
10711
10712 pHddSetBatchScanRsp =
10713 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10714 if (NULL == pHddSetBatchScanRsp)
10715 {
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10717 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10718 VOS_ASSERT(0);
10719 return;
10720 }
10721
10722 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10723
10724 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10725 /*call hdd callback with set batch scan response data*/
10726 if(pMac->pmc.setBatchScanReqCallback)
10727 {
10728 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
10729 }
10730 else
10731 {
10732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10733 "%s:HDD callback is null", __func__);
10734 VOS_ASSERT(0);
10735 }
10736
10737 vos_mem_free(pHddSetBatchScanRsp);
10738 return ;
10739}
10740
10741/*==========================================================================
10742 FUNCTION WDA_ProcessSetBatchScanReq
10743
10744 DESCRIPTION
10745 API to send set batch scan request to WDI
10746
10747 PARAMETERS
10748 pWDA: Pointer to WDA context
10749 pSetBatchScanReq: Pointer to set batch scan req
10750
10751 RETURN VALUE
10752 NONE
10753
10754===========================================================================*/
10755VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
10756 tSirSetBatchScanReq *pSetBatchScanReq)
10757{
10758 WDI_Status status;
10759 tWDA_ReqParams *pWdaParams ;
10760 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
10761
10762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10763 "------> %s " ,__func__);
10764
10765 pWdiSetBatchScanReq =
10766 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
10767 if (NULL == pWdiSetBatchScanReq)
10768 {
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10770 "%s: VOS MEM Alloc Failure", __func__);
10771 vos_mem_free(pSetBatchScanReq);
10772 VOS_ASSERT(0);
10773 return VOS_STATUS_E_NOMEM;
10774 }
10775
10776 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10777 if (NULL == pWdaParams)
10778 {
10779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10780 "%s: VOS MEM Alloc Failure", __func__);
10781 VOS_ASSERT(0);
10782 vos_mem_free(pSetBatchScanReq);
10783 vos_mem_free(pWdiSetBatchScanReq);
10784 return VOS_STATUS_E_NOMEM;
10785 }
10786
10787 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
10788 pWdiSetBatchScanReq->numberOfScansToBatch =
10789 pSetBatchScanReq->numberOfScansToBatch;
10790 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
10791 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
10792 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
10793
10794 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
10795 pWdaParams->pWdaContext = pWDA;
10796 pWdaParams->wdaMsgParam = pSetBatchScanReq;
10797
10798 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
10799 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
10800 if (IS_WDI_STATUS_FAILURE(status))
10801 {
10802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10803 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
10804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10805 vos_mem_free(pWdaParams->wdaMsgParam);
10806 vos_mem_free(pWdaParams);
10807 }
10808 return CONVERT_WDI2VOS_STATUS(status);
10809}
10810
10811#endif
10812
Yue Mab9c86f42013-08-14 15:59:08 -070010813/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070010814 * FUNCTION: WDA_ProcessRateUpdateInd
10815 *
10816 */
10817VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
10818 tSirRateUpdateInd *pRateUpdateParams)
10819{
10820 WDI_Status wdiStatus;
10821 WDI_RateUpdateIndParams rateUpdateParams;
10822
10823 vos_mem_copy(rateUpdateParams.bssid,
10824 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
10825
10826 rateUpdateParams.ucastDataRateTxFlag =
10827 pRateUpdateParams->ucastDataRateTxFlag;
10828 rateUpdateParams.reliableMcastDataRateTxFlag =
10829 pRateUpdateParams->reliableMcastDataRateTxFlag;
10830 rateUpdateParams.mcastDataRate24GHzTxFlag =
10831 pRateUpdateParams->mcastDataRate24GHzTxFlag;
10832 rateUpdateParams.mcastDataRate5GHzTxFlag =
10833 pRateUpdateParams->mcastDataRate5GHzTxFlag;
10834
10835 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
10836 rateUpdateParams.reliableMcastDataRate =
10837 pRateUpdateParams->reliableMcastDataRate;
10838 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
10839 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
10840
10841 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10842 rateUpdateParams.pUserData = pWDA;
10843
10844 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
10845
10846 if (WDI_STATUS_PENDING == wdiStatus)
10847 {
10848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10849 "Pending received for %s:%d", __func__, __LINE__ );
10850 }
10851 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10852 {
10853 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10854 "Failure in %s:%d", __func__, __LINE__ );
10855 }
10856
10857 vos_mem_free(pRateUpdateParams);
10858
10859 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10860}
10861
10862/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 * -------------------------------------------------------------------------
10864 * DATA interface with WDI for Mgmt Frames
10865 * -------------------------------------------------------------------------
10866 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010867/*
10868 * FUNCTION: WDA_TxComplete
10869 * Callback function for the WDA_TxPacket
10870 */
10871VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10872 VOS_STATUS status )
10873{
10874
10875 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10876 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010877 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010878
10879 if(NULL == wdaContext)
10880 {
10881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10882 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010883 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 VOS_ASSERT(0);
10885 return VOS_STATUS_E_FAILURE;
10886 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010887
10888 /*Check if frame was timed out or not*/
10889 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10890 (v_PVOID_t)&uUserData);
10891
10892 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10893 {
10894 /*Discard frame - no further processing is needed*/
10895 vos_pkt_return_packet(pData);
10896 return VOS_STATUS_SUCCESS;
10897 }
10898
Jeff Johnson295189b2012-06-20 16:38:30 -070010899 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10900 if( NULL!=wdaContext->pTxCbFunc)
10901 {
10902 /*check if packet is freed already*/
10903 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10904 {
10905 wdaContext->pTxCbFunc(pMac, pData);
10906 }
10907 else
10908 {
10909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010910 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912 //Return from here since we reaching here because the packet already timeout
10913 return status;
10914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 }
10916
10917 /*
10918 * Trigger the event to bring the HAL TL Tx complete function to come
10919 * out of wait
10920 * Let the coe above to complete the packet first. When this event is set,
10921 * the thread waiting for the event may run and set Vospacket_freed causing the original
10922 * packet not being freed.
10923 */
10924 status = vos_event_set(&wdaContext->txFrameEvent);
10925 if(!VOS_IS_STATUS_SUCCESS(status))
10926 {
10927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10928 "NEW VOS Event Set failed - status = %d \n", status);
10929 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010930 return status;
10931}
Jeff Johnson295189b2012-06-20 16:38:30 -070010932/*
10933 * FUNCTION: WDA_TxPacket
10934 * Forward TX management frame to WDI
10935 */
10936VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10937 void *pFrmBuf,
10938 tANI_U16 frmLen,
10939 eFrameType frmType,
10940 eFrameTxDir txDir,
10941 tANI_U8 tid,
10942 pWDATxRxCompFunc pCompFunc,
10943 void *pData,
10944 pWDAAckFnTxComp pAckTxComp,
10945 tANI_U8 txFlag)
10946{
10947 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10948 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10949 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10950 tANI_U8 eventIdx = 0;
10951 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10952 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 if((NULL == pWDA)||(NULL == pFrmBuf))
10954 {
10955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010956 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010957 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 VOS_ASSERT(0);
10959 return VOS_STATUS_E_FAILURE;
10960 }
10961
10962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010963 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010964 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10965 if(NULL == pMac)
10966 {
10967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010968 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 VOS_ASSERT(0);
10970 return VOS_STATUS_E_FAILURE;
10971 }
10972
10973
10974
10975 /* store the call back function in WDA context */
10976 pWDA->pTxCbFunc = pCompFunc;
10977 /* store the call back for the function of ackTxComplete */
10978 if( pAckTxComp )
10979 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010980 if( NULL != pWDA->pAckTxCbFunc )
10981 {
10982 /* Already TxComp is active no need to active again */
10983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10984 "There is already one request pending for tx complete\n");
10985 pWDA->pAckTxCbFunc( pMac, 0);
10986 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010987
Jeff Johnsone7245742012-09-05 17:12:55 -070010988 if( VOS_STATUS_SUCCESS !=
10989 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10990 {
10991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10992 "Tx Complete timeout Timer Stop Failed ");
10993 }
10994 else
10995 {
10996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010997 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010998 }
10999 }
11000
11001 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11002 pWDA->pAckTxCbFunc = pAckTxComp;
11003 if( VOS_STATUS_SUCCESS !=
11004 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11005 {
11006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11007 "Tx Complete Timer Start Failed ");
11008 pWDA->pAckTxCbFunc = NULL;
11009 return eHAL_STATUS_FAILURE;
11010 }
11011 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011012 /* Reset the event to be not signalled */
11013 status = vos_event_reset(&pWDA->txFrameEvent);
11014 if(!VOS_IS_STATUS_SUCCESS(status))
11015 {
11016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11017 "VOS Event reset failed - status = %d\n",status);
11018 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11019 if( pAckTxComp )
11020 {
11021 pWDA->pAckTxCbFunc = NULL;
11022 if( VOS_STATUS_SUCCESS !=
11023 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11024 {
11025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11026 "Tx Complete timeout Timer Stop Failed ");
11027 }
11028 }
11029 return VOS_STATUS_E_FAILURE;
11030 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011031
11032 /* If Peer Sta mask is set don't overwrite to self sta */
11033 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011035 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011037 else
11038 {
Ganesh K08bce952012-12-13 15:04:41 -080011039 /* Get system role, use the self station if in unknown role or STA role */
11040 systemRole = wdaGetGlobalSystemRole(pMac);
11041 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11042 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011043#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011044 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011045#endif
Ganesh K08bce952012-12-13 15:04:41 -080011046 ))
11047 {
11048 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11049 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011051
Jeff Johnsone7245742012-09-05 17:12:55 -070011052 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11053 disassoc frame reaches the HW, HAL has already deleted the peer station */
11054 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011056 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011057 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011058 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011059 /*Send Probe request frames on self sta idx*/
11060 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011061 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 /* Since we donot want probe responses to be retried, send probe responses
11063 through the NO_ACK queues */
11064 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11065 {
11066 //probe response is sent out using self station and no retries options.
11067 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11068 }
11069 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11070 {
11071 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11072 }
11073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11075
11076 /*Set frame tag to 0
11077 We will use the WDA user data in order to tag a frame as expired*/
11078 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11079 (v_PVOID_t)0);
11080
11081
11082 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11083 frmLen, ucTypeSubType, tid,
11084 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11085 {
11086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11087 "Sending Mgmt Frame failed - status = %d\n", status);
11088 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11089 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11090 if( pAckTxComp )
11091 {
11092 pWDA->pAckTxCbFunc = NULL;
11093 if( VOS_STATUS_SUCCESS !=
11094 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11095 {
11096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11097 "Tx Complete timeout Timer Stop Failed ");
11098 }
11099 }
11100 return VOS_STATUS_E_FAILURE;
11101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011102 /*
11103 * Wait for the event to be set by the TL, to get the response of TX
11104 * complete, this event should be set by the Callback function called by TL
11105 */
11106 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11107 &eventIdx);
11108 if(!VOS_IS_STATUS_SUCCESS(status))
11109 {
11110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11111 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011112 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11114 after the packet gets completed(packet freed once)*/
11115
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011116 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011117 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011118
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011119 /*Tag Frame as timed out for later deletion*/
11120 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11121 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11122
Jeff Johnson295189b2012-06-20 16:38:30 -070011123 /* check whether the packet was freed already,so need not free again when
11124 * TL calls the WDA_Txcomplete routine
11125 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011126 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11127 /*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 -070011128 {
11129 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011130 } */
11131
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 if( pAckTxComp )
11133 {
11134 pWDA->pAckTxCbFunc = NULL;
11135 if( VOS_STATUS_SUCCESS !=
11136 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11137 {
11138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11139 "Tx Complete timeout Timer Stop Failed ");
11140 }
11141 }
11142 status = VOS_STATUS_E_FAILURE;
11143 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011144#ifdef WLAN_DUMP_MGMTFRAMES
11145 if (VOS_IS_STATUS_SUCCESS(status))
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "%s() TX packet : SubType %d", __func__,pFc->subType);
11149 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 pData, frmLen);
11151 }
11152#endif
11153
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 return status;
11155}
Jeff Johnson295189b2012-06-20 16:38:30 -070011156/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011157 * FUNCTION: WDA_ProcessDHCPStartInd
11158 * Forward DHCP Start to WDI
11159 */
11160static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11161 tAniDHCPInd *dhcpStartInd)
11162{
11163 WDI_Status status;
11164 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11165 if (NULL == wdiDHCPInd)
11166 {
11167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11168 "%s: VOS MEM Alloc Failure", __func__);
11169 VOS_ASSERT(0);
11170 vos_mem_free(dhcpStartInd);
11171 return VOS_STATUS_E_NOMEM;
11172 }
11173
11174 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11175 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11176 sizeof(tSirMacAddr));
11177
11178 status = WDI_dhcpStartInd(wdiDHCPInd);
11179
11180 if (IS_WDI_STATUS_FAILURE(status))
11181 {
11182 vos_mem_free(wdiDHCPInd);
11183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11184 "DHCP Start Indication failed");
11185 }
11186 vos_mem_free(dhcpStartInd);
11187 return CONVERT_WDI2VOS_STATUS(status) ;
11188}
11189
11190 /*
11191 * FUNCTION: WDA_ProcessDHCPStopInd
11192 * Forward DHCP Stop to WDI
11193 */
11194 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11195 tAniDHCPInd *dhcpStopInd)
11196 {
11197 WDI_Status status;
11198 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11199 if (NULL == wdiDHCPInd)
11200 {
11201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11202 "%s: VOS MEM Alloc Failure", __func__);
11203 VOS_ASSERT(0);
11204 vos_mem_free(dhcpStopInd);
11205 return VOS_STATUS_E_NOMEM;
11206 }
11207 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11208 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11209 status = WDI_dhcpStopInd(wdiDHCPInd);
11210 if (IS_WDI_STATUS_FAILURE(status))
11211 {
11212 vos_mem_free(wdiDHCPInd);
11213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11214 "DHCP Start Indication failed");
11215 }
11216 vos_mem_free(dhcpStopInd);
11217 return CONVERT_WDI2VOS_STATUS(status) ;
11218 }
11219
11220/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 * FUNCTION: WDA_McProcessMsg
11222 * Trigger DAL-AL to start CFG download
11223 */
11224VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11225{
11226 VOS_STATUS status = VOS_STATUS_SUCCESS;
11227 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011228 if(NULL == pMsg)
11229 {
11230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011231 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 VOS_ASSERT(0);
11233 return VOS_STATUS_E_FAILURE;
11234 }
11235
11236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011237 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011238
11239 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11240 if(NULL == pWDA )
11241 {
11242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011243 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011244 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011245 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011246 return VOS_STATUS_E_FAILURE;
11247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011248 /* Process all the WDA messages.. */
11249 switch( pMsg->type )
11250 {
11251 case WNI_CFG_DNLD_REQ:
11252 {
11253 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 /* call WDA complete event if config download success */
11255 if( VOS_IS_STATUS_SUCCESS(status) )
11256 {
11257 vos_WDAComplete_cback(pVosContext);
11258 }
11259 else
11260 {
11261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11262 "WDA Config Download failure" );
11263 }
11264 break ;
11265 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011266 /*
11267 * Init SCAN request from PE, convert it into DAL format
11268 * and send it to DAL
11269 */
11270 case WDA_INIT_SCAN_REQ:
11271 {
11272 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11273 break ;
11274 }
11275 /* start SCAN request from PE */
11276 case WDA_START_SCAN_REQ:
11277 {
11278 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11279 break ;
11280 }
11281 /* end SCAN request from PE */
11282 case WDA_END_SCAN_REQ:
11283 {
11284 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11285 break ;
11286 }
11287 /* end SCAN request from PE */
11288 case WDA_FINISH_SCAN_REQ:
11289 {
11290 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11291 break ;
11292 }
11293 /* join request from PE */
11294 case WDA_CHNL_SWITCH_REQ:
11295 {
11296 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11297 {
11298 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11299 }
11300 else
11301 {
11302 WDA_ProcessChannelSwitchReq(pWDA,
11303 (tSwitchChannelParams*)pMsg->bodyptr) ;
11304 }
11305 break ;
11306 }
11307 /* ADD BSS request from PE */
11308 case WDA_ADD_BSS_REQ:
11309 {
11310 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11311 break ;
11312 }
11313 case WDA_ADD_STA_REQ:
11314 {
11315 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11316 break ;
11317 }
11318 case WDA_DELETE_BSS_REQ:
11319 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11321 break ;
11322 }
11323 case WDA_DELETE_STA_REQ:
11324 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11326 break ;
11327 }
11328 case WDA_CONFIG_PARAM_UPDATE_REQ:
11329 {
11330 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11331 break ;
11332 }
11333 case WDA_SET_BSSKEY_REQ:
11334 {
11335 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11336 break ;
11337 }
11338 case WDA_SET_STAKEY_REQ:
11339 {
11340 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11341 break ;
11342 }
11343 case WDA_SET_STA_BCASTKEY_REQ:
11344 {
11345 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11346 break ;
11347 }
11348 case WDA_REMOVE_BSSKEY_REQ:
11349 {
11350 WDA_ProcessRemoveBssKeyReq(pWDA,
11351 (tRemoveBssKeyParams *)pMsg->bodyptr);
11352 break ;
11353 }
11354 case WDA_REMOVE_STAKEY_REQ:
11355 {
11356 WDA_ProcessRemoveStaKeyReq(pWDA,
11357 (tRemoveStaKeyParams *)pMsg->bodyptr);
11358 break ;
11359 }
11360 case WDA_REMOVE_STA_BCASTKEY_REQ:
11361 {
11362 /* TODO: currently UMAC is not sending this request, Add the code for
11363 handling this request when UMAC supports */
11364 break;
11365 }
11366#ifdef FEATURE_WLAN_CCX
11367 case WDA_TSM_STATS_REQ:
11368 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011369 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 break;
11371 }
11372#endif
11373 case WDA_UPDATE_EDCA_PROFILE_IND:
11374 {
11375 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11376 break;
11377 }
11378 case WDA_ADD_TS_REQ:
11379 {
11380 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11381 break;
11382 }
11383 case WDA_DEL_TS_REQ:
11384 {
11385 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11386 break;
11387 }
11388 case WDA_ADDBA_REQ:
11389 {
11390 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11391 break;
11392 }
11393 case WDA_DELBA_IND:
11394 {
11395 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11396 break;
11397 }
11398 case WDA_SET_LINK_STATE:
11399 {
11400 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11401 break;
11402 }
11403 case WDA_GET_STATISTICS_REQ:
11404 {
11405 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11406 break;
11407 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011408#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11409 case WDA_GET_ROAM_RSSI_REQ:
11410 {
11411 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11412 break;
11413 }
11414#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011415 case WDA_PWR_SAVE_CFG:
11416 {
11417 if(pWDA->wdaState == WDA_READY_STATE)
11418 {
11419 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11420 }
11421 else
11422 {
11423 if(NULL != pMsg->bodyptr)
11424 {
11425 vos_mem_free(pMsg->bodyptr);
11426 }
11427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11428 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11429 }
11430 break;
11431 }
11432 case WDA_ENTER_IMPS_REQ:
11433 {
11434 if(pWDA->wdaState == WDA_READY_STATE)
11435 {
11436 WDA_ProcessEnterImpsReq(pWDA);
11437 }
11438 else
11439 {
11440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11441 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11442 }
11443 break;
11444 }
11445 case WDA_EXIT_IMPS_REQ:
11446 {
11447 if(pWDA->wdaState == WDA_READY_STATE)
11448 {
11449 WDA_ProcessExitImpsReq(pWDA);
11450 }
11451 else
11452 {
11453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11454 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11455 }
11456 break;
11457 }
11458 case WDA_ENTER_BMPS_REQ:
11459 {
11460 if(pWDA->wdaState == WDA_READY_STATE)
11461 {
11462 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11463 }
11464 else
11465 {
11466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11467 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11468 }
11469 break;
11470 }
11471 case WDA_EXIT_BMPS_REQ:
11472 {
11473 if(pWDA->wdaState == WDA_READY_STATE)
11474 {
11475 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11476 }
11477 else
11478 {
11479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11480 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11481 }
11482 break;
11483 }
11484 case WDA_ENTER_UAPSD_REQ:
11485 {
11486 if(pWDA->wdaState == WDA_READY_STATE)
11487 {
11488 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11489 }
11490 else
11491 {
11492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11493 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11494 }
11495 break;
11496 }
11497 case WDA_EXIT_UAPSD_REQ:
11498 {
11499 if(pWDA->wdaState == WDA_READY_STATE)
11500 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011501 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 }
11503 else
11504 {
11505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11506 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11507 }
11508 break;
11509 }
11510 case WDA_UPDATE_UAPSD_IND:
11511 {
11512 if(pWDA->wdaState == WDA_READY_STATE)
11513 {
11514 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11515 }
11516 else
11517 {
11518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11519 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11520 }
11521 break;
11522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 case WDA_REGISTER_PE_CALLBACK :
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11526 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11527 /*TODO: store the PE callback */
11528 /* Do Nothing? MSG Body should be freed at here */
11529 if(NULL != pMsg->bodyptr)
11530 {
11531 vos_mem_free(pMsg->bodyptr);
11532 }
11533 break;
11534 }
11535 case WDA_SYS_READY_IND :
11536 {
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11538 "Handling msg type WDA_SYS_READY_IND " );
11539 pWDA->wdaState = WDA_READY_STATE;
11540 if(NULL != pMsg->bodyptr)
11541 {
11542 vos_mem_free(pMsg->bodyptr);
11543 }
11544 break;
11545 }
11546 case WDA_BEACON_FILTER_IND :
11547 {
11548 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11549 break;
11550 }
11551 case WDA_BTC_SET_CFG:
11552 {
11553 /*TODO: handle this while dealing with BTC */
11554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11555 "Handling msg type WDA_BTC_SET_CFG " );
11556 /* Do Nothing? MSG Body should be freed at here */
11557 if(NULL != pMsg->bodyptr)
11558 {
11559 vos_mem_free(pMsg->bodyptr);
11560 }
11561 break;
11562 }
11563 case WDA_SIGNAL_BT_EVENT:
11564 {
11565 /*TODO: handle this while dealing with BTC */
11566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11567 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11568 /* Do Nothing? MSG Body should be freed at here */
11569 if(NULL != pMsg->bodyptr)
11570 {
11571 vos_mem_free(pMsg->bodyptr);
11572 }
11573 break;
11574 }
11575 case WDA_CFG_RXP_FILTER_REQ:
11576 {
11577 WDA_ProcessConfigureRxpFilterReq(pWDA,
11578 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11579 break;
11580 }
11581 case WDA_SET_HOST_OFFLOAD:
11582 {
11583 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11584 break;
11585 }
11586 case WDA_SET_KEEP_ALIVE:
11587 {
11588 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11589 break;
11590 }
11591#ifdef WLAN_NS_OFFLOAD
11592 case WDA_SET_NS_OFFLOAD:
11593 {
11594 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11595 break;
11596 }
11597#endif //WLAN_NS_OFFLOAD
11598 case WDA_ADD_STA_SELF_REQ:
11599 {
11600 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11601 break;
11602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 case WDA_DEL_STA_SELF_REQ:
11604 {
11605 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11606 break;
11607 }
11608 case WDA_WOWL_ADD_BCAST_PTRN:
11609 {
11610 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11611 break;
11612 }
11613 case WDA_WOWL_DEL_BCAST_PTRN:
11614 {
11615 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11616 break;
11617 }
11618 case WDA_WOWL_ENTER_REQ:
11619 {
11620 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11621 break;
11622 }
11623 case WDA_WOWL_EXIT_REQ:
11624 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011625 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011626 break;
11627 }
11628 case WDA_TL_FLUSH_AC_REQ:
11629 {
11630 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11631 break;
11632 }
11633 case WDA_SIGNAL_BTAMP_EVENT:
11634 {
11635 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11636 break;
11637 }
11638#ifdef WDA_UT
11639 case WDA_WDI_EVENT_MSG:
11640 {
11641 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11642 break ;
11643 }
11644#endif
11645 case WDA_UPDATE_BEACON_IND:
11646 {
11647 WDA_ProcessUpdateBeaconParams(pWDA,
11648 (tUpdateBeaconParams *)pMsg->bodyptr);
11649 break;
11650 }
11651 case WDA_SEND_BEACON_REQ:
11652 {
11653 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11654 break;
11655 }
11656 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11657 {
11658 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11659 (tSendProbeRespParams *)pMsg->bodyptr);
11660 break;
11661 }
11662#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11663 case WDA_SET_MAX_TX_POWER_REQ:
11664 {
11665 WDA_ProcessSetMaxTxPowerReq(pWDA,
11666 (tMaxTxPowerParams *)pMsg->bodyptr);
11667 break;
11668 }
11669#endif
schang86c22c42013-03-13 18:41:24 -070011670 case WDA_SET_TX_POWER_REQ:
11671 {
11672 WDA_ProcessSetTxPowerReq(pWDA,
11673 (tSirSetTxPowerReq *)pMsg->bodyptr);
11674 break;
11675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 case WDA_SET_P2P_GO_NOA_REQ:
11677 {
11678 WDA_ProcessSetP2PGONOAReq(pWDA,
11679 (tP2pPsParams *)pMsg->bodyptr);
11680 break;
11681 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 /* timer related messages */
11683 case WDA_TIMER_BA_ACTIVITY_REQ:
11684 {
11685 WDA_BaCheckActivity(pWDA) ;
11686 break ;
11687 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011688
11689 /* timer related messages */
11690 case WDA_TIMER_TRAFFIC_STATS_IND:
11691 {
11692 WDA_TimerTrafficStatsInd(pWDA);
11693 break;
11694 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011695#ifdef WLAN_FEATURE_VOWIFI_11R
11696 case WDA_AGGR_QOS_REQ:
11697 {
11698 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11699 break;
11700 }
11701#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011702 case WDA_FTM_CMD_REQ:
11703 {
11704 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11705 break ;
11706 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011707#ifdef FEATURE_OEM_DATA_SUPPORT
11708 case WDA_START_OEM_DATA_REQ:
11709 {
11710 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11711 break;
11712 }
11713#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011714 /* Tx Complete Time out Indication */
11715 case WDA_TX_COMPLETE_TIMEOUT_IND:
11716 {
11717 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11718 break;
11719 }
11720 case WDA_WLAN_SUSPEND_IND:
11721 {
11722 WDA_ProcessWlanSuspendInd(pWDA,
11723 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11724 break;
11725 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011726 case WDA_WLAN_RESUME_REQ:
11727 {
11728 WDA_ProcessWlanResumeReq(pWDA,
11729 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11730 break;
11731 }
11732
11733 case WDA_UPDATE_CF_IND:
11734 {
11735 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11736 pMsg->bodyptr = NULL;
11737 break;
11738 }
11739#ifdef FEATURE_WLAN_SCAN_PNO
11740 case WDA_SET_PNO_REQ:
11741 {
11742 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11743 break;
11744 }
11745 case WDA_UPDATE_SCAN_PARAMS_REQ:
11746 {
11747 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11748 break;
11749 }
11750 case WDA_SET_RSSI_FILTER_REQ:
11751 {
11752 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11753 break;
11754 }
11755#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011756#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011757 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011758 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011759 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011760 break;
11761 }
11762#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011763 case WDA_SET_TX_PER_TRACKING_REQ:
11764 {
11765 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11766 break;
11767 }
11768
11769#ifdef WLAN_FEATURE_PACKET_FILTERING
11770 case WDA_8023_MULTICAST_LIST_REQ:
11771 {
11772 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11773 break;
11774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11776 {
11777 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11778 break;
11779 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011780 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11781 {
11782 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11783 break;
11784 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11786 {
11787 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11788 break;
11789 }
11790#endif // WLAN_FEATURE_PACKET_FILTERING
11791
11792
11793 case WDA_TRANSMISSION_CONTROL_IND:
11794 {
11795 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11796 break;
11797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 case WDA_SET_POWER_PARAMS_REQ:
11799 {
11800 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11801 break;
11802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011803#ifdef WLAN_FEATURE_GTK_OFFLOAD
11804 case WDA_GTK_OFFLOAD_REQ:
11805 {
11806 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11807 break;
11808 }
11809
11810 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11811 {
11812 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11813 break;
11814 }
11815#endif //WLAN_FEATURE_GTK_OFFLOAD
11816
11817 case WDA_SET_TM_LEVEL_REQ:
11818 {
11819 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11820 break;
11821 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011822#ifdef WLAN_FEATURE_11AC
11823 case WDA_UPDATE_OP_MODE:
11824 {
11825 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11826 {
11827 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11828 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11829 else
11830 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11831 " VHT OpMode Feature is Not Supported \n");
11832 }
11833 else
11834 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11835 " 11AC Feature is Not Supported \n");
11836 break;
11837 }
11838#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011839#ifdef WLAN_FEATURE_11W
11840 case WDA_EXCLUDE_UNENCRYPTED_IND:
11841 {
11842 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11843 break;
11844 }
11845#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011846#ifdef FEATURE_WLAN_TDLS
11847 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11848 {
11849 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11850 break;
11851 }
11852#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011853 case WDA_DHCP_START_IND:
11854 {
11855 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11856 break;
11857 }
11858 case WDA_DHCP_STOP_IND:
11859 {
11860 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11861 break;
11862 }
Leo Chang9056f462013-08-01 19:21:11 -070011863#ifdef FEATURE_WLAN_LPHB
11864 case WDA_LPHB_CONF_REQ:
11865 {
11866 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11867 break;
11868 }
11869#endif
Yue Mab9c86f42013-08-14 15:59:08 -070011870 case WDA_ADD_PERIODIC_TX_PTRN_IND:
11871 {
11872 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
11873 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
11874 break;
11875 }
11876 case WDA_DEL_PERIODIC_TX_PTRN_IND:
11877 {
11878 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
11879 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
11880 break;
11881 }
11882
Rajeev79dbe4c2013-10-05 11:03:42 +053011883#ifdef FEATURE_WLAN_BATCH_SCAN
11884 case WDA_SET_BATCH_SCAN_REQ:
11885 {
11886 WDA_ProcessSetBatchScanReq(pWDA,
11887 (tSirSetBatchScanReq *)pMsg->bodyptr);
11888 break;
11889 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011890 case WDA_RATE_UPDATE_IND:
11891 {
11892 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
11893 break;
11894 }
Rajeev79dbe4c2013-10-05 11:03:42 +053011895 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
11896 {
11897 WDA_ProcessTriggerBatchScanResultInd(pWDA,
11898 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
11899 break;
11900 }
11901 case WDA_STOP_BATCH_SCAN_IND:
11902 {
11903 WDA_ProcessStopBatchScanInd(pWDA,
11904 (tSirStopBatchScanInd *)pMsg->bodyptr);
11905 break;
11906 }
11907#endif
11908
Jeff Johnson295189b2012-06-20 16:38:30 -070011909 default:
11910 {
11911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11912 "No Handling for msg type %x in WDA "
11913 ,pMsg->type);
11914 /* Do Nothing? MSG Body should be freed at here */
11915 if(NULL != pMsg->bodyptr)
11916 {
11917 vos_mem_free(pMsg->bodyptr);
11918 }
11919 //WDA_VOS_ASSERT(0) ;
11920 }
11921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011922 return status ;
11923}
11924
Jeff Johnson295189b2012-06-20 16:38:30 -070011925/*
11926 * FUNCTION: WDA_LowLevelIndCallback
11927 * IND API callback from WDI, send Ind to PE
11928 */
11929void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11930 void* pUserData )
11931{
11932 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11933#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11934 tSirRSSINotification rssiNotification;
11935#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 if(NULL == pWDA)
11937 {
11938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011939 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011940 VOS_ASSERT(0);
11941 return ;
11942 }
11943
11944 switch(wdiLowLevelInd->wdiIndicationType)
11945 {
11946 case WDI_RSSI_NOTIFICATION_IND:
11947 {
11948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11949 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011950#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11951 rssiNotification.bReserved =
11952 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11953 rssiNotification.bRssiThres1NegCross =
11954 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11955 rssiNotification.bRssiThres1PosCross =
11956 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11957 rssiNotification.bRssiThres2NegCross =
11958 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11959 rssiNotification.bRssiThres2PosCross =
11960 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11961 rssiNotification.bRssiThres3NegCross =
11962 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11963 rssiNotification.bRssiThres3PosCross =
11964 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011965 rssiNotification.avgRssi = (v_S7_t)
11966 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011967 WLANTL_BMPSRSSIRegionChangedNotification(
11968 pWDA->pVosContext,
11969 &rssiNotification);
11970#endif
11971 break ;
11972 }
11973 case WDI_MISSED_BEACON_IND:
11974 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011975 tpSirSmeMissedBeaconInd pMissBeacInd =
11976 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11978 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011979 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011980 if(NULL == pMissBeacInd)
11981 {
11982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11983 "%s: VOS MEM Alloc Failure", __func__);
11984 break;
11985 }
11986 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11987 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11988 pMissBeacInd->bssIdx =
11989 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11990 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011991 break ;
11992 }
11993 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11994 {
11995 /* TODO: Decode Ind and send Ind to PE */
11996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11997 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11998 break ;
11999 }
12000
12001 case WDI_MIC_FAILURE_IND:
12002 {
12003 tpSirSmeMicFailureInd pMicInd =
12004 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12005
12006 if(NULL == pMicInd)
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 break;
12011 }
12012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12013 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12015 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12016 vos_mem_copy(pMicInd->bssId,
12017 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12018 sizeof(tSirMacAddr));
12019 vos_mem_copy(pMicInd->info.srcMacAddr,
12020 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12021 sizeof(tSirMacAddr));
12022 vos_mem_copy(pMicInd->info.taMacAddr,
12023 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12024 sizeof(tSirMacAddr));
12025 vos_mem_copy(pMicInd->info.dstMacAddr,
12026 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12027 sizeof(tSirMacAddr));
12028 vos_mem_copy(pMicInd->info.rxMacAddr,
12029 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12030 sizeof(tSirMacAddr));
12031 pMicInd->info.multicast =
12032 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12033 pMicInd->info.keyId=
12034 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12035 pMicInd->info.IV1=
12036 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12037 vos_mem_copy(pMicInd->info.TSC,
12038 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012039 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12040 (void *)pMicInd , 0) ;
12041 break ;
12042 }
12043 case WDI_FATAL_ERROR_IND:
12044 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012045 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 /* TODO: Decode Ind and send Ind to PE */
12047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12048 "Received WDI_FATAL_ERROR_IND from WDI ");
12049 break ;
12050 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012051 case WDI_DEL_STA_IND:
12052 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012053 tpDeleteStaContext pDelSTACtx =
12054 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12055
12056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12057 "Received WDI_DEL_STA_IND from WDI ");
12058 if(NULL == pDelSTACtx)
12059 {
12060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012062 break;
12063 }
12064 vos_mem_copy(pDelSTACtx->addr2,
12065 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12066 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012067 vos_mem_copy(pDelSTACtx->bssId,
12068 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12069 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012070 pDelSTACtx->assocId =
12071 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12072 pDelSTACtx->reasonCode =
12073 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12074 pDelSTACtx->staId =
12075 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012076 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12077 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012078 break ;
12079 }
12080 case WDI_COEX_IND:
12081 {
12082 tANI_U32 index;
12083 vos_msg_t vosMsg;
12084 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12085 if(NULL == pSmeCoexInd)
12086 {
12087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012088 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012089 break;
12090 }
12091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12092 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012093 /* Message Header */
12094 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12095 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012096 /* Info from WDI Indication */
12097 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12098 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12099 {
12100 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12101 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012102 /* VOS message wrapper */
12103 vosMsg.type = eWNI_SME_COEX_IND;
12104 vosMsg.bodyptr = (void *)pSmeCoexInd;
12105 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012106 /* Send message to SME */
12107 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12108 {
12109 /* free the mem and return */
12110 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12111 }
12112 else
12113 {
12114 /* DEBUG */
12115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12116 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12117 pSmeCoexInd->coexIndType,
12118 pSmeCoexInd->coexIndData[0],
12119 pSmeCoexInd->coexIndData[1],
12120 pSmeCoexInd->coexIndData[2],
12121 pSmeCoexInd->coexIndData[3]);
12122 }
12123 break;
12124 }
12125 case WDI_TX_COMPLETE_IND:
12126 {
12127 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12128 /* Calling TxCompleteAck Indication from wda context*/
12129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12130 "Complete Indication received from HAL");
12131 if( pWDA->pAckTxCbFunc )
12132 {
12133 if( VOS_STATUS_SUCCESS !=
12134 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12135 {
12136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12137 "Tx Complete timeout Timer Stop Failed ");
12138 }
12139 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12140 pWDA->pAckTxCbFunc = NULL;
12141 }
12142 else
12143 {
12144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12145 "Tx Complete Indication is received after timeout ");
12146 }
12147 break;
12148 }
Viral Modid86bde22012-12-10 13:09:21 -080012149 case WDI_P2P_NOA_START_IND :
12150 {
12151 tSirP2PNoaStart *pP2pNoaStart =
12152 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12153
12154 if (NULL == pP2pNoaStart)
12155 {
12156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12157 "Memory allocation failure, "
12158 "WDI_P2P_NOA_START_IND not forwarded");
12159 break;
12160 }
12161 pP2pNoaStart->status =
12162 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12163 pP2pNoaStart->bssIdx =
12164 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12165 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12166 (void *)pP2pNoaStart , 0) ;
12167 break;
12168 }
12169
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012170#ifdef FEATURE_WLAN_TDLS
12171 case WDI_TDLS_IND :
12172 {
12173 tSirTdlsInd *pTdlsInd =
12174 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12175
12176 if (NULL == pTdlsInd)
12177 {
12178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12179 "Memory allocation failure, "
12180 "WDI_TDLS_IND not forwarded");
12181 break;
12182 }
12183 pTdlsInd->status =
12184 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12185 pTdlsInd->assocId =
12186 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12187 pTdlsInd->staIdx =
12188 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12189 pTdlsInd->reasonCode =
12190 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12191 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12192 (void *)pTdlsInd , 0) ;
12193 break;
12194 }
12195#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012196 case WDI_P2P_NOA_ATTR_IND :
12197 {
12198 tSirP2PNoaAttr *pP2pNoaAttr =
12199 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12201 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012202 if (NULL == pP2pNoaAttr)
12203 {
12204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12205 "Memory allocation failure, "
12206 "WDI_P2P_NOA_ATTR_IND not forwarded");
12207 break;
12208 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012209 pP2pNoaAttr->index =
12210 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12211 pP2pNoaAttr->oppPsFlag =
12212 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12213 pP2pNoaAttr->ctWin =
12214 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12215
12216 pP2pNoaAttr->uNoa1IntervalCnt =
12217 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12218 pP2pNoaAttr->uNoa1Duration =
12219 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12220 pP2pNoaAttr->uNoa1Interval =
12221 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12222 pP2pNoaAttr->uNoa1StartTime =
12223 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 pP2pNoaAttr->uNoa2IntervalCnt =
12225 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12226 pP2pNoaAttr->uNoa2Duration =
12227 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12228 pP2pNoaAttr->uNoa2Interval =
12229 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12230 pP2pNoaAttr->uNoa2StartTime =
12231 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012232 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12233 (void *)pP2pNoaAttr , 0) ;
12234 break;
12235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012236#ifdef FEATURE_WLAN_SCAN_PNO
12237 case WDI_PREF_NETWORK_FOUND_IND:
12238 {
12239 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012240 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12241 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12242 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12243 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12244
Jeff Johnson295189b2012-06-20 16:38:30 -070012245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12246 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 if (NULL == pPrefNetworkFoundInd)
12248 {
12249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12250 "Memory allocation failure, "
12251 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012252 if (NULL !=
12253 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12254 {
12255 wpalMemoryFree(
12256 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12257 );
12258 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012260 break;
12261 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 /* Message Header */
12263 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012264 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012265
12266 /* Info from WDI Indication */
12267 pPrefNetworkFoundInd->ssId.length =
12268 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012269 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012270 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12271 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12272 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012273 if (NULL !=
12274 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12275 {
12276 pPrefNetworkFoundInd->frameLength =
12277 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12278 vos_mem_copy( pPrefNetworkFoundInd->data,
12279 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12280 pPrefNetworkFoundInd->frameLength);
12281 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12282 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12283 }
12284 else
12285 {
12286 pPrefNetworkFoundInd->frameLength = 0;
12287 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012288 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012289 /* VOS message wrapper */
12290 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12291 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12292 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 /* Send message to SME */
12294 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12295 {
12296 /* free the mem and return */
12297 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12298 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012299 break;
12300 }
12301#endif // FEATURE_WLAN_SCAN_PNO
12302
12303#ifdef WLAN_WAKEUP_EVENTS
12304 case WDI_WAKE_REASON_IND:
12305 {
12306 vos_msg_t vosMsg;
12307 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12308 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12309 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12310
12311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12312 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12313 wdiLowLevelInd->wdiIndicationType,
12314 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12315 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12316 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12317
12318 if (NULL == pWakeReasonInd)
12319 {
12320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12321 "Memory allocation failure, "
12322 "WDI_WAKE_REASON_IND not forwarded");
12323 break;
12324 }
12325
12326 vos_mem_zero(pWakeReasonInd, allocSize);
12327
12328 /* Message Header */
12329 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12330 pWakeReasonInd->mesgLen = allocSize;
12331
12332 /* Info from WDI Indication */
12333 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12334 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12335 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12336 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12337 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12338 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12339 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12340 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12341
12342 /* VOS message wrapper */
12343 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12344 vosMsg.bodyptr = (void *) pWakeReasonInd;
12345 vosMsg.bodyval = 0;
12346
12347 /* Send message to SME */
12348 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12349 {
12350 /* free the mem and return */
12351 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12352 }
12353
12354 break;
12355 }
12356#endif // WLAN_WAKEUP_EVENTS
12357
12358 case WDI_TX_PER_HIT_IND:
12359 {
12360 vos_msg_t vosMsg;
12361 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12362 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12363 /* VOS message wrapper */
12364 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12365 vosMsg.bodyptr = NULL;
12366 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 /* Send message to SME */
12368 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12369 {
12370 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12371 }
12372 break;
12373 }
12374
Leo Chang9056f462013-08-01 19:21:11 -070012375#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012376 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012377 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012378 vos_msg_t vosMsg;
12379 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012380
Leo Changd9df8aa2013-09-26 13:32:26 -070012381 lphbInd =
12382 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12383 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012384 {
12385 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12386 "%s: LPHB IND buffer alloc Fail", __func__);
12387 return ;
12388 }
12389
Leo Changd9df8aa2013-09-26 13:32:26 -070012390 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012391 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012392 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012393 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012394 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012395 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12396
12397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012398 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012399 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12400
Leo Changd9df8aa2013-09-26 13:32:26 -070012401 vosMsg.type = eWNI_SME_LPHB_IND;
12402 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012403 vosMsg.bodyval = 0;
12404 /* Send message to SME */
12405 if (VOS_STATUS_SUCCESS !=
12406 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12407 {
12408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12409 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012410 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012411 }
12412 break;
12413 }
12414#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012415 case WDI_PERIODIC_TX_PTRN_FW_IND:
12416 {
12417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12418 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12419 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12420 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12421 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12422 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12423 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12424
12425 break;
12426 }
Leo Chang9056f462013-08-01 19:21:11 -070012427
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012428 case WDI_IBSS_PEER_INACTIVITY_IND:
12429 {
12430 tSirIbssPeerInactivityInd *pIbssInd =
12431 (tSirIbssPeerInactivityInd *)
12432 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12433
12434 if (NULL == pIbssInd)
12435 {
12436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12437 "Memory allocation failure, "
12438 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12439 break;
12440 }
12441
12442 pIbssInd->bssIdx =
12443 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12444 pIbssInd->staIdx =
12445 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12446 vos_mem_copy(pIbssInd->peerAddr,
12447 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12448 sizeof(tSirMacAddr));
12449 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12450 break;
12451 }
12452
Rajeev79dbe4c2013-10-05 11:03:42 +053012453#ifdef FEATURE_WLAN_BATCH_SCAN
12454 case WDI_BATCH_SCAN_RESULT_IND:
12455 {
12456 void *pBatchScanResult;
12457 void *pCallbackContext;
12458 tpAniSirGlobal pMac;
12459
12460 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12461 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12462
12463 /*sanity check*/
12464 if(NULL == pWDA)
12465 {
12466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12467 "%s:pWDA is NULL", __func__);
12468 VOS_ASSERT(0);
12469 return;
12470 }
12471
12472 pBatchScanResult =
12473 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12474 if (NULL == pBatchScanResult)
12475 {
12476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12477 "%s:Batch scan result from FW is null can't invoke HDD callback",
12478 __func__);
12479 VOS_ASSERT(0);
12480 return;
12481 }
12482
12483 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12484 if (NULL == pMac)
12485 {
12486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12487 "%s:pMac is NULL", __func__);
12488 VOS_ASSERT(0);
12489 return;
12490 }
12491
12492 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12493 /*call hdd callback with set batch scan response data*/
12494 if(pMac->pmc.batchScanResultCallback)
12495 {
12496 pMac->pmc.batchScanResultCallback(pCallbackContext,
12497 pBatchScanResult);
12498 }
12499 else
12500 {
12501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12502 "%s:HDD callback is null", __func__);
12503 VOS_ASSERT(0);
12504 }
12505 break;
12506 }
12507#endif
12508
Jeff Johnson295189b2012-06-20 16:38:30 -070012509 default:
12510 {
12511 /* TODO error */
12512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12513 "Received UNKNOWN Indication from WDI ");
12514 }
12515 }
12516 return ;
12517}
12518
Jeff Johnson295189b2012-06-20 16:38:30 -070012519/*
12520 * BA related processing in WDA.
12521 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012522void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12523 void* pUserData)
12524{
12525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12526 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 if(NULL == pWdaParams)
12528 {
12529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012531 VOS_ASSERT(0) ;
12532 return ;
12533 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012535 vos_mem_free(pWdaParams->wdaMsgParam) ;
12536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12537 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012539 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12541 {
12542 tANI_U8 i = 0 ;
12543 tBaActivityInd *baActivityInd = NULL ;
12544 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12545 tANI_U8 allocSize = sizeof(tBaActivityInd)
12546 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12547 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12548 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012549 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012550 if(NULL == baActivityInd)
12551 {
12552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012554 VOS_ASSERT(0) ;
12555 return;
12556 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012557 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12558 sizeof(tSirMacAddr)) ;
12559 baActivityInd->baCandidateCnt = baCandidateCount ;
12560
12561 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12562 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12563
12564 for(i = 0 ; i < baCandidateCount ; i++)
12565 {
12566 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12568 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012569 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12570 {
12571 baCandidate->baInfo[tid].fBaEnable =
12572 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12573 baCandidate->baInfo[tid].startingSeqNum =
12574 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12575 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012576 wdiBaCandidate++ ;
12577 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12580 }
12581 else
12582 {
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12584 "BA Trigger RSP with Failure received ");
12585 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012586 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012587}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012588
12589
12590/*
12591 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12592 * during MCC
12593 */
12594void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12595{
12596 wpt_uint32 enabled;
12597 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12598 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12599 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12600
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012601 if (NULL == pMac )
12602 {
12603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12604 "%s: Invoked with invalid MAC context ", __func__ );
12605 VOS_ASSERT(0);
12606 return;
12607 }
12608
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012609 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12610 != eSIR_SUCCESS)
12611 {
12612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12613 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12614 return;
12615 }
12616
12617 if(!enabled)
12618 {
12619 return;
12620 }
12621
12622 if(NULL == pWDA)
12623 {
12624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12625 "%s:WDA context is NULL", __func__);
12626 VOS_ASSERT(0);
12627 return;
12628 }
12629
12630 if(activate)
12631 {
12632 if( VOS_STATUS_SUCCESS !=
12633 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12634 {
12635 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12636 "Traffic Stats Timer Start Failed ");
12637 return;
12638 }
12639 WDI_DS_ActivateTrafficStats();
12640 }
12641 else
12642 {
12643 WDI_DS_DeactivateTrafficStats();
12644 WDI_DS_ClearTrafficStats();
12645
12646 if( VOS_STATUS_SUCCESS !=
12647 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12648 {
12649 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12650 "Traffic Stats Timer Stop Failed ");
12651 return;
12652 }
12653 }
12654}
12655
12656/*
12657 * Traffic Stats Timer handler
12658 */
12659void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12660{
12661 WDI_Status wdiStatus;
12662 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12663 WDI_TrafficStatsIndType trafficStatsIndParams;
12664 wpt_uint32 length, enabled;
12665 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12666
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012667 if (NULL == pMac )
12668 {
12669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12670 "%s: Invoked with invalid MAC context ", __func__ );
12671 VOS_ASSERT(0);
12672 return;
12673 }
12674
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012675 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12676 != eSIR_SUCCESS)
12677 {
12678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12679 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12680 return;
12681 }
12682
12683 if(!enabled)
12684 {
12685 WDI_DS_DeactivateTrafficStats();
12686 return;
12687 }
12688
12689 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12690
12691 if(pWdiTrafficStats != NULL)
12692 {
12693 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12694 trafficStatsIndParams.length = length;
12695 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012696 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012697 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12698 trafficStatsIndParams.pUserData = pWDA;
12699
12700 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12701
12702 if(WDI_STATUS_PENDING == wdiStatus)
12703 {
12704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12705 "Pending received for %s:%d ",__func__,__LINE__ );
12706 }
12707 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12708 {
12709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12710 "Failure in %s:%d ",__func__,__LINE__ );
12711 }
12712
12713 WDI_DS_ClearTrafficStats();
12714 }
12715 else
12716 {
12717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12718 "pWdiTrafficStats is Null");
12719 }
12720
12721 if( VOS_STATUS_SUCCESS !=
12722 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12723 {
12724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12725 "Traffic Stats Timer Start Failed ");
12726 return;
12727 }
12728}
12729
Jeff Johnson295189b2012-06-20 16:38:30 -070012730/*
12731 * BA Activity check timer handler
12732 */
12733void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12734{
12735 tANI_U8 curSta = 0 ;
12736 tANI_U8 tid = 0 ;
12737 tANI_U8 size = 0 ;
12738 tANI_U8 baCandidateCount = 0 ;
12739 tANI_U8 newBaCandidate = 0 ;
12740 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12741
12742 if(NULL == pWDA)
12743 {
12744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012745 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012746 VOS_ASSERT(0);
12747 return ;
12748 }
12749 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12750 {
12751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12752 "Inconsistent STA entries in WDA");
12753 VOS_ASSERT(0) ;
12754 }
12755 /* walk through all STA entries and find out TX packet count */
12756 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12757 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012758#ifdef WLAN_SOFTAP_VSTA_FEATURE
12759 // We can only do BA on "hard" STAs.
12760 if (!(IS_HWSTA_IDX(curSta)))
12761 {
12762 continue;
12763 }
12764#endif //WLAN_SOFTAP_VSTA_FEATURE
12765 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12766 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012767 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012768 tANI_U32 txPktCount = 0 ;
12769 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012770 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012771 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12772 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012773 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12774 curSta, tid, &txPktCount)))
12775 {
12776#if 0
12777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12778 "************* %d:%d, %d ",curSta, txPktCount,
12779 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12780#endif
12781 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012782 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012783 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12784 curSta, tid)))
12785 {
12786 /* get prepare for sending message to HAL */
12787 //baCandidate[baCandidateCount].staIdx = curSta ;
12788 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12789 newBaCandidate = WDA_ENABLE_BA ;
12790 }
12791 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12792 }
12793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012794 /* fill the entry for all the sta with given TID's */
12795 if(WDA_ENABLE_BA == newBaCandidate)
12796 {
12797 /* move to next BA candidate */
12798 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12799 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12800 baCandidateCount++ ;
12801 newBaCandidate = WDA_DISABLE_BA ;
12802 }
12803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012804 /* prepare and send message to hal */
12805 if( 0 < baCandidateCount)
12806 {
12807 WDI_Status status = WDI_STATUS_SUCCESS ;
12808 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12809 tWDA_ReqParams *pWdaParams =
12810 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012811 if(NULL == pWdaParams)
12812 {
12813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012814 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012815 VOS_ASSERT(0) ;
12816 return;
12817 }
12818 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12819 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12820 if(NULL == wdiTriggerBaReq)
12821 {
12822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012824 VOS_ASSERT(0) ;
12825 vos_mem_free(pWdaParams);
12826 return;
12827 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012828 do
12829 {
12830 WDI_TriggerBAReqinfoType *triggerBaInfo =
12831 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12832 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12833 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12834 * for each request */
12835 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12836 triggerBaInfo->ucBASessionID = 0;
12837 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12838 } while(0) ;
12839 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012842 pWdaParams->pWdaContext = pWDA;
12843 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12844 pWdaParams->wdaMsgParam = NULL;
12845 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12846 WDA_TriggerBaReqCallback, pWdaParams) ;
12847 if(IS_WDI_STATUS_FAILURE(status))
12848 {
12849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12850 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12851 vos_mem_free(pWdaParams->wdaMsgParam) ;
12852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12853 vos_mem_free(pWdaParams) ;
12854 }
12855 }
12856 else
12857 {
12858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12859 "There is no TID for initiating BA");
12860 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012861 if( VOS_STATUS_SUCCESS !=
12862 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12863 {
12864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12865 "BA Activity Timer Stop Failed ");
12866 return ;
12867 }
12868 if( VOS_STATUS_SUCCESS !=
12869 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12870 {
12871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12872 "BA Activity Timer Start Failed ");
12873 return;
12874 }
12875 return ;
12876}
Jeff Johnson295189b2012-06-20 16:38:30 -070012877/*
12878 * WDA common routine to create timer used by WDA.
12879 */
12880static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12881{
Jeff Johnson295189b2012-06-20 16:38:30 -070012882 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12883 tANI_U32 val = 0 ;
12884 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12885
12886 if(NULL == pMac)
12887 {
12888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012889 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012890 VOS_ASSERT(0);
12891 return VOS_STATUS_E_FAILURE;
12892 }
12893 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12894 != eSIR_SUCCESS)
12895 {
12896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12897 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12898 return VOS_STATUS_E_FAILURE;
12899 }
12900 val = SYS_MS_TO_TICKS(val) ;
12901
12902 /* BA activity check timer */
12903 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12904 "BA Activity Check timer", WDA_TimerHandler,
12905 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12906 if(status != TX_SUCCESS)
12907 {
12908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12909 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012910 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012912 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012913 /* Tx Complete Timeout timer */
12914 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12915 "Tx Complete Check timer", WDA_TimerHandler,
12916 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 if(status != TX_SUCCESS)
12918 {
12919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12920 "Unable to create Tx Complete Timeout timer");
12921 /* Destroy timer of BA activity check timer */
12922 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12923 if(status != TX_SUCCESS)
12924 {
12925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12926 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012927 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012928 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012929 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012930 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012931
12932 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12933
12934 /* Traffic Stats timer */
12935 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12936 "Traffic Stats timer", WDA_TimerHandler,
12937 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12938 if(status != TX_SUCCESS)
12939 {
12940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12941 "Unable to create traffic stats timer");
12942 /* Destroy timer of BA activity check timer */
12943 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12944 if(status != TX_SUCCESS)
12945 {
12946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12947 "Unable to Destroy BA activity timer");
12948 }
12949 /* Destroy timer of tx complete timer */
12950 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12951 if(status != TX_SUCCESS)
12952 {
12953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12954 "Unable to Tx complete timer");
12955 }
12956 return VOS_STATUS_E_FAILURE ;
12957 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012958 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012959}
Jeff Johnson295189b2012-06-20 16:38:30 -070012960/*
12961 * WDA common routine to destroy timer used by WDA.
12962 */
12963static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12964{
12965 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012966 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12967 if(status != TX_SUCCESS)
12968 {
12969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12970 "Unable to Destroy Tx Complete Timeout timer");
12971 return eSIR_FAILURE ;
12972 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12974 if(status != TX_SUCCESS)
12975 {
12976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12977 "Unable to Destroy BA activity timer");
12978 return eSIR_FAILURE ;
12979 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012980 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12981 if(status != TX_SUCCESS)
12982 {
12983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12984 "Unable to Destroy traffic stats timer");
12985 return eSIR_FAILURE ;
12986 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012987 return eSIR_SUCCESS ;
12988}
Jeff Johnson295189b2012-06-20 16:38:30 -070012989/*
12990 * WDA timer handler.
12991 */
12992void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12993{
12994 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12995 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012996 /*
12997 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12998 */
12999 wdaMsg.type = timerInfo ;
13000 wdaMsg.bodyptr = NULL;
13001 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013002 /* post the message.. */
13003 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13004 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13005 {
13006 vosStatus = VOS_STATUS_E_BADMSG;
13007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013008}
Jeff Johnson295189b2012-06-20 16:38:30 -070013009/*
13010 * WDA Tx Complete timeout Indication.
13011 */
13012void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13013{
13014 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013015 if( pWDA->pAckTxCbFunc )
13016 {
13017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13018 "TxComplete timer expired\n");
13019 pWDA->pAckTxCbFunc( pMac, 0);
13020 pWDA->pAckTxCbFunc = NULL;
13021 }
13022 else
13023 {
13024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13025 "There is no request pending for TxComplete and wait timer expired\n");
13026 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013027}
Jeff Johnson295189b2012-06-20 16:38:30 -070013028/*
13029 * WDA Set REG Domain to VOS NV
13030 */
13031eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
13032{
13033 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
13034 {
13035 return eHAL_STATUS_INVALID_PARAMETER;
13036 }
13037 return eHAL_STATUS_SUCCESS;
13038}
Jeff Johnson295189b2012-06-20 16:38:30 -070013039
Jeff Johnson295189b2012-06-20 16:38:30 -070013040#ifdef FEATURE_WLAN_SCAN_PNO
13041/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013042 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013043 *
13044 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013045void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013046{
13047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013049 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013050 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013051 {
13052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013053 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 VOS_ASSERT(0) ;
13055 return ;
13056 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013057
Yue Ma7f44bbe2013-04-12 11:47:39 -070013058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13059 vos_mem_free(pWdaParams->wdaMsgParam);
13060 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013061
13062 return ;
13063}
Jeff Johnson295189b2012-06-20 16:38:30 -070013064/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013065 * FUNCTION: WDA_PNOScanReqCallback
13066 * Free memory.
13067 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13068 */
13069void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013070{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13072
13073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13074 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13075
13076 if(NULL == pWdaParams)
13077 {
13078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13079 "%s: pWdaParams received NULL", __func__);
13080 VOS_ASSERT(0);
13081 return;
13082 }
13083
13084 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13085 {
13086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13087 vos_mem_free(pWdaParams->wdaMsgParam);
13088 vos_mem_free(pWdaParams);
13089 }
13090
13091 return;
13092}
13093/*
13094 * FUNCTION: WDA_UpdateScanParamsRespCallback
13095 *
13096 */
13097void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13098{
13099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013101 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013102 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 {
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013105 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013106 VOS_ASSERT(0) ;
13107 return ;
13108 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013109
13110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13111 vos_mem_free(pWdaParams->wdaMsgParam);
13112 vos_mem_free(pWdaParams);
13113
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 return ;
13115}
Jeff Johnson295189b2012-06-20 16:38:30 -070013116/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013117 * FUNCTION: WDA_UpdateScanParamsReqCallback
13118 * Free memory.
13119 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13120 */
13121void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13122{
13123 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13124
13125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13126 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13127
13128 if(NULL == pWdaParams)
13129 {
13130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13131 "%s: pWdaParams received NULL", __func__);
13132 VOS_ASSERT(0);
13133 return;
13134 }
13135
13136 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13137 {
13138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13139 vos_mem_free(pWdaParams->wdaMsgParam);
13140 vos_mem_free(pWdaParams);
13141 }
13142
13143 return;
13144}
13145/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013146 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13147 * Request to WDI to set Preferred Network List.Offload
13148 */
13149VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13150 tSirPNOScanReq *pPNOScanReqParams)
13151{
Jeff Johnson43971f52012-07-17 12:26:56 -070013152 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13154 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13155 tWDA_ReqParams *pWdaParams ;
13156 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013158 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 if(NULL == pwdiPNOScanReqInfo)
13160 {
13161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013162 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013163 VOS_ASSERT(0);
13164 return VOS_STATUS_E_NOMEM;
13165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13167 if(NULL == pWdaParams)
13168 {
13169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 VOS_ASSERT(0);
13172 vos_mem_free(pwdiPNOScanReqInfo);
13173 return VOS_STATUS_E_NOMEM;
13174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 //
13176 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13177 //
13178 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13179 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013180 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13181 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13182 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013183 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13184 {
13185 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13186 &pPNOScanReqParams->aNetworks[i],
13187 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13188 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013189 /*Scan timer intervals*/
13190 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13191 &pPNOScanReqParams->scanTimers,
13192 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 /*Probe template for 2.4GHz band*/
13194 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13195 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13196 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13198 pPNOScanReqParams->p24GProbeTemplate,
13199 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013200 /*Probe template for 5GHz band*/
13201 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13202 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13203 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13205 pPNOScanReqParams->p5GProbeTemplate,
13206 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013207 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13208 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013209
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 /* Store Params pass it to WDI */
13211 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13212 pWdaParams->pWdaContext = pWDA;
13213 /* Store param pointer as passed in by caller */
13214 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013215 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013216 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013217 if(IS_WDI_STATUS_FAILURE(status))
13218 {
13219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13220 "Failure in Set PNO REQ WDI API, free all the memory " );
13221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13222 vos_mem_free(pWdaParams->wdaMsgParam);
13223 pWdaParams->wdaWdiApiMsgParam = NULL;
13224 pWdaParams->wdaMsgParam = NULL;
13225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 return CONVERT_WDI2VOS_STATUS(status) ;
13227}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013228
13229#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13230
13231void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13232{
13233 /*Convert the CSR Auth types to WDI Auth types */
13234 switch (csrAuthType)
13235 {
13236 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13237 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13238 break;
13239#ifdef FEATURE_WLAN_CCX
13240 case eCSR_AUTH_TYPE_CCKM_WPA:
13241 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13242 break;
13243#endif
13244 case eCSR_AUTH_TYPE_WPA:
13245 *AuthType = eWDA_AUTH_TYPE_WPA;
13246 break;
13247 case eCSR_AUTH_TYPE_WPA_PSK:
13248 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13249 break;
13250#ifdef FEATURE_WLAN_CCX
13251 case eCSR_AUTH_TYPE_CCKM_RSN:
13252 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13253 break;
13254#endif
13255 case eCSR_AUTH_TYPE_RSN:
13256 *AuthType = eWDA_AUTH_TYPE_RSN;
13257 break;
13258 case eCSR_AUTH_TYPE_RSN_PSK:
13259 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13260 break;
13261#if defined WLAN_FEATURE_VOWIFI_11R
13262 case eCSR_AUTH_TYPE_FT_RSN:
13263 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13264 break;
13265 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13266 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13267 break;
13268#endif
13269#ifdef FEATURE_WLAN_WAPI
13270 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13271 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13272 break;
13273 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13274 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13275 break;
13276#endif /* FEATURE_WLAN_WAPI */
13277 case eCSR_AUTH_TYPE_SHARED_KEY:
13278 case eCSR_AUTH_TYPE_AUTOSWITCH:
13279 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13280 break;
13281#if 0
13282 case eCSR_AUTH_TYPE_SHARED_KEY:
13283 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13284 break;
13285 case eCSR_AUTH_TYPE_AUTOSWITCH:
13286 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13287#endif
13288 default:
13289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13290 "%s: Unknown Auth Type", __func__);
13291 break;
13292 }
13293}
13294void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13295{
13296 switch (csrEncrType)
13297 {
13298 case eCSR_ENCRYPT_TYPE_NONE:
13299 *EncrType = WDI_ED_NONE;
13300 break;
13301 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13302 case eCSR_ENCRYPT_TYPE_WEP40:
13303 *EncrType = WDI_ED_WEP40;
13304 break;
13305 case eCSR_ENCRYPT_TYPE_WEP104:
13306 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13307 *EncrType = WDI_ED_WEP104;
13308 break;
13309 case eCSR_ENCRYPT_TYPE_TKIP:
13310 *EncrType = WDI_ED_TKIP;
13311 break;
13312 case eCSR_ENCRYPT_TYPE_AES:
13313 *EncrType = WDI_ED_CCMP;
13314 break;
13315#ifdef WLAN_FEATURE_11W
13316 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13317 *EncrType = WDI_ED_AES_128_CMAC;
13318 break;
13319#endif
13320#ifdef FEATURE_WLAN_WAPI
13321 case eCSR_ENCRYPT_TYPE_WPI:
13322 *EncrType = WDI_ED_WPI;
13323 break;
13324#endif
13325 case eCSR_ENCRYPT_TYPE_ANY:
13326 *EncrType = WDI_ED_ANY;
13327 break;
13328
13329 default:
13330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13331 "%s: Unknown Encryption Type", __func__);
13332 break;
13333 }
13334}
13335
13336/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013337 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013338 * Request to WDI to set Roam Offload Scan
13339 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013340VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013341 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13342{
13343 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013344 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13345 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013346 tWDA_ReqParams *pWdaParams ;
13347 v_U8_t csrAuthType;
13348 WDI_RoamNetworkType *pwdiRoamNetworkType;
13349 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13351 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013352 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013353 {
13354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13355 "%s: VOS MEM Alloc Failure", __func__);
13356 VOS_ASSERT(0);
13357 return VOS_STATUS_E_NOMEM;
13358 }
13359 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13360 if (NULL == pWdaParams)
13361 {
13362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13363 "%s: VOS MEM Alloc Failure", __func__);
13364 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013365 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013366 return VOS_STATUS_E_NOMEM;
13367 }
13368
13369 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013370 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013371 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013372 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13373 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013374 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13375 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13376 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13377 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13378 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13379 sizeof(pwdiRoamNetworkType->currAPbssid));
13380 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13381 csrAuthType);
13382 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13383 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13384 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13385 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13386 pwdiRoamOffloadScanInfo->LookupThreshold =
13387 pRoamOffloadScanReqParams->LookupThreshold ;
13388 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13389 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013390 pwdiRoamOffloadScanInfo->MAWCEnabled =
13391 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013392 pwdiRoamOffloadScanInfo->Command =
13393 pRoamOffloadScanReqParams->Command ;
13394 pwdiRoamOffloadScanInfo->StartScanReason =
13395 pRoamOffloadScanReqParams->StartScanReason ;
13396 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13397 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13398 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13399 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13400 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13401 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13402 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13403 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13404 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13405 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13406 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13407 pRoamOffloadScanReqParams->IsCCXEnabled ;
13408 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13409 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13410 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13411 pwdiRoamNetworkType->ssId.ucLength =
13412 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13413 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13414 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13415 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13416 pwdiRoamNetworkType->ChannelCount =
13417 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13418 pwdiRoamOffloadScanInfo->ChannelCacheType =
13419 pRoamOffloadScanReqParams->ChannelCacheType;
13420 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13421 pRoamOffloadScanReqParams->ValidChannelList,
13422 pRoamOffloadScanReqParams->ValidChannelCount);
13423 pwdiRoamOffloadScanInfo->ValidChannelCount =
13424 pRoamOffloadScanReqParams->ValidChannelCount;
13425 pwdiRoamOffloadScanInfo->us24GProbeSize =
13426 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13427 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13428 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13429 pRoamOffloadScanReqParams->p24GProbeTemplate,
13430 pwdiRoamOffloadScanInfo->us24GProbeSize);
13431 pwdiRoamOffloadScanInfo->us5GProbeSize =
13432 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13433 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13434 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13435 pRoamOffloadScanReqParams->p5GProbeTemplate,
13436 pwdiRoamOffloadScanInfo->us5GProbeSize);
13437 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13438 pRoamOffloadScanReqParams->MDID.mdiePresent;
13439 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13440 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013441 pwdiRoamOffloadScanInfo->nProbes =
13442 pRoamOffloadScanReqParams->nProbes;
13443 pwdiRoamOffloadScanInfo->HomeAwayTime =
13444 pRoamOffloadScanReqParams->HomeAwayTime;
13445 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013446 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013447 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013448 pWdaParams->pWdaContext = pWDA;
13449 /* Store param pointer as passed in by caller */
13450 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013451 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013452 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13453 if(IS_WDI_STATUS_FAILURE(status))
13454 {
13455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13456 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13458 vos_mem_free(pWdaParams->wdaMsgParam);
13459 pWdaParams->wdaWdiApiMsgParam = NULL;
13460 pWdaParams->wdaMsgParam = NULL;
13461 }
13462 return CONVERT_WDI2VOS_STATUS(status) ;
13463}
13464#endif
13465
Jeff Johnson295189b2012-06-20 16:38:30 -070013466/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013467 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 *
13469 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013470void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013471{
13472 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13473
13474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013475 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013476
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013477 if(NULL == pWdaParams)
13478 {
13479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013480 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013481 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013482 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013483 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013484
Jeff Johnson295189b2012-06-20 16:38:30 -070013485 vos_mem_free(pWdaParams->wdaMsgParam) ;
13486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13487 vos_mem_free(pWdaParams) ;
13488
13489 return ;
13490}
13491/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013492 * FUNCTION: WDA_RssiFilterReqCallback
13493 * Free memory.
13494 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13495 */
13496void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13497{
13498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13499
13500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13501 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13502
13503 if(NULL == pWdaParams)
13504 {
13505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13506 "%s: pWdaParams received NULL", __func__);
13507 VOS_ASSERT(0);
13508 return;
13509 }
13510
13511 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13512 {
13513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13514 vos_mem_free(pWdaParams->wdaMsgParam);
13515 vos_mem_free(pWdaParams);
13516 }
13517
13518 return;
13519}
13520/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013521 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13522 * Request to WDI to set Preferred Network List.Offload
13523 */
13524VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13525 tSirSetRSSIFilterReq* pRssiFilterParams)
13526{
Jeff Johnson43971f52012-07-17 12:26:56 -070013527 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013528 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13529 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13530 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013532 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013533 if(NULL == pwdiSetRssiFilterReqInfo)
13534 {
13535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 VOS_ASSERT(0);
13538 return VOS_STATUS_E_NOMEM;
13539 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13541 if(NULL == pWdaParams)
13542 {
13543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 VOS_ASSERT(0);
13546 vos_mem_free(pwdiSetRssiFilterReqInfo);
13547 return VOS_STATUS_E_NOMEM;
13548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013549 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013550 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13551 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013552
Jeff Johnson295189b2012-06-20 16:38:30 -070013553 /* Store Params pass it to WDI */
13554 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13555 pWdaParams->pWdaContext = pWDA;
13556 /* Store param pointer as passed in by caller */
13557 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013558 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013559 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013560 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013561 if(IS_WDI_STATUS_FAILURE(status))
13562 {
13563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13564 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13566 vos_mem_free(pWdaParams->wdaMsgParam);
13567 pWdaParams->wdaWdiApiMsgParam = NULL;
13568 pWdaParams->wdaMsgParam = NULL;
13569 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013570 return CONVERT_WDI2VOS_STATUS(status) ;
13571}
13572
Jeff Johnson295189b2012-06-20 16:38:30 -070013573/*
13574 * FUNCTION: WDA_ProcessUpdateScanParams
13575 * Request to WDI to update Scan Parameters
13576 */
13577VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13578 tSirUpdateScanParams *pUpdateScanParams)
13579{
Jeff Johnson43971f52012-07-17 12:26:56 -070013580 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013581 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13582 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13583 sizeof(WDI_UpdateScanParamsInfoType)) ;
13584 tWDA_ReqParams *pWdaParams ;
13585 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013587 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013588 if(NULL == wdiUpdateScanParamsInfoType)
13589 {
13590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013591 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013592 VOS_ASSERT(0);
13593 return VOS_STATUS_E_NOMEM;
13594 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13596 if ( NULL == pWdaParams )
13597 {
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013600 VOS_ASSERT(0);
13601 vos_mem_free(wdiUpdateScanParamsInfoType);
13602 return VOS_STATUS_E_NOMEM;
13603 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013604 //
13605 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13606 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13608 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13609 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13610 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
13611 "sir struct %d wdi struct %d",
13612 pUpdateScanParams->b11dEnabled,
13613 pUpdateScanParams->b11dResolved,
13614 pUpdateScanParams->ucChannelCount,
13615 pUpdateScanParams->usPassiveMinChTime,
13616 pUpdateScanParams->usPassiveMaxChTime,
13617 pUpdateScanParams->usActiveMinChTime,
13618 pUpdateScanParams->usActiveMaxChTime,
13619 sizeof(tSirUpdateScanParams),
13620 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13621
Jeff Johnson295189b2012-06-20 16:38:30 -070013622 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13623 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013624 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13625 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013626 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13627 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013628 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13629 pUpdateScanParams->usActiveMaxChTime;
13630 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13631 pUpdateScanParams->usActiveMinChTime;
13632 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13633 pUpdateScanParams->usPassiveMaxChTime;
13634 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13635 pUpdateScanParams->usPassiveMinChTime;
13636
Jeff Johnson295189b2012-06-20 16:38:30 -070013637 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013638 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13639 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013640
Jeff Johnson295189b2012-06-20 16:38:30 -070013641 for ( i = 0; i <
13642 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13643 i++)
13644 {
13645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13646 "Update Scan Parameters channel: %d",
13647 pUpdateScanParams->aChannels[i]);
13648
13649 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13650 pUpdateScanParams->aChannels[i];
13651 }
13652
Yue Ma7f44bbe2013-04-12 11:47:39 -070013653 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13654 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013655
Jeff Johnson295189b2012-06-20 16:38:30 -070013656 /* Store Params pass it to WDI */
13657 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13658 pWdaParams->pWdaContext = pWDA;
13659 /* Store param pointer as passed in by caller */
13660 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013661
Jeff Johnson295189b2012-06-20 16:38:30 -070013662
13663
13664 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013665 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013666 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013667 if(IS_WDI_STATUS_FAILURE(status))
13668 {
13669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13670 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13672 vos_mem_free(pWdaParams->wdaMsgParam);
13673 vos_mem_free(pWdaParams);
13674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013675 return CONVERT_WDI2VOS_STATUS(status) ;
13676}
13677#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013678
13679#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13680/*
13681 * FUNCTION: WDA_RoamOffloadScanReqCallback
13682 *
13683 */
13684void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13685{
13686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013687 vos_msg_t vosMsg;
13688 wpt_uint8 reason = 0;
13689
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013691 "<------ %s " ,__func__);
13692 if (NULL == pWdaParams)
13693 {
13694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13695 "%s: pWdaParams received NULL", __func__);
13696 VOS_ASSERT(0) ;
13697 return ;
13698 }
13699 if ( pWdaParams != NULL )
13700 {
13701 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13702 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013703 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13705 }
13706 if ( pWdaParams->wdaMsgParam != NULL)
13707 {
13708 vos_mem_free(pWdaParams->wdaMsgParam);
13709 }
13710
13711 vos_mem_free(pWdaParams) ;
13712 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013713 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13714 vosMsg.bodyptr = NULL;
13715 if (WDI_STATUS_SUCCESS != status)
13716 {
13717 reason = 0;
13718 }
13719 vosMsg.bodyval = reason;
13720 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13721 {
13722 /* free the mem and return */
13723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070013724 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013725 }
13726
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013727 return ;
13728}
13729#endif
13730
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013731/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013732 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013733 *
13734 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013735void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013736{
13737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13738
13739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13740 "<------ %s " ,__func__);
13741
13742 if(NULL == pWdaParams)
13743 {
13744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13745 "%s: pWdaParams received NULL", __func__);
13746 VOS_ASSERT(0);
13747 return;
13748 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013749
13750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13751 vos_mem_free(pWdaParams->wdaMsgParam);
13752 vos_mem_free(pWdaParams);
13753
13754 return;
13755}
13756/*
13757 * FUNCTION: WDA_SetPowerParamsReqCallback
13758 * Free memory.
13759 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13760 */
13761void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13762{
13763 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13764
13765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13766 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13767
13768 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013769 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13771 "%s: pWdaParams received NULL", __func__);
13772 VOS_ASSERT(0);
13773 return;
13774 }
13775
13776 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13777 {
13778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13779 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013780 vos_mem_free(pWdaParams);
13781 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013782
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013783 return;
13784}
13785
Jeff Johnson295189b2012-06-20 16:38:30 -070013786#ifdef WLAN_FEATURE_PACKET_FILTERING
13787/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013788 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 *
13790 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013791void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013792 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13793 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013794{
13795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013797 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013798 if(NULL == pWdaParams)
13799 {
13800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013801 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013802 VOS_ASSERT(0) ;
13803 return ;
13804 }
13805
13806 vos_mem_free(pWdaParams->wdaMsgParam) ;
13807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13808 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 //print a msg, nothing else to do
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013811 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013812 return ;
13813}
Jeff Johnson295189b2012-06-20 16:38:30 -070013814/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013815 * FUNCTION: WDA_8023MulticastListReqCallback
13816 * Free memory.
13817 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13818 */
13819void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13820{
13821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13822
13823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13824 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13825
13826 if(NULL == pWdaParams)
13827 {
13828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13829 "%s: pWdaParams received NULL", __func__);
13830 VOS_ASSERT(0);
13831 return;
13832 }
13833
13834 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13835 {
13836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13837 vos_mem_free(pWdaParams->wdaMsgParam);
13838 vos_mem_free(pWdaParams);
13839 }
13840
13841 return;
13842}
13843/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013844 * FUNCTION: WDA_Process8023MulticastListReq
13845 * Request to WDI to add 8023 Multicast List
13846 */
13847VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13848 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13849{
Jeff Johnson43971f52012-07-17 12:26:56 -070013850 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013851 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13852 tWDA_ReqParams *pWdaParams ;
13853 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 pwdiFltPktSetMcListReqParamsType =
13857 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13858 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13859 ) ;
13860 if(NULL == pwdiFltPktSetMcListReqParamsType)
13861 {
13862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013863 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013864 return VOS_STATUS_E_NOMEM;
13865 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013866 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13867 if(NULL == pWdaParams)
13868 {
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013870 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013871 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13872 return VOS_STATUS_E_NOMEM;
13873 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013874
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 //
13876 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13877 //
13878 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013879 pRcvFltMcAddrList->ulMulticastAddrCnt;
13880
13881 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13882 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13883 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13884 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13885
Jeff Johnson295189b2012-06-20 16:38:30 -070013886 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13887 {
13888 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13889 &(pRcvFltMcAddrList->multicastAddr[i]),
13890 sizeof(tSirMacAddr));
13891 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013892 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13893 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013894
Jeff Johnson295189b2012-06-20 16:38:30 -070013895 /* Store Params pass it to WDI */
13896 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13897 pWdaParams->pWdaContext = pWDA;
13898 /* Store param pointer as passed in by caller */
13899 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013900 status = WDI_8023MulticastListReq(
13901 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013902 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013903 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013904 if(IS_WDI_STATUS_FAILURE(status))
13905 {
13906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13907 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13908 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13909 vos_mem_free(pWdaParams->wdaMsgParam);
13910 vos_mem_free(pWdaParams);
13911 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013912 return CONVERT_WDI2VOS_STATUS(status) ;
13913}
Jeff Johnson295189b2012-06-20 16:38:30 -070013914/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013915 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013916 *
13917 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013918void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013919 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13920 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013921{
13922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013925 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013926 if(NULL == pWdaParams)
13927 {
13928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 VOS_ASSERT(0) ;
13931 return ;
13932 }
13933
13934 vos_mem_free(pWdaParams->wdaMsgParam) ;
13935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13936 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 //print a msg, nothing else to do
13938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013939 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013940 return ;
13941}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013942
13943/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013944 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13945 * Free memory.
13946 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013947 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013948void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013949 void* pUserData)
13950{
13951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13952
13953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13954 "<------ %s, wdiStatus: %d",
13955 __func__, wdiStatus);
13956
13957 if (NULL == pWdaParams)
13958 {
13959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13960 "%s: Invalid pWdaParams pointer", __func__);
13961 VOS_ASSERT(0);
13962 return;
13963 }
13964
13965 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13966 {
13967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13968 vos_mem_free(pWdaParams->wdaMsgParam);
13969 vos_mem_free(pWdaParams);
13970 }
13971
13972 return;
13973}
13974
Jeff Johnson295189b2012-06-20 16:38:30 -070013975/*
13976 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13977 * Request to WDI to set Receive Filters
13978 */
13979VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13980 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13981{
Jeff Johnson43971f52012-07-17 12:26:56 -070013982 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013983 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13984 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13985 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13986 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13987 tWDA_ReqParams *pWdaParams ;
13988 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013991 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13992 {
13993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013995 VOS_ASSERT(0);
13996 return VOS_STATUS_E_NOMEM;
13997 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13999 if(NULL == pWdaParams)
14000 {
14001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014003 VOS_ASSERT(0);
14004 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14005 return VOS_STATUS_E_NOMEM;
14006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014007 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14008 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14009 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14010 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014011 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14012 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14013
14014 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14015 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014016
14017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14018 "FID %d FT %d NParams %d CT %d",
14019 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14020 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14021 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14022 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014023 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14024 {
14025 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14026 &pRcvPktFilterCfg->paramsData[i],
14027 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14029 "Proto %d Comp Flag %d \n",
14030 pwdiSetRcvPktFilterReqParamsType->
14031 wdiPktFilterCfg.paramsData[i].protocolLayer,
14032 pwdiSetRcvPktFilterReqParamsType->
14033 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14035 "Data Offset %d Data Len %d\n",
14036 pwdiSetRcvPktFilterReqParamsType->
14037 wdiPktFilterCfg.paramsData[i].dataOffset,
14038 pwdiSetRcvPktFilterReqParamsType->
14039 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14041 "CData: %d:%d:%d:%d:%d:%d\n",
14042 pwdiSetRcvPktFilterReqParamsType->
14043 wdiPktFilterCfg.paramsData[i].compareData[0],
14044 pwdiSetRcvPktFilterReqParamsType->
14045 wdiPktFilterCfg.paramsData[i].compareData[1],
14046 pwdiSetRcvPktFilterReqParamsType->
14047 wdiPktFilterCfg.paramsData[i].compareData[2],
14048 pwdiSetRcvPktFilterReqParamsType->
14049 wdiPktFilterCfg.paramsData[i].compareData[3],
14050 pwdiSetRcvPktFilterReqParamsType->
14051 wdiPktFilterCfg.paramsData[i].compareData[4],
14052 pwdiSetRcvPktFilterReqParamsType->
14053 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14055 "MData: %d:%d:%d:%d:%d:%d\n",
14056 pwdiSetRcvPktFilterReqParamsType->
14057 wdiPktFilterCfg.paramsData[i].dataMask[0],
14058 pwdiSetRcvPktFilterReqParamsType->
14059 wdiPktFilterCfg.paramsData[i].dataMask[1],
14060 pwdiSetRcvPktFilterReqParamsType->
14061 wdiPktFilterCfg.paramsData[i].dataMask[2],
14062 pwdiSetRcvPktFilterReqParamsType->
14063 wdiPktFilterCfg.paramsData[i].dataMask[3],
14064 pwdiSetRcvPktFilterReqParamsType->
14065 wdiPktFilterCfg.paramsData[i].dataMask[4],
14066 pwdiSetRcvPktFilterReqParamsType->
14067 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014069 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014070 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014071 /* Store Params pass it to WDI */
14072 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14073 pWdaParams->pWdaContext = pWDA;
14074 /* Store param pointer as passed in by caller */
14075 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014076 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014077 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014078 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014079 if(IS_WDI_STATUS_FAILURE(status))
14080 {
14081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14082 "Failure in SetFilter(),free all the memory,status %d ",status);
14083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14084 vos_mem_free(pWdaParams->wdaMsgParam);
14085 vos_mem_free(pWdaParams);
14086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 return CONVERT_WDI2VOS_STATUS(status) ;
14088}
Jeff Johnson295189b2012-06-20 16:38:30 -070014089/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014090 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014091 *
14092 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014093void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014094 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14095 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014096{
14097 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14098 tWDA_CbContext *pWDA;
14099 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14100 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14101 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14102 tANI_U8 i;
14103 vos_msg_t vosMsg;
14104
14105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014106 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014107 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14108
Jeff Johnsone7245742012-09-05 17:12:55 -070014109 if(NULL == pRcvFltPktMatchCntRsp)
14110 {
14111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014112 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014113 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014114 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014115 return ;
14116 }
14117
Jeff Johnson295189b2012-06-20 16:38:30 -070014118 if(NULL == pWdaParams)
14119 {
14120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014121 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014123 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014124 return ;
14125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014126 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14127 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014128 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14129 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14130
14131 /* Message Header */
14132 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14133 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14134
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014135 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014136
14137 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14138 {
14139 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14140 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14141 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014142 /* VOS message wrapper */
14143 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14144 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14145 vosMsg.bodyval = 0;
14146 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14147 {
14148 /* free the mem and return */
14149 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14150 }
14151
14152 vos_mem_free(pWdaParams->wdaMsgParam) ;
14153 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14154 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014155
14156 return;
14157}
14158/*
14159 * FUNCTION: WDA_FilterMatchCountReqCallback
14160 * Free memory and send RSP back to SME.
14161 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14162 */
14163void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14164{
14165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14166 vos_msg_t vosMsg;
14167
14168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14169 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14170
14171 if(NULL == pWdaParams)
14172 {
14173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14174 "%s: pWdaParams received NULL", __func__);
14175 VOS_ASSERT(0);
14176 return;
14177 }
14178
14179 /* VOS message wrapper */
14180 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14181 vosMsg.bodyptr = NULL;
14182 vosMsg.bodyval = 0;
14183
14184 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14185 {
14186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14187 vos_mem_free(pWdaParams->wdaMsgParam);
14188 vos_mem_free(pWdaParams);
14189 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14190 }
14191
14192 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014193}
Jeff Johnson295189b2012-06-20 16:38:30 -070014194/*
14195 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14196 * Request to WDI to get PC Filter Match Count
14197 */
14198VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14199{
Jeff Johnson43971f52012-07-17 12:26:56 -070014200 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014201 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14202 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014205 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14207 {
14208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014210 VOS_ASSERT(0);
14211 return VOS_STATUS_E_NOMEM;
14212 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14214 if(NULL == pWdaParams)
14215 {
14216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014218 VOS_ASSERT(0);
14219 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14220 return VOS_STATUS_E_NOMEM;
14221 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014222
Yue Ma7f44bbe2013-04-12 11:47:39 -070014223 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14224 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014225
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014226 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14227 pRcvFltPktMatchRsp->bssId,
14228 sizeof(wpt_macAddr));
14229
Jeff Johnson295189b2012-06-20 16:38:30 -070014230 /* Store Params pass it to WDI */
14231 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14232 pWdaParams->pWdaContext = pWDA;
14233 /* Store param pointer as passed in by caller */
14234 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014236 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014237 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014238 if(IS_WDI_STATUS_FAILURE(status))
14239 {
14240 /* failure returned by WDI API */
14241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14242 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14244 vos_mem_free(pWdaParams) ;
14245 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14246 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14247 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014248 return CONVERT_WDI2VOS_STATUS(status) ;
14249}
Jeff Johnson295189b2012-06-20 16:38:30 -070014250/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014251 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014252 *
14253 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014254void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014255 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14256 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014257{
14258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014260 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014261/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14262 if(NULL == pWdaParams)
14263 {
14264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014265 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014266 VOS_ASSERT(0) ;
14267 return ;
14268 }
14269
14270 vos_mem_free(pWdaParams->wdaMsgParam) ;
14271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14272 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014273 //print a msg, nothing else to do
14274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014275 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014276 return ;
14277}
Jeff Johnson295189b2012-06-20 16:38:30 -070014278/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014279 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14280 * Free memory.
14281 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14282 */
14283void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14284{
14285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14286
14287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14288 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14289
14290 if(NULL == pWdaParams)
14291 {
14292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14293 "%s: Invalid pWdaParams pointer", __func__);
14294 VOS_ASSERT(0);
14295 return;
14296 }
14297
14298 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14299 {
14300 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14301 vos_mem_free(pWdaParams->wdaMsgParam);
14302 vos_mem_free(pWdaParams);
14303 }
14304
14305 return;
14306}
14307/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014308 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14309 * Request to WDI to clear Receive Filters
14310 */
14311VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14312 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14313{
Jeff Johnson43971f52012-07-17 12:26:56 -070014314 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014315 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14316 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14317 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014319 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014320 if(NULL == pwdiRcvFltPktClearReqParamsType)
14321 {
14322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014324 VOS_ASSERT(0);
14325 return VOS_STATUS_E_NOMEM;
14326 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014327 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14328 if(NULL == pWdaParams)
14329 {
14330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 VOS_ASSERT(0);
14333 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14334 return VOS_STATUS_E_NOMEM;
14335 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014336 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14337 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014338 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14339 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14340 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14341 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014342
Yue Ma7f44bbe2013-04-12 11:47:39 -070014343 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014344 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014345 /* Store Params pass it to WDI */
14346 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14347 pWdaParams->pWdaContext = pWDA;
14348 /* Store param pointer as passed in by caller */
14349 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014350 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014351 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014352 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014353 if(IS_WDI_STATUS_FAILURE(status))
14354 {
14355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14356 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14357 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014358 vos_mem_free(pWdaParams->wdaMsgParam);
14359 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014360 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014361 return CONVERT_WDI2VOS_STATUS(status) ;
14362}
14363#endif // WLAN_FEATURE_PACKET_FILTERING
14364
Jeff Johnson295189b2012-06-20 16:38:30 -070014365/*
14366 * FUNCTION: WDA_ProcessSetPowerParamsReq
14367 * Request to WDI to set power params
14368 */
14369VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14370 tSirSetPowerParamsReq *pPowerParams)
14371{
Jeff Johnson43971f52012-07-17 12:26:56 -070014372 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014373 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14374 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014375 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014378 if(NULL == pwdiSetPowerParamsReqInfo)
14379 {
14380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014382 VOS_ASSERT(0);
14383 return VOS_STATUS_E_NOMEM;
14384 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14386 if(NULL == pWdaParams)
14387 {
14388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014390 VOS_ASSERT(0);
14391 vos_mem_free(pwdiSetPowerParamsReqInfo);
14392 return VOS_STATUS_E_NOMEM;
14393 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014394
Jeff Johnson295189b2012-06-20 16:38:30 -070014395
14396 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14397 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014398 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14399 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014400 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14401 pPowerParams->uListenInterval;
14402 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14403 pPowerParams->uBcastMcastFilter;
14404 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14405 pPowerParams->uEnableBET;
14406 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14407 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014408 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14409 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014410 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14411 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014412
Jeff Johnson295189b2012-06-20 16:38:30 -070014413 /* Store Params pass it to WDI */
14414 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14415 pWdaParams->pWdaContext = pWDA;
14416 /* Store param pointer as passed in by caller */
14417 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014418 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014419 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014420 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014421 if(IS_WDI_STATUS_FAILURE(status))
14422 {
14423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14424 "Failure in Set power params REQ WDI API, free all the memory " );
14425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14426 vos_mem_free(pWdaParams->wdaMsgParam);
14427 pWdaParams->wdaWdiApiMsgParam = NULL;
14428 pWdaParams->wdaMsgParam = NULL;
14429 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014430 return CONVERT_WDI2VOS_STATUS(status) ;
14431}
14432
14433/*
14434 * FUNCTION: WDA_SetTmLevelRspCallback
14435 * Set TM Level response
14436 */
14437void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14438{
14439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14440
14441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014442 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014443
14444 if(NULL == pWdaParams)
14445 {
14446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014447 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014448 VOS_ASSERT(0) ;
14449 return ;
14450 }
14451
14452 /* Dose not need to send notification to upper layer
14453 * Just free allocated resources */
14454 if( pWdaParams != NULL )
14455 {
14456 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14457 {
14458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14459 }
14460 vos_mem_free(pWdaParams->wdaMsgParam) ;
14461 vos_mem_free(pWdaParams) ;
14462 }
14463}
14464
14465/*
14466 * FUNCTION: WDA_ProcessSetTmLevelReq
14467 * Set TM Level request
14468 */
14469VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14470 tAniSetTmLevelReq *setTmLevelReq)
14471{
14472 WDI_Status status = WDI_STATUS_SUCCESS ;
14473 tWDA_ReqParams *pWdaParams ;
14474 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14475 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14476 sizeof(WDI_SetTmLevelReqType)) ;
14477 if(NULL == wdiSetTmLevelReq)
14478 {
14479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014481 VOS_ASSERT(0);
14482 return VOS_STATUS_E_NOMEM;
14483 }
14484
14485 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14486 if(NULL == pWdaParams)
14487 {
14488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014489 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014490 VOS_ASSERT(0);
14491 vos_mem_free(wdiSetTmLevelReq);
14492 return VOS_STATUS_E_NOMEM;
14493 }
14494
14495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014497
14498 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14499 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14500
14501 pWdaParams->pWdaContext = pWDA;
14502 pWdaParams->wdaMsgParam = setTmLevelReq;
14503 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14504
14505 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14506 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14507
14508 if(IS_WDI_STATUS_FAILURE(status))
14509 {
14510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014511 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014512 vos_mem_free(pWdaParams->wdaMsgParam) ;
14513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14514 vos_mem_free(pWdaParams) ;
14515 }
14516
14517 return CONVERT_WDI2VOS_STATUS(status) ;
14518}
14519
14520VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14521 tpTxControlParams pTxCtrlParam)
14522{
14523 VOS_STATUS wdaStatus;
14524
14525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014526 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014527 if( pTxCtrlParam == NULL )
14528 {
14529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014530 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 return VOS_STATUS_E_FAILURE;
14532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014533 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14534 {
14535 wdaStatus = WDA_SuspendDataTx(pWDA);
14536 }
14537 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14538 {
14539 wdaStatus = WDA_ResumeDataTx(pWDA);
14540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 return wdaStatus;
14542}
14543
14544 /* FUNCTION WDA_featureCapsExchange
14545 * WDA API to invoke capability exchange between host and FW.
14546 */
14547void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14548{
14549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014550 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014551 WDI_featureCapsExchangeReq( NULL, pVosContext);
14552}
14553
Yathish9f22e662012-12-10 14:21:35 -080014554/* FUNCTION WDA_disableCapablityFeature
14555 * WDA API to diable Active mode offload in host.
14556 */
14557void WDA_disableCapablityFeature(tANI_U8 feature_index)
14558{
14559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14560 "%s:enter", __func__ );
14561 WDI_disableCapablityFeature(feature_index);
14562}
14563
Jeff Johnson295189b2012-06-20 16:38:30 -070014564 /* FUNCTION WDA_getHostWlanFeatCaps
14565 * Wrapper for WDI API, that will return if the feature (enum value).passed
14566 * to this API is supported or not in Host
14567 * return value
14568 * 0 - implies feature is NOT Supported
14569 * any non zero value - implies feature is SUPPORTED
14570 */
14571tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14572{
14573 return WDI_getHostWlanFeatCaps(featEnumValue);
14574}
14575
14576 /* FUNCTION WDA_getFwWlanFeatCaps
14577 * Wrapper for WDI API, that will return if the feature (enum value).passed
14578 * to this API is supported or not in FW
14579 * return value
14580 * 0 - implies feature is NOT Supported
14581 * any non zero value - implies feature is SUPPORTED
14582 */
14583tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14584{
14585 return WDI_getFwWlanFeatCaps(featEnumValue);
14586}
14587
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014588
Jeff Johnson295189b2012-06-20 16:38:30 -070014589/*
14590 * FUNCTION: WDA_shutdown
14591 * Shutdown WDA/WDI without handshaking with Riva.
14592 * Synchronous function.
14593 */
14594VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14595{
14596 WDI_Status wdiStatus;
14597 //tANI_U8 eventIdx = 0;
14598 VOS_STATUS status = VOS_STATUS_SUCCESS;
14599 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014600 if (NULL == pWDA)
14601 {
14602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014603 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014604 VOS_ASSERT(0);
14605 return VOS_STATUS_E_FAILURE;
14606 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014607 /* FTM mode stay START_STATE */
14608 if( (WDA_READY_STATE != pWDA->wdaState) &&
14609 (WDA_INIT_STATE != pWDA->wdaState) &&
14610 (WDA_START_STATE != pWDA->wdaState) )
14611 {
14612 VOS_ASSERT(0);
14613 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014614
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014615 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14616 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014617 {
14618 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014619 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014620 }
Leo Chang9d76f622013-08-23 16:34:52 -070014621 else
14622 {
14623 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14624 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014625
Jeff Johnson295189b2012-06-20 16:38:30 -070014626 /* call WDI shutdown */
14627 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014628 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14629 {
14630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14631 "error in WDA Stop" );
14632 status = VOS_STATUS_E_FAILURE;
14633 }
14634 /* WDI stop is synchrnous, shutdown is complete when it returns */
14635 pWDA->wdaState = WDA_STOP_STATE;
14636
Jeff Johnson295189b2012-06-20 16:38:30 -070014637 /* shutdown should perform the stop & close actions. */
14638 /* Destroy the event */
14639 status = vos_event_destroy(&pWDA->txFrameEvent);
14640 if(!VOS_IS_STATUS_SUCCESS(status))
14641 {
14642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14643 "VOS Event destroy failed - status = %d\n", status);
14644 status = VOS_STATUS_E_FAILURE;
14645 }
14646 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14647 if(!VOS_IS_STATUS_SUCCESS(status))
14648 {
14649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14650 "VOS Event destroy failed - status = %d\n", status);
14651 status = VOS_STATUS_E_FAILURE;
14652 }
14653 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14654 if(!VOS_IS_STATUS_SUCCESS(status))
14655 {
14656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14657 "VOS Event destroy failed - status = %d\n", status);
14658 status = VOS_STATUS_E_FAILURE;
14659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014660 /* free WDA context */
14661 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14662 if ( !VOS_IS_STATUS_SUCCESS(status) )
14663 {
14664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14665 "error in WDA close " );
14666 status = VOS_STATUS_E_FAILURE;
14667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014668 return status;
14669}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014670
Jeff Johnsone7245742012-09-05 17:12:55 -070014671/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014672 * FUNCTION: WDA_setNeedShutdown
14673 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014674 */
14675
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014676void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014677{
14678 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014679 if(pWDA == NULL)
14680 {
14681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14682 "Could not get the WDA Context pointer" );
14683 return;
14684 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014685 pWDA->needShutdown = TRUE;
14686}
14687/*
14688 * FUNCTION: WDA_needShutdown
14689 * WDA needs a shutdown
14690 */
14691
14692v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14693{
14694 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014695 if(pWDA == NULL)
14696 {
14697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14698 "Could not get the WDA Context pointer" );
14699 return 0;
14700 }
14701 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014702}
14703
Mohit Khanna4a70d262012-09-11 16:30:12 -070014704#ifdef WLAN_FEATURE_11AC
14705/*
14706 * FUNCTION: WDA_SetBeaconFilterReqCallback
14707 *
14708 */
14709void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14710{
14711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014713 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014714 if(NULL == pWdaParams)
14715 {
14716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014717 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014718 VOS_ASSERT(0) ;
14719 return ;
14720 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014721
Mohit Khanna4a70d262012-09-11 16:30:12 -070014722 vos_mem_free(pWdaParams->wdaMsgParam) ;
14723 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14724 vos_mem_free(pWdaParams) ;
14725 /*
14726 * No respone required for SetBeaconFilter req so just free the request
14727 * param here
14728 */
14729
14730 return ;
14731}
14732
14733VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14734 tUpdateVHTOpMode *pData)
14735{
14736 WDI_Status status = WDI_STATUS_SUCCESS ;
14737 tWDA_ReqParams *pWdaParams ;
14738 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14739 sizeof(WDI_UpdateVHTOpMode)) ;
14740 if(NULL == wdiTemp)
14741 {
14742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014743 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014744 VOS_ASSERT(0);
14745 return VOS_STATUS_E_NOMEM;
14746 }
14747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14748 if(NULL == pWdaParams)
14749 {
14750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014751 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014752 VOS_ASSERT(0);
14753 vos_mem_free(wdiTemp);
14754 return VOS_STATUS_E_NOMEM;
14755 }
14756
14757 wdiTemp->opMode = pData->opMode;
14758 wdiTemp->staId = pData->staId;
14759
14760 pWdaParams->pWdaContext = pWDA;
14761 /* Store Req pointer, as this will be used for response */
14762 pWdaParams->wdaMsgParam = (void *)pData;
14763 /* store Params pass it to WDI */
14764 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14765
14766 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14767
14768 if(IS_WDI_STATUS_FAILURE(status))
14769 {
14770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14771 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14772 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14773 vos_mem_free(pWdaParams->wdaMsgParam);
14774 vos_mem_free(pWdaParams);
14775 }
14776 return CONVERT_WDI2VOS_STATUS(status) ;
14777}
14778#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014779
14780/*==========================================================================
14781 FUNCTION WDA_TransportChannelDebug
14782
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014783 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014784 Display Transport Channel debugging information
14785 User may request to display DXE channel snapshot
14786 Or if host driver detects any abnormal stcuk may display
14787
14788 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014789 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014790 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014791 enableStallDetect : Enable stall detect feature
14792 This feature will take effect to data performance
14793 Not integrate till fully verification
14794
14795 RETURN VALUE
14796 NONE
14797
14798===========================================================================*/
14799void WDA_TransportChannelDebug
14800(
schang6295e542013-03-12 15:31:23 -070014801 tpAniSirGlobal pMac,
14802 v_BOOL_t displaySnapshot,
14803 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014804)
14805{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014806 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014807 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014808}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014809
14810/*==========================================================================
14811 FUNCTION WDA_SetEnableSSR
14812
14813 DESCRIPTION
14814 API to enable/disable SSR on WDI timeout
14815
14816 PARAMETERS
14817 enableSSR : enable/disable SSR
14818
14819 RETURN VALUE
14820 NONE
14821
14822===========================================================================*/
14823void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14824{
14825 WDI_SetEnableSSR(enableSSR);
14826}
Leo Chang9056f462013-08-01 19:21:11 -070014827
14828#ifdef FEATURE_WLAN_LPHB
14829/*
14830 * FUNCTION: WDA_LPHBconfRspCallback
14831 *
14832 */
14833void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14834{
14835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14836
14837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14838 "<------ %s " ,__func__);
14839 if (NULL == pWdaParams)
14840 {
14841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14842 "%s: pWdaParams received NULL", __func__);
14843 VOS_ASSERT(0) ;
14844 return ;
14845 }
14846
14847 /* Do not need to send notification to upper layer
14848 * Just free allocated resources */
14849 if (pWdaParams != NULL)
14850 {
14851 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14852 {
14853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14854 }
14855 vos_mem_free(pWdaParams->wdaMsgParam) ;
14856 vos_mem_free(pWdaParams) ;
14857 }
14858
14859 return;
14860}
14861
14862/*
14863 * FUNCTION: WDA_ProcessLPHBConfReq
14864 *
14865 */
14866VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14867 tSirLPHBReq *pData)
14868{
14869 WDI_Status wdiStatus;
14870 tWDA_ReqParams *pWdaParams ;
14871
14872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14873 "------> %s " , __func__);
14874
14875 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14876 if (NULL == pWdaParams)
14877 {
14878 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14879 "%s: VOS MEM Alloc Failure", __func__);
14880 VOS_ASSERT(0);
14881 vos_mem_free(pData);
14882 return VOS_STATUS_E_NOMEM;
14883 }
14884
14885 pWdaParams->pWdaContext = pWDA;
14886 pWdaParams->wdaMsgParam = (void *)pData;
14887 pWdaParams->wdaWdiApiMsgParam = NULL;
14888
14889 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14890 if (WDI_STATUS_PENDING == wdiStatus)
14891 {
14892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14893 "Pending received for %s:%d ", __func__, __LINE__);
14894 }
14895 else if (WDI_STATUS_SUCCESS != wdiStatus)
14896 {
14897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14898 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14899 vos_mem_free(pWdaParams->wdaMsgParam);
14900 vos_mem_free(pWdaParams);
14901 }
14902
14903 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14904}
14905#endif /* FEATURE_WLAN_LPHB */
14906