blob: 6831140836e829c9dc3fd5a15131da27725d514f [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;
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 if ((NULL == pMac)||(NULL == wdaContext))
530 {
531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700532 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700533 VOS_ASSERT(0);
534 return VOS_STATUS_E_FAILURE;
535 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
537 WNI_CFG_STA_ID_LEN +
538 WNI_CFG_EDCA_WME_ACBK_LEN +
539 WNI_CFG_EDCA_WME_ACBE_LEN +
540 WNI_CFG_EDCA_WME_ACVI_LEN +
541 WNI_CFG_EDCA_WME_ACVO_LEN +
542 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 /* malloc memory for all configs in one shot */
544 configParam = vos_mem_malloc(configParamSize);
545
546 if(NULL == configParam )
547 {
548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700549 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 VOS_ASSERT(0) ;
551 return VOS_STATUS_E_NOMEM;
552 }
553 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700555 tlvStruct = (tHalCfg *)configParam;
556 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 /* TODO: Remove Later */
558 /* QWLAN_HAL_CFG_STA_ID */
559 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
560 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
561 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
562 eSIR_SUCCESS)
563 {
564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
565 "Failed to get value for WNI_CFG_STA_ID");
566 goto handle_failure;
567 }
568 tlvStruct->length = strLength ;
569 /* calculate the pad bytes to have the CFG in aligned format */
570 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
571 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700572 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
573 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
575 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
576 tlvStruct->length = sizeof(tANI_U32);
577 configDataValue = (tANI_U32 *)(tlvStruct + 1);
578 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
579 != eSIR_SUCCESS)
580 {
581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
582 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
583 goto handle_failure;
584 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
586 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
588 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
589 tlvStruct->length = sizeof(tANI_U32);
590 configDataValue = (tANI_U32 *)(tlvStruct + 1);
591 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
592 eSIR_SUCCESS)
593 {
594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
595 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
596 goto handle_failure;
597 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
599 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
601 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
602 tlvStruct->length = sizeof(tANI_U32);
603 configDataValue = (tANI_U32 *)(tlvStruct + 1);
604 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
605 != eSIR_SUCCESS)
606 {
607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
608 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
609 goto handle_failure;
610 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
612 + sizeof(tHalCfg) + tlvStruct->length)) ;
613
614 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
615 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
616 tlvStruct->length = sizeof(tANI_U32);
617 configDataValue = (tANI_U32 *)(tlvStruct + 1);
618 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
619 configDataValue ) != eSIR_SUCCESS)
620 {
621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
622 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
623 goto handle_failure;
624 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700625 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
626 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 /* QWLAN_HAL_CFG_CAL_PERIOD */
628 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
629 tlvStruct->length = sizeof(tANI_U32);
630 configDataValue = (tANI_U32 *)(tlvStruct + 1);
631 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
632 != eSIR_SUCCESS)
633 {
634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
635 "Failed to get value for WNI_CFG_CAL_PERIOD");
636 goto handle_failure;
637 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700638 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
639 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 /* QWLAN_HAL_CFG_CAL_CONTROL */
641 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
642 tlvStruct->length = sizeof(tANI_U32);
643 configDataValue = (tANI_U32 *)(tlvStruct + 1);
644 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
645 != eSIR_SUCCESS)
646 {
647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
648 "Failed to get value for WNI_CFG_CAL_CONTROL");
649 goto handle_failure;
650 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700651 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
652 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 /* QWLAN_HAL_CFG_PROXIMITY */
654 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
655 tlvStruct->length = sizeof(tANI_U32);
656 configDataValue = (tANI_U32 *)(tlvStruct + 1);
657 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
658 != eSIR_SUCCESS)
659 {
660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
661 "Failed to get value for WNI_CFG_PROXIMITY");
662 goto handle_failure;
663 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700664 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
665 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
667 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
668 tlvStruct->length = sizeof(tANI_U32);
669 configDataValue = (tANI_U32 *)(tlvStruct + 1);
670 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
671 != eSIR_SUCCESS)
672 {
673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
674 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
675 goto handle_failure;
676 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700677 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
678 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
680 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
681 tlvStruct->length = sizeof(tANI_U32);
682 configDataValue = (tANI_U32 *)(tlvStruct + 1);
683 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
684 eSIR_SUCCESS)
685 {
686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
687 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
688 goto handle_failure;
689 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700690 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
691 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
693 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
694 tlvStruct->length = sizeof(tANI_U32);
695 configDataValue = (tANI_U32 *)(tlvStruct + 1);
696 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
697 configDataValue ) != eSIR_SUCCESS)
698 {
699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
700 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
701 goto handle_failure;
702 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700703 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
704 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
706 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
707 tlvStruct->length = sizeof(tANI_U32);
708 configDataValue = (tANI_U32 *)(tlvStruct + 1);
709 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
710 eSIR_SUCCESS)
711 {
712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
713 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
714 goto handle_failure;
715 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700716 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
717 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
719 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
720 tlvStruct->length = sizeof(tANI_U32);
721 configDataValue = (tANI_U32 *)(tlvStruct + 1);
722 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
723 eSIR_SUCCESS)
724 {
725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
726 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
727 goto handle_failure;
728 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700729 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
730 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
732 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
733 tlvStruct->length = sizeof(tANI_U32);
734 configDataValue = (tANI_U32 *)(tlvStruct + 1);
735 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
736 eSIR_SUCCESS)
737 {
738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
739 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
740 goto handle_failure;
741 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
743 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
745 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
746 tlvStruct->length = sizeof(tANI_U32);
747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
748 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
749 configDataValue ) != eSIR_SUCCESS)
750 {
751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
752 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
753 goto handle_failure;
754 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700755 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
756 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
758 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
759 tlvStruct->length = sizeof(tANI_U32);
760 configDataValue = (tANI_U32 *)(tlvStruct + 1);
761 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
762 configDataValue ) != eSIR_SUCCESS)
763 {
764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
765 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
766 goto handle_failure;
767 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700768 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
769 + sizeof(tHalCfg) + tlvStruct->length));
770
771 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
772 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
773 tlvStruct->length = sizeof(tANI_U32);
774 configDataValue = (tANI_U32 *)(tlvStruct + 1);
775 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
776 configDataValue ) != eSIR_SUCCESS)
777 {
778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
779 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
780 goto handle_failure;
781 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700782 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
783 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
785 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
786 tlvStruct->length = sizeof(tANI_U32);
787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
788 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
789 configDataValue ) != eSIR_SUCCESS)
790 {
791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
792 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
793 goto handle_failure;
794 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
796 + sizeof(tHalCfg) + tlvStruct->length));
797
798 /* QWLAN_HAL_CFG_FIXED_RATE */
799 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
800 tlvStruct->length = sizeof(tANI_U32);
801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
802 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
803 != eSIR_SUCCESS)
804 {
805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
806 "Failed to get value for WNI_CFG_FIXED_RATE");
807 goto handle_failure;
808 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700809 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
810 + sizeof(tHalCfg) + tlvStruct->length));
811
812 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
813 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
814 tlvStruct->length = sizeof(tANI_U32);
815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
816 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
817 != eSIR_SUCCESS)
818 {
819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
820 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
821 goto handle_failure;
822 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
824 + sizeof(tHalCfg) + tlvStruct->length));
825
826 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
827 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
828 tlvStruct->length = sizeof(tANI_U32);
829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
830 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
831 configDataValue ) != eSIR_SUCCESS)
832 {
833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
834 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
835 goto handle_failure;
836 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700837 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
838 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
840 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
841 tlvStruct->length = sizeof(tANI_U32);
842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
843 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
844 configDataValue ) != eSIR_SUCCESS)
845 {
846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
847 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
848 goto handle_failure;
849 }
850 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
851 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700852 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
853 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
854 tlvStruct->length = sizeof(tANI_U32);
855 configDataValue = (tANI_U32 *)(tlvStruct + 1);
856 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
857 configDataValue ) != eSIR_SUCCESS)
858 {
859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
860 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
861 goto handle_failure;
862 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700863 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
864 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
866 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
867 tlvStruct->length = sizeof(tANI_U32);
868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
869 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
870 configDataValue ) != eSIR_SUCCESS)
871 {
872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
873 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
874 goto handle_failure;
875 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700876 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
877 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
879 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
880 tlvStruct->length = sizeof(tANI_U32);
881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
882 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
883 configDataValue ) != eSIR_SUCCESS)
884 {
885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
886 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
887 goto handle_failure;
888 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
890 + sizeof(tHalCfg) + tlvStruct->length);
891
892#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
893 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
894 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
895 tlvStruct->length = sizeof(tANI_U32);
896 configDataValue = (tANI_U32 *)(tlvStruct + 1);
897 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
898 configDataValue ) != eSIR_SUCCESS)
899 {
900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
901 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
902 goto handle_failure;
903 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700904 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
905 + sizeof(tHalCfg) + tlvStruct->length);
906#endif
907 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
908 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
909 tlvStruct->length = sizeof(tANI_U32);
910 configDataValue = (tANI_U32 *)(tlvStruct + 1);
911 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
912 configDataValue ) != eSIR_SUCCESS)
913 {
914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
915 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
916 goto handle_failure;
917 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
919 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
921 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
922 tlvStruct->length = sizeof(tANI_U32);
923 configDataValue = (tANI_U32 *)(tlvStruct + 1);
924 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
925 eSIR_SUCCESS)
926 {
927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
928 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
929 goto handle_failure;
930 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
932 + sizeof(tHalCfg) + tlvStruct->length);
933
934 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
935 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
936 tlvStruct->length = sizeof(tANI_U32);
937 configDataValue = (tANI_U32 *)(tlvStruct + 1);
938 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
939 configDataValue ) != eSIR_SUCCESS)
940 {
941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
942 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
943 goto handle_failure;
944 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700945 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
946 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
948 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
949 tlvStruct->length = sizeof(tANI_U32);
950 configDataValue = (tANI_U32 *)(tlvStruct + 1);
951 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
952 configDataValue ) != eSIR_SUCCESS)
953 {
954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
955 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
956 goto handle_failure;
957 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700958 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
959 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
961 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
962 tlvStruct->length = sizeof(tANI_U32);
963 configDataValue = (tANI_U32 *)(tlvStruct + 1);
964 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
965 configDataValue ) != eSIR_SUCCESS)
966 {
967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
968 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
969 goto handle_failure;
970 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
972 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
974 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
975 tlvStruct->length = sizeof(tANI_U32);
976 configDataValue = (tANI_U32 *)(tlvStruct + 1);
977 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
978 configDataValue ) != eSIR_SUCCESS)
979 {
980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
981 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
982 goto handle_failure;
983 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700984 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
985 + sizeof(tHalCfg) + tlvStruct->length);
986
987 /* QWLAN_HAL_CFG_STATS_PERIOD */
988 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
989 tlvStruct->length = sizeof(tANI_U32);
990 configDataValue = (tANI_U32 *)(tlvStruct + 1);
991 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
992 eSIR_SUCCESS)
993 {
994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
995 "Failed to get value for WNI_CFG_STATS_PERIOD");
996 goto handle_failure;
997 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700998 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
999 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1001 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1002 tlvStruct->length = sizeof(tANI_U32);
1003 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1004 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1005 eSIR_SUCCESS)
1006 {
1007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1008 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1009 goto handle_failure;
1010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1014 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1018 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001019 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1020 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1022 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1023 tlvStruct->length = sizeof(tANI_U32);
1024 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1025 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1026 != eSIR_SUCCESS)
1027 {
1028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1029 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1030 goto handle_failure;
1031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001032 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1033 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1035 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1036 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1037 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1038 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1039 &strLength) != eSIR_SUCCESS)
1040 {
1041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1042 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1043 goto handle_failure;
1044 }
1045 tlvStruct->length = strLength;
1046 /* calculate the pad bytes to have the CFG in aligned format */
1047 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1048 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001049 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1050 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1052 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1053 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1054 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1055 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1056 &strLength) != eSIR_SUCCESS)
1057 {
1058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1059 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1060 goto handle_failure;
1061 }
1062 tlvStruct->length = strLength;
1063 /* calculate the pad bytes to have the CFG in aligned format */
1064 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1065 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001066 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1067 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1069 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1070 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1071 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1072 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1073 &strLength) != eSIR_SUCCESS)
1074 {
1075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1076 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1077 goto handle_failure;
1078 }
1079 tlvStruct->length = strLength;
1080 /* calculate the pad bytes to have the CFG in aligned format */
1081 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1082 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001083 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1084 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1086 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1087 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1088 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1089 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1090 &strLength) != eSIR_SUCCESS)
1091 {
1092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1093 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1094 goto handle_failure;
1095 }
1096 tlvStruct->length = strLength;
1097 /* calculate the pad bytes to have the CFG in aligned format */
1098 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1099 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001100 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1101 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1103 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1104 tlvStruct->length = sizeof(tANI_U32);
1105 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1106 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1107 != eSIR_SUCCESS)
1108 {
1109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1110 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1111 goto handle_failure;
1112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001113 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1114 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1116 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1117 tlvStruct->length = sizeof(tANI_U32);
1118 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1119 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1120 != eSIR_SUCCESS)
1121 {
1122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1123 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1124 goto handle_failure;
1125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001126 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1127 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1129 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1130 tlvStruct->length = sizeof(tANI_U32);
1131 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1132 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1133 != eSIR_SUCCESS)
1134 {
1135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1136 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1137 goto handle_failure;
1138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001139 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1140 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1142 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1143 tlvStruct->length = sizeof(tANI_U32);
1144 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1145 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1146 != eSIR_SUCCESS)
1147 {
1148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1149 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1150 goto handle_failure;
1151 }
1152 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1153 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001154 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1155 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1156 tlvStruct->length = sizeof(tANI_U32);
1157 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1158 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1159 != eSIR_SUCCESS)
1160 {
1161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1162 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1163 goto handle_failure;
1164 }
1165 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1166 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001167 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1168 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1169 tlvStruct->length = sizeof(tANI_U32);
1170 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1171 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1172 != eSIR_SUCCESS)
1173 {
1174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1175 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1176 goto handle_failure;
1177 }
1178 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1179 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001180 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1181 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1182 tlvStruct->length = sizeof(tANI_U32);
1183 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1184 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1185 != eSIR_SUCCESS)
1186 {
1187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1188 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1189 goto handle_failure;
1190 }
1191 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1192 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001193 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1194 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1195 tlvStruct->length = sizeof(tANI_U32);
1196 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1197 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1198 != eSIR_SUCCESS)
1199 {
1200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1201 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1202 goto handle_failure;
1203 }
1204 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1205 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001206 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1207 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1208 tlvStruct->length = sizeof(tANI_U32);
1209 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1210 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1211 != eSIR_SUCCESS)
1212 {
1213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1214 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1215 goto handle_failure;
1216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001217 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1218 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1220 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1221 tlvStruct->length = sizeof(tANI_U32);
1222 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1223 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1224 != eSIR_SUCCESS)
1225 {
1226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1227 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1228 goto handle_failure;
1229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1233 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1237 != eSIR_SUCCESS)
1238 {
1239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1240 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1241 goto handle_failure;
1242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001243 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1244 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1246 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1247 * into FW, so the parameters are added here.
1248 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001249 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1250 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1251 tlvStruct->length = sizeof(tANI_U32);
1252 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1253 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1254 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1255 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001256 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001263 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1264 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1265 tlvStruct->length = sizeof(tANI_U32);
1266 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1267 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1268 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1269 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001270 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1271 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1272 tlvStruct->length = sizeof(tANI_U32);
1273 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1274 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1275 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1276 + sizeof(tHalCfg) + tlvStruct->length) ;
1277
1278 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
1285
1286 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1287 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1288 tlvStruct->length = sizeof(tANI_U32);
1289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1290 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
1293
1294 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
1301
1302 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1303 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
1309
1310 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1311 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1312 tlvStruct->length = sizeof(tANI_U32);
1313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1314 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
1317
1318 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1319 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1320 tlvStruct->length = sizeof(tANI_U32);
1321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1322 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1324 + sizeof(tHalCfg) + tlvStruct->length) ;
1325
1326 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1327 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1331 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1332 + sizeof(tHalCfg) + tlvStruct->length) ;
1333
1334 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1335 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1336 tlvStruct->length = sizeof(tANI_U32);
1337 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1338 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
1341
1342 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1343 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1344 tlvStruct->length = sizeof(tANI_U32);
1345 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1346 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1347 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1348 + sizeof(tHalCfg) + tlvStruct->length) ;
1349
1350 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1351 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1352 tlvStruct->length = sizeof(tANI_U32);
1353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1354 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1355 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1356 + sizeof(tHalCfg) + tlvStruct->length) ;
1357
1358 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1359 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
1365
1366 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1367 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1368 tlvStruct->length = sizeof(tANI_U32);
1369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1370 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1371 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1372 + sizeof(tHalCfg) + tlvStruct->length) ;
1373
1374 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001375 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1376 tlvStruct->length = sizeof(tANI_U32);
1377 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1378 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1379 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1380 wcnssCompiledApiVersion.minor,
1381 wcnssCompiledApiVersion.version,
1382 wcnssCompiledApiVersion.revision);
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
Jeff Johnsond13512a2012-07-17 11:42:19 -07001386 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1387 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1391 configDataValue ) != eSIR_SUCCESS)
1392 {
1393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1394 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1395 goto handle_failure;
1396 }
1397
1398 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1399 + sizeof(tHalCfg) + tlvStruct->length) ;
1400 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1401 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1402 tlvStruct->length = sizeof(tANI_U32);
1403 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1404 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1405 configDataValue ) != eSIR_SUCCESS)
1406 {
1407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1408 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1409 goto handle_failure;
1410 }
1411
1412 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1413 + sizeof(tHalCfg) + tlvStruct->length) ;
1414
1415 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1416 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1417 tlvStruct->length = sizeof(tANI_U32);
1418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1419 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1420 != eSIR_SUCCESS)
1421 {
1422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1423 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1424 goto handle_failure;
1425 }
1426
1427 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1428 + sizeof(tHalCfg) + tlvStruct->length) ;
1429
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001430 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1431 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1435 != eSIR_SUCCESS)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1438 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1439 goto handle_failure;
1440 }
1441
1442 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1443 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001444#ifdef WLAN_SOFTAP_VSTA_FEATURE
1445 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1446 tlvStruct->length = sizeof(tANI_U32);
1447 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1448 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1449 != eSIR_SUCCESS)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1452 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1453 goto handle_failure;
1454 }
1455
1456 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1457 + sizeof(tHalCfg) + tlvStruct->length) ;
1458#endif
1459
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001460 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1461 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1462 tlvStruct->length = sizeof(tANI_U32);
1463 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1464
1465 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1466 != eSIR_SUCCESS)
1467 {
1468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1469 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1470 goto handle_failure;
1471 }
1472
1473 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1474 + sizeof(tHalCfg) + tlvStruct->length) ;
1475
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301476/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1477 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1478 tlvStruct->length = sizeof(tANI_U32);
1479 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1480 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1481 configDataValue ) != eSIR_SUCCESS)
1482 {
1483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1484 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1485 goto handle_failure;
1486 }
1487
1488 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1489 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301490#ifdef FEATURE_WLAN_TDLS
1491 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1492 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1493 tlvStruct->length = sizeof(tANI_U32);
1494 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1495 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1496 configDataValue ) != eSIR_SUCCESS)
1497 {
1498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1499 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1500 goto handle_failure;
1501 }
1502 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1503 + sizeof(tHalCfg) + tlvStruct->length) ;
1504
1505 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1506 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1507 tlvStruct->length = sizeof(tANI_U32);
1508 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1509 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1510 configDataValue ) != eSIR_SUCCESS)
1511 {
1512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1513 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1514 goto handle_failure;
1515 }
1516 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1517 + sizeof(tHalCfg) + tlvStruct->length) ;
1518 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1519 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1520 tlvStruct->length = sizeof(tANI_U32);
1521 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1522 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1523 configDataValue ) != eSIR_SUCCESS)
1524 {
1525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1526 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1527 goto handle_failure;
1528 }
1529 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1530 + sizeof(tHalCfg) + tlvStruct->length) ;
1531 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1532 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1533 tlvStruct->length = sizeof(tANI_U32);
1534 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1535 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1536 configDataValue ) != eSIR_SUCCESS)
1537 {
1538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1539 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1540 goto handle_failure;
1541 }
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
1544#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301545
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001546 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1547 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1548 tlvStruct->length = sizeof(tANI_U32);
1549 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1550 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1551 configDataValue ) != eSIR_SUCCESS)
1552 {
1553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1554 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1555 goto handle_failure;
1556 }
1557
1558 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1559 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001560
1561 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1562 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1563 tlvStruct->length = sizeof(tANI_U32);
1564 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1565 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1566 != eSIR_SUCCESS)
1567 {
1568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1569 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1570 goto handle_failure;
1571 }
1572 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1573 + sizeof(tHalCfg) + tlvStruct->length));
1574
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301575 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1576 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1577 tlvStruct->length = sizeof(tANI_U32);
1578 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1579 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1580 configDataValue ) != eSIR_SUCCESS)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1583 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1584 goto handle_failure;
1585 }
1586
1587 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1588 + sizeof(tHalCfg) + tlvStruct->length) ;
1589
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301590 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1591 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1592 tlvStruct->length = sizeof(tANI_U32);
1593 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1594 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1595 configDataValue ) != eSIR_SUCCESS)
1596 {
1597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1598 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1599 goto handle_failure;
1600 }
1601 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1602 + sizeof(tHalCfg) + tlvStruct->length) ;
1603
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001605#ifdef WLAN_DEBUG
1606 {
1607 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1609 "****** Dumping CFG TLV ***** ");
1610 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1611 {
1612 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1613 "%02x %02x %02x %02x %02x %02x %02x %02x",
1614 tlvStructStart[i],
1615 tlvStructStart[i+1],
1616 tlvStructStart[i+2],
1617 tlvStructStart[i+3],
1618 tlvStructStart[i+4],
1619 tlvStructStart[i+5],
1620 tlvStructStart[i+6],
1621 tlvStructStart[i+7]);
1622 }
1623 /* Dump the bytes in the last line*/
1624 for (; i < wdiStartParams->usConfigBufferLen; i++)
1625 {
1626 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1627 "%02x ",tlvStructStart[i]);
1628 }
1629 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1630 "**************************** ");
1631 }
1632#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001633 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001634handle_failure:
1635 vos_mem_free(configParam);
1636 return VOS_STATUS_E_FAILURE;
1637}
Jeff Johnson295189b2012-06-20 16:38:30 -07001638/*
1639 * FUNCTION: WDA_wdiCompleteCB
1640 * call the voss call back function
1641 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001642void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001643{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1645 tWDA_CbContext *wdaContext;
1646
1647 if(NULL == pWdaParams)
1648 {
1649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001650 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001651 VOS_ASSERT(0) ;
1652 return ;
1653 }
1654
1655 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1656
Jeff Johnson295189b2012-06-20 16:38:30 -07001657 if (NULL == wdaContext)
1658 {
1659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001660 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001661 return ;
1662 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001663
Jeff Johnson295189b2012-06-20 16:38:30 -07001664 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001669 vos_mem_free(pWdaParams);
1670
Jeff Johnson295189b2012-06-20 16:38:30 -07001671 if(WDI_STATUS_SUCCESS != status)
1672 {
1673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1674 "WDI stop callback returned failure" );
1675 VOS_ASSERT(0) ;
1676 }
1677 else
1678 {
1679 wdaContext->wdaState = WDA_STOP_STATE;
1680 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001681
Leo Chang9d76f622013-08-23 16:34:52 -07001682 /* FTM Driver stop procedure should be synced.
1683 * Stop and Close will happen on same context */
1684 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1685 {
1686 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1687 {
1688 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1689 "%s: FTM Stop Event Set Fail", __func__);
1690 VOS_ASSERT(0);
1691 }
1692 }
1693
Jeff Johnson295189b2012-06-20 16:38:30 -07001694 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001695 vos_WDAComplete_cback(wdaContext->pVosContext);
1696
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 return ;
1698}
Jeff Johnson295189b2012-06-20 16:38:30 -07001699/*
1700 * FUNCTION: WDA_stop
1701 * call WDI_stop
1702 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001703VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1704{
1705 WDI_Status wdiStatus;
1706 VOS_STATUS status = VOS_STATUS_SUCCESS;
1707 WDI_StopReqParamsType *wdiStopReq;
1708 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001709 tWDA_ReqParams *pWdaParams ;
1710
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 if (NULL == pWDA)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 VOS_ASSERT(0);
1716 return VOS_STATUS_E_FAILURE;
1717 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001718 if (pWDA->wdiFailed == true)
1719 {
1720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001721 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001722 return VOS_STATUS_E_ALREADY;
1723 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001724
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 /* FTM mode stay START_STATE */
1726 if( (WDA_READY_STATE != pWDA->wdaState) &&
1727 (WDA_INIT_STATE != pWDA->wdaState) &&
1728 (WDA_START_STATE != pWDA->wdaState) )
1729 {
1730 VOS_ASSERT(0);
1731 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 wdiStopReq = (WDI_StopReqParamsType *)
1733 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1734 if(NULL == wdiStopReq)
1735 {
1736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001737 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001738 VOS_ASSERT(0);
1739 return VOS_STATUS_E_NOMEM;
1740 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001741
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 wdiStopReq->wdiStopReason = reason;
1743 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001744
1745 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1746 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001750 VOS_ASSERT(0);
1751 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001752 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001753 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001754
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001755 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1756 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 {
1758 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001759 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001761
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001762 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1763 pWdaParams->wdaMsgParam = NULL;
1764 pWdaParams->pWdaContext = pWDA;
1765
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 /* call WDI stop */
1767 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001768 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1769
Jeff Johnson295189b2012-06-20 16:38:30 -07001770 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1771 {
1772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1773 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1775 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001776 status = VOS_STATUS_E_FAILURE;
1777 }
Leo Chang9d76f622013-08-23 16:34:52 -07001778
1779 /* FTM Driver stop procedure should be synced.
1780 * Stop and Close will happen on same context */
1781 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1782 {
1783 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1784 WDI_RESPONSE_TIMEOUT);
1785 if (status != VOS_STATUS_SUCCESS)
1786 {
1787 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1788 "%s: FTM Stop Timepoout", __func__);
1789 VOS_ASSERT(0);
1790 vos_event_reset(&pWDA->ftmStopDoneEvent);
1791 }
1792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001793 return status;
1794}
Jeff Johnson295189b2012-06-20 16:38:30 -07001795/*
1796 * FUNCTION: WDA_close
1797 * call WDI_close and free the WDA context
1798 */
1799VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1800{
Jeff Johnson43971f52012-07-17 12:26:56 -07001801 VOS_STATUS status = VOS_STATUS_SUCCESS;
1802 WDI_Status wstatus;
1803 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001804 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001805 if (NULL == wdaContext)
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001808 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 return VOS_STATUS_E_FAILURE;
1810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001811 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1812 (WDA_STOP_STATE != wdaContext->wdaState))
1813 {
1814 VOS_ASSERT(0);
1815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001817 wstatus = WDI_Close();
1818 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001819 {
1820 status = VOS_STATUS_E_FAILURE;
1821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001822 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001823 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001824 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1825 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001826 {
1827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1828 "WDI Sync Event destroy failed - status = %d\n", status);
1829 status = VOS_STATUS_E_FAILURE;
1830 }
1831
Jeff Johnson43971f52012-07-17 12:26:56 -07001832 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001833 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001834 {
1835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1836 "VOS Event destroy failed - status = %d\n", status);
1837 status = VOS_STATUS_E_FAILURE;
1838 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001839 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001840 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001841 {
1842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1843 "VOS Event destroy failed - status = %d\n", status);
1844 status = VOS_STATUS_E_FAILURE;
1845 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001846 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001847 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 {
1849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1850 "VOS Event destroy failed - status = %d\n", status);
1851 status = VOS_STATUS_E_FAILURE;
1852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001854 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001855 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 {
1857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1858 "error in WDA close " );
1859 status = VOS_STATUS_E_FAILURE;
1860 }
1861 return status;
1862}
Jeff Johnson295189b2012-06-20 16:38:30 -07001863/*
1864 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1865 * returns 1 if the compiled version is greater than or equal to the input version
1866 */
1867
1868uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1869{
1870 VOS_STATUS status = VOS_STATUS_SUCCESS;
1871 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1872 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1875 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1876 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1877 (compiledVersion.revision >= revision)))
1878 return 1;
1879 else
1880 return 0;
1881}
Jeff Johnson295189b2012-06-20 16:38:30 -07001882/*
1883 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1884 * returns 1 if the compiled version is greater than or equal to the input version
1885 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001886uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1887{
1888 VOS_STATUS status = VOS_STATUS_SUCCESS;
1889 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1890 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001891 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001892 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1893 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1894 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1895 (reportedVersion.revision >= revision)))
1896 return 1;
1897 else
1898 return 0;
1899}
Jeff Johnson295189b2012-06-20 16:38:30 -07001900/*
1901 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1902 * Returns the version of the WCNSS WLAN API with which the HOST
1903 * device driver was compiled
1904 */
1905VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1906 tSirVersionType *pVersion)
1907{
1908 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001910 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001911 if ((NULL == pvosGCtx) || (NULL == pVersion))
1912 {
1913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001914 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001915 VOS_ASSERT(0);
1916 return VOS_STATUS_E_FAILURE;
1917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001918 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1919 if (NULL == pWDA )
1920 {
1921 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001922 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001923 VOS_ASSERT(0);
1924 return VOS_STATUS_E_FAILURE;
1925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001926 *pVersion = pWDA->wcnssWlanCompiledVersion;
1927 return VOS_STATUS_SUCCESS;
1928}
Jeff Johnson295189b2012-06-20 16:38:30 -07001929/*
1930 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1931 * Returns the version of the WCNSS WLAN API with which the WCNSS
1932 * device driver was compiled
1933 */
1934VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1935 tSirVersionType *pVersion)
1936{
1937 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 if ((NULL == pvosGCtx) || (NULL == pVersion))
1941 {
1942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001943 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001944 VOS_ASSERT(0);
1945 return VOS_STATUS_E_FAILURE;
1946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001947 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1948 if (NULL == pWDA )
1949 {
1950 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001951 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 VOS_ASSERT(0);
1953 return VOS_STATUS_E_FAILURE;
1954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 *pVersion = pWDA->wcnssWlanReportedVersion;
1956 return VOS_STATUS_SUCCESS;
1957}
Jeff Johnson295189b2012-06-20 16:38:30 -07001958/*
1959 * FUNCTION: WDA_GetWcnssSoftwareVersion
1960 * Returns the WCNSS Software version string
1961 */
1962VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1963 tANI_U8 *pVersion,
1964 tANI_U32 versionBufferSize)
1965{
1966 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001968 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001969 if ((NULL == pvosGCtx) || (NULL == pVersion))
1970 {
1971 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001972 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001973 VOS_ASSERT(0);
1974 return VOS_STATUS_E_FAILURE;
1975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1977 if (NULL == pWDA )
1978 {
1979 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001980 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 VOS_ASSERT(0);
1982 return VOS_STATUS_E_FAILURE;
1983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1985 return VOS_STATUS_SUCCESS;
1986}
Jeff Johnson295189b2012-06-20 16:38:30 -07001987/*
1988 * FUNCTION: WDA_GetWcnssHardwareVersion
1989 * Returns the WCNSS Hardware version string
1990 */
1991VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1992 tANI_U8 *pVersion,
1993 tANI_U32 versionBufferSize)
1994{
1995 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001997 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 if ((NULL == pvosGCtx) || (NULL == pVersion))
1999 {
2000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002001 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 VOS_ASSERT(0);
2003 return VOS_STATUS_E_FAILURE;
2004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2006 if (NULL == pWDA )
2007 {
2008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002009 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 VOS_ASSERT(0);
2011 return VOS_STATUS_E_FAILURE;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2014 return VOS_STATUS_SUCCESS;
2015}
Jeff Johnson295189b2012-06-20 16:38:30 -07002016/*
2017 * FUNCTION: WDA_WniCfgDnld
2018 * Trigger CFG Download
2019 */
2020VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2021{
2022 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002023 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 v_VOID_t *pFileImage = NULL;
2025 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 v_VOID_t *pCfgBinary = NULL;
2027 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002029
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 if (NULL == pMac )
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002033 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 VOS_ASSERT(0);
2035 return VOS_STATUS_E_FAILURE;
2036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 /* get the number of bytes in the CFG Binary... */
2038 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2039 &cbFileImageSize );
2040 if ( VOS_STATUS_E_NOMEM != vosStatus )
2041 {
2042 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2043 "Error obtaining binary size" );
2044 goto fail;
2045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 // malloc a buffer to read in the Configuration binary file.
2047 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002048 if ( NULL == pFileImage )
2049 {
2050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2051 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2052 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002053 vosStatus = VOS_STATUS_E_NOMEM;
2054 goto fail;
2055 }
2056
2057 /* Get the entire CFG file image... */
2058 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2059 &cbFileImageSize );
2060 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2061 {
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2063 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2064 cbFileImageSize );
2065 goto fail;
2066 }
2067
2068 /*
2069 * Validate the binary image. This function will return a pointer
2070 * and length where the CFG binary is located within the binary image file.
2071 */
2072 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2073 &pCfgBinary, &cbCfgBinarySize );
2074 if ( VOS_FALSE == bStatus )
2075 {
2076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2077 "Error: Cannot find STA CFG in binary image file" );
2078 vosStatus = VOS_STATUS_E_FAILURE;
2079 goto fail;
2080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002081 /*
2082 * TODO: call the config download function
2083 * for now calling the existing cfg download API
2084 */
2085 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002086 vosStatus = VOS_STATUS_SUCCESS;
2087
2088 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002089
2090fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002091 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 return vosStatus;
2093}
Jeff Johnson295189b2012-06-20 16:38:30 -07002094/* -----------------------------------------------------------------
2095 * WDI interface
2096 * -----------------------------------------------------------------
2097 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002098/*
2099 * FUNCTION: WDA_suspendDataTxCallback
2100 * call back function called from TL after suspend Transmission
2101 */
2102VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2103 v_U8_t* ucSTAId,
2104 VOS_STATUS vosStatus)
2105{
2106 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002108 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 if (NULL == pWDA )
2110 {
2111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002112 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 VOS_ASSERT(0);
2114 return VOS_STATUS_E_FAILURE;
2115 }
2116 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2117 {
2118 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2119 }
2120 else
2121 {
2122 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 /* Trigger the event to bring the WDA TL suspend function to come
2125 * out of wait*/
2126 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2127 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2128 {
2129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2130 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 /* If TL suspended had timedout before this callback was called, resume back
2133 * TL.*/
2134 if (pWDA->txSuspendTimedOut)
2135 {
2136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2137 "Late TLSuspendCallback, resuming TL back again\n");
2138 WDA_ResumeDataTx(pWDA);
2139 pWDA->txSuspendTimedOut = FALSE;
2140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 return VOS_STATUS_SUCCESS;
2142}
Jeff Johnson295189b2012-06-20 16:38:30 -07002143/*
2144 * FUNCTION: WDA_suspendDataTx
2145 * Update TL to suspend the data Transmission
2146 */
2147VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2148{
2149 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2150 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002151
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002153 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 if (pWDA->txSuspendTimedOut)
2156 {
2157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2158 "TL suspend timedout previously, CB not called yet\n");
2159 return status;
2160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 /* Reset the event to be not signalled */
2162 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2163 if(!VOS_IS_STATUS_SUCCESS(status))
2164 {
2165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2166 "VOS Event reset failed - status = %d\n",status);
2167 return VOS_STATUS_E_FAILURE;
2168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002170 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 WDA_SuspendDataTxCallback);
2172 if(status != VOS_STATUS_SUCCESS)
2173 {
2174 return status;
2175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 /* Wait for the event to be set by the TL, to get the response of
2177 * suspending the TX queues, this event should be set by the Callback
2178 * function called by TL*/
2179 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2180 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2181 if(!VOS_IS_STATUS_SUCCESS(status))
2182 {
2183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2184 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002185 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 /* Set this flag to true when TL suspend times out, so that when TL
2187 * suspend eventually happens and calls the callback, TL can be resumed
2188 * right away by looking at this flag when true.*/
2189 pWDA->txSuspendTimedOut = TRUE;
2190 }
2191 else
2192 {
2193 pWDA->txSuspendTimedOut = FALSE;
2194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2196 {
2197 status = VOS_STATUS_SUCCESS;
2198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 return status;
2200}
Jeff Johnson295189b2012-06-20 16:38:30 -07002201/*
2202 * FUNCTION: WDA_resumeDataTx
2203 * Update TL to resume the data Transmission
2204 */
2205VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2206{
2207 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002208
2209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002210 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002211
2212 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 return status;
2214}
Jeff Johnson295189b2012-06-20 16:38:30 -07002215/*
2216 * FUNCTION: WDA_InitScanReqCallback
2217 * Trigger Init SCAN callback
2218 */
2219void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2220{
2221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2222 tWDA_CbContext *pWDA;
2223 tInitScanParams *pWDA_ScanParam ;
2224 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002226 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 if(NULL == pWdaParams)
2228 {
2229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002231 VOS_ASSERT(0) ;
2232 return ;
2233 }
2234 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2235 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 if(NULL == pWDA_ScanParam)
2237 {
2238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002239 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002240 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002241 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2242 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 return ;
2244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 if(WDI_STATUS_SUCCESS != wdiStatus)
2246 {
2247 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 if(VOS_STATUS_SUCCESS != status)
2249 {
2250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002251 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002252 }
2253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* free WDI command buffer */
2255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002257
Jeff Johnson295189b2012-06-20 16:38:30 -07002258
2259 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002260 /* without converting the Status to Failure or Success Just
2261 pass the same status to lim */
2262 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002263 /* send SCAN RSP message back to PE */
2264 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 return ;
2266}
2267
2268/*
2269 * FUNCTION: WDA_ProcessInitScanReq
2270 * Trigger Init SCAN in DAL
2271 */
2272VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2273 tInitScanParams *initScanParams)
2274{
2275 WDI_Status status = WDI_STATUS_SUCCESS ;
2276 WDI_InitScanReqParamsType *wdiInitScanParam =
2277 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2278 sizeof(WDI_InitScanReqParamsType)) ;
2279 tWDA_ReqParams *pWdaParams;
2280 tANI_U8 i = 0;
2281
2282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 if(NULL == wdiInitScanParam)
2285 {
2286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002287 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 VOS_ASSERT(0);
2289 return VOS_STATUS_E_NOMEM;
2290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2292 if(NULL == pWdaParams)
2293 {
2294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 VOS_ASSERT(0);
2297 vos_mem_free(wdiInitScanParam);
2298 return VOS_STATUS_E_NOMEM;
2299 }
2300
2301 /* Copy init Scan params to WDI structure */
2302 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2303 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2304 sizeof(tSirMacAddr)) ;
2305 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2306 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2307 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2309 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2311 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2313 {
2314 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2315 initScanParams->scanEntry.bssIdx[i] ;
2316 }
2317
2318 /* if Frame length, copy macMgmtHdr or WDI structure */
2319 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2320 {
2321 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2322 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2323 }
2324 wdiInitScanParam->wdiReqStatusCB = NULL ;
2325
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 /* Store Init Req pointer, as this will be used for response */
2327 pWdaParams->pWdaContext = pWDA;
2328 pWdaParams->wdaMsgParam = initScanParams;
2329 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 /* first try to suspend TX */
2331 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 if(WDI_STATUS_SUCCESS != status)
2333 {
2334 goto handleWdiFailure;
2335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 /* call DAL API to pass init scan request to DAL */
2337 status = WDI_InitScanReq(wdiInitScanParam,
2338 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 if(IS_WDI_STATUS_FAILURE(status))
2340 {
2341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2342 "error in WDA Init Scan, Resume Tx " );
2343 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 VOS_ASSERT(0) ;
2345
2346 goto handleWdiFailure;
2347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002349handleWdiFailure:
2350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2351 "Failure in WDI Api, free all the memory " );
2352 /* free WDI command buffer */
2353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2354 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 /* send Failure to PE */
2356 initScanParams->status = eSIR_FAILURE ;
2357 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 return CONVERT_WDI2VOS_STATUS(status) ;
2359}
2360
Jeff Johnson295189b2012-06-20 16:38:30 -07002361/*
2362 * FUNCTION: WDA_StartScanReqCallback
2363 * send Start SCAN RSP back to PE
2364 */
2365void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2366 void* pUserData)
2367{
2368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2369 tWDA_CbContext *pWDA;
2370 tStartScanParams *pWDA_ScanParam;
2371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002372 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 if(NULL == pWdaParams)
2374 {
2375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002376 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002377 VOS_ASSERT(0) ;
2378 return ;
2379 }
2380 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2381 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 if(NULL == pWDA_ScanParam)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002387 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 return ;
2389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002393 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002395 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 return ;
2397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2399 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002400
Jeff Johnson295189b2012-06-20 16:38:30 -07002401
2402 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002403 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 /* send SCAN RSP message back to PE */
2405 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 return ;
2407}
2408
Jeff Johnson295189b2012-06-20 16:38:30 -07002409/*
2410 * FUNCTION: WDA_ProcessStartScanReq
2411 * Trigger start SCAN in WDI
2412 */
2413VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2414 tStartScanParams *startScanParams)
2415{
2416 WDI_Status status = WDI_STATUS_SUCCESS;
2417 WDI_StartScanReqParamsType *wdiStartScanParams =
2418 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2419 sizeof(WDI_StartScanReqParamsType)) ;
2420 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002422 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 if(NULL == wdiStartScanParams)
2424 {
2425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 VOS_ASSERT(0);
2428 return VOS_STATUS_E_NOMEM;
2429 }
2430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2431 if(NULL == pWdaParams)
2432 {
2433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 VOS_ASSERT(0);
2436 vos_mem_free(wdiStartScanParams);
2437 return VOS_STATUS_E_NOMEM;
2438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 /* Copy init Scan params to WDI structure */
2440 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2441 wdiStartScanParams->wdiReqStatusCB = NULL ;
2442
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 /* Store Init Req pointer, as this will be used for response */
2444 /* store Params pass it to WDI */
2445 pWdaParams->pWdaContext = pWDA;
2446 pWdaParams->wdaMsgParam = startScanParams;
2447 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 /* call DAL API to pass init scan request to DAL */
2449 status = WDI_StartScanReq(wdiStartScanParams,
2450 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 /* failure returned by WDI API */
2452 if(IS_WDI_STATUS_FAILURE(status))
2453 {
2454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2455 "Failure in Start Scan WDI API, free all the memory "
2456 "It should be due to previous abort scan." );
2457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2458 vos_mem_free(pWdaParams) ;
2459 startScanParams->status = eSIR_FAILURE ;
2460 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2461 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002462 return CONVERT_WDI2VOS_STATUS(status) ;
2463}
Jeff Johnson295189b2012-06-20 16:38:30 -07002464/*
2465 * FUNCTION: WDA_EndScanReqCallback
2466 * END SCAN callback
2467 */
2468void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2469{
2470 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2471 tWDA_CbContext *pWDA;
2472 tEndScanParams *endScanParam;
2473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(NULL == pWdaParams)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0) ;
2480 return ;
2481 }
2482 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2483 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 if(NULL == endScanParam)
2485 {
2486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2490 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 return ;
2492 }
2493
2494 /* Free WDI command buffer */
2495 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2496 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002498 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 /* send response back to PE */
2500 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2501 return ;
2502}
2503
Jeff Johnson295189b2012-06-20 16:38:30 -07002504/*
2505 * FUNCTION: WDA_ProcessEndScanReq
2506 * Trigger END SCAN in WDI
2507 */
2508VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2509 tEndScanParams *endScanParams)
2510{
2511 WDI_Status status = WDI_STATUS_SUCCESS;
2512 WDI_EndScanReqParamsType *wdiEndScanParams =
2513 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2514 sizeof(WDI_EndScanReqParamsType)) ;
2515 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002517 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002518 if(NULL == wdiEndScanParams)
2519 {
2520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_ASSERT(0);
2523 return VOS_STATUS_E_NOMEM;
2524 }
2525 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2526 if(NULL == pWdaParams)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_ASSERT(0);
2531 vos_mem_free(wdiEndScanParams);
2532 return VOS_STATUS_E_NOMEM;
2533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* Copy init Scan params to WDI structure */
2535 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2536 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 /* Store Init Req pointer, as this will be used for response */
2538 /* store Params pass it to WDI */
2539 pWdaParams->pWdaContext = pWDA;
2540 pWdaParams->wdaMsgParam = endScanParams;
2541 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 /* call DAL API to pass init scan request to DAL */
2543 status = WDI_EndScanReq(wdiEndScanParams,
2544 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 if(IS_WDI_STATUS_FAILURE(status))
2546 {
2547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2548 "Failure in End Scan WDI API, free all the memory "
2549 "It should be due to previous abort scan." );
2550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2551 vos_mem_free(pWdaParams) ;
2552 endScanParams->status = eSIR_FAILURE ;
2553 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2554 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 return CONVERT_WDI2VOS_STATUS(status) ;
2556}
Jeff Johnson295189b2012-06-20 16:38:30 -07002557/*
2558 * FUNCTION: WDA_FinishScanReqCallback
2559 * Trigger Finish SCAN callback
2560 */
2561void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2562{
2563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2564 tWDA_CbContext *pWDA;
2565 tFinishScanParams *finishScanParam;
2566 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002568 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 if(NULL == pWdaParams)
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002572 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002573 VOS_ASSERT(0) ;
2574 return ;
2575 }
2576
2577 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2578 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 if(NULL == finishScanParam)
2580 {
2581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002582 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002584 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2585 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 return ;
2587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2589 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 /*
2591 * Now Resume TX, if we reached here means, TX is already suspended, we
2592 * have to resume it unconditionaly
2593 */
2594 status = WDA_ResumeDataTx(pWDA) ;
2595
2596 if(VOS_STATUS_SUCCESS != status)
2597 {
2598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002599 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002601 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002602 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2603 return ;
2604}
Jeff Johnson295189b2012-06-20 16:38:30 -07002605/*
2606 * FUNCTION: WDA_ProcessFinshScanReq
2607 * Trigger Finish SCAN in WDI
2608 */
2609VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2610 tFinishScanParams *finishScanParams)
2611{
2612 WDI_Status status = WDI_STATUS_SUCCESS;
2613 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2614 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2615 sizeof(WDI_FinishScanReqParamsType)) ;
2616 tWDA_ReqParams *pWdaParams ;
2617 tANI_U8 i = 0;
2618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002619 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 if(NULL == wdiFinishScanParams)
2621 {
2622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 VOS_ASSERT(0);
2625 return VOS_STATUS_E_NOMEM;
2626 }
2627 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2628 if(NULL == pWdaParams)
2629 {
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002632 VOS_ASSERT(0);
2633 vos_mem_free(wdiFinishScanParams);
2634 return VOS_STATUS_E_NOMEM;
2635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 /* Copy init Scan params to WDI structure */
2637 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2638 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2639 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2641 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2642 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2643 finishScanParams->frameLength ;
2644 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2645 finishScanParams->currentOperChannel ;
2646 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2647 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2648 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002649 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2650 {
2651 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2652 finishScanParams->scanEntry.bssIdx[i] ;
2653 }
2654
2655
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 /* if Frame length, copy macMgmtHdr ro WDI structure */
2657 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2658 {
2659 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2660 &finishScanParams->macMgmtHdr,
2661 sizeof(WDI_MacMgmtHdr)) ;
2662 }
2663 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 /* Store Init Req pointer, as this will be used for response */
2665 /* store Params pass it to WDI */
2666 pWdaParams->pWdaContext = pWDA;
2667 pWdaParams->wdaMsgParam = finishScanParams;
2668 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 /* call DAL API to pass init scan request to DAL */
2670 status = WDI_FinishScanReq(wdiFinishScanParams,
2671 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002672
Jeff Johnson295189b2012-06-20 16:38:30 -07002673
2674 /*
2675 * WDI API returns failure..
2676 */
2677 if(IS_WDI_STATUS_FAILURE( status))
2678 {
2679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2680 "Failure in Finish Scan WDI API, free all the memory " );
2681 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2682 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 finishScanParams->status = eSIR_FAILURE ;
2684 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 return CONVERT_WDI2VOS_STATUS(status) ;
2687}
Jeff Johnson295189b2012-06-20 16:38:30 -07002688/*---------------------------------------------------------------------
2689 * ASSOC API's
2690 *---------------------------------------------------------------------
2691 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002692/*
2693 * FUNCTION: WDA_JoinReqCallback
2694 * Trigger Init SCAN callback
2695 */
2696void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2697{
2698 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2699 tWDA_CbContext *pWDA;
2700 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 if(NULL == pWdaParams)
2704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_ASSERT(0) ;
2708 return ;
2709 }
2710 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2711 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2713 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 /* reset macBSSID */
2715 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 /* reset macSTASelf */
2717 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002718 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002720 return ;
2721}
Jeff Johnson295189b2012-06-20 16:38:30 -07002722/*
2723 * FUNCTION: WDA_ProcessJoinReq
2724 * Trigger Join REQ in WDI
2725 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002726VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2727 tSwitchChannelParams* joinReqParam)
2728{
2729 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 WDI_JoinReqParamsType *wdiJoinReqParam =
2731 (WDI_JoinReqParamsType *)vos_mem_malloc(
2732 sizeof(WDI_JoinReqParamsType)) ;
2733 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002735 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002736 if(NULL == wdiJoinReqParam)
2737 {
2738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002741 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 return VOS_STATUS_E_NOMEM;
2743 }
2744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2745 if(NULL == pWdaParams)
2746 {
2747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002748 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002749 VOS_ASSERT(0);
2750 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002751 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 return VOS_STATUS_E_NOMEM;
2753 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002754
2755 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2756 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2757 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2758 {
2759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2760 "%s: received join request when BSSID or self-STA is NULL "
2761 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002762 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002763 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2764 VOS_ASSERT(0);
2765 vos_mem_free(wdiJoinReqParam);
2766 vos_mem_free(pWdaParams);
2767 joinReqParam->status = eSIR_FAILURE ;
2768 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2769 return VOS_STATUS_E_INVAL;
2770 }
2771
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 /* copy the BSSID for pWDA */
2773 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2774 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2776 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2778 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002779#ifdef WLAN_FEATURE_VOWIFI
2780 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2781 joinReqParam->maxTxPower ;
2782#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2784 joinReqParam->localPowerConstraint ;
2785#endif
2786 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2787 joinReqParam->secondaryChannelOffset ;
2788 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2789
2790 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 /* Store Init Req pointer, as this will be used for response */
2792 /* store Params pass it to WDI */
2793 pWdaParams->pWdaContext = pWDA;
2794 pWdaParams->wdaMsgParam = joinReqParam;
2795 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 status = WDI_JoinReq(wdiJoinReqParam,
2797 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(IS_WDI_STATUS_FAILURE(status))
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2801 "Failure in Join WDI API, free all the memory " );
2802 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2803 vos_mem_free(pWdaParams) ;
2804 joinReqParam->status = eSIR_FAILURE ;
2805 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002807 return CONVERT_WDI2VOS_STATUS(status) ;
2808}
Jeff Johnson295189b2012-06-20 16:38:30 -07002809/*
2810 * FUNCTION: WDA_SwitchChannelReqCallback
2811 * send Switch channel RSP back to PE
2812 */
2813void WDA_SwitchChannelReqCallback(
2814 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2815{
2816 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2817 tWDA_CbContext *pWDA;
2818 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 if(NULL == pWdaParams)
2822 {
2823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002824 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 VOS_ASSERT(0) ;
2826 return ;
2827 }
2828 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2829 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2830
2831#ifdef WLAN_FEATURE_VOWIFI
2832 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2833#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2835 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002837 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002838 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 return ;
2840}
Jeff Johnson295189b2012-06-20 16:38:30 -07002841/*
2842 * FUNCTION: WDA_ProcessChannelSwitchReq
2843 * Request to WDI to switch channel REQ params.
2844 */
2845VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2846 tSwitchChannelParams *pSwitchChanParams)
2847{
2848 WDI_Status status = WDI_STATUS_SUCCESS ;
2849 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2850 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2851 sizeof(WDI_SwitchChReqParamsType)) ;
2852 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 if(NULL == wdiSwitchChanParam)
2856 {
2857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 VOS_ASSERT(0);
2860 return VOS_STATUS_E_NOMEM;
2861 }
2862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2863 if(NULL == pWdaParams)
2864 {
2865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 VOS_ASSERT(0);
2868 vos_mem_free(wdiSwitchChanParam);
2869 return VOS_STATUS_E_NOMEM;
2870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2872#ifndef WLAN_FEATURE_VOWIFI
2873 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2874 pSwitchChanParams->localPowerConstraint;
2875#endif
2876 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2877 pSwitchChanParams->secondaryChannelOffset;
2878 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002879 /* Store req pointer, as this will be used for response */
2880 /* store Params pass it to WDI */
2881 pWdaParams->pWdaContext = pWDA;
2882 pWdaParams->wdaMsgParam = pSwitchChanParams;
2883 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002884#ifdef WLAN_FEATURE_VOWIFI
2885 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2886 = pSwitchChanParams->maxTxPower;
2887 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2888 pSwitchChanParams ->selfStaMacAddr,
2889 sizeof(tSirMacAddr));
2890#endif
2891 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2892 pSwitchChanParams->bssId,
2893 sizeof(tSirMacAddr));
2894
2895 status = WDI_SwitchChReq(wdiSwitchChanParam,
2896 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 if(IS_WDI_STATUS_FAILURE(status))
2898 {
2899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2900 "Failure in process channel switch Req WDI API, free all the memory " );
2901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2902 vos_mem_free(pWdaParams) ;
2903 pSwitchChanParams->status = eSIR_FAILURE ;
2904 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 return CONVERT_WDI2VOS_STATUS(status) ;
2907}
Jeff Johnson295189b2012-06-20 16:38:30 -07002908/*
2909 * FUNCTION: WDA_ConfigBssReqCallback
2910 * config BSS Req Callback, called by WDI
2911 */
2912void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2913 ,void* pUserData)
2914{
2915 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2916 tWDA_CbContext *pWDA;
2917 tAddBssParams *configBssReqParam;
2918 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002920 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 if(NULL == pWdaParams)
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0) ;
2926 return ;
2927 }
2928 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2929 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2930 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002932 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2934 {
2935 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2936 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2938 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2939 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2940
2941 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2942 {
2943 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2944 {
2945 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2946 staConfigBssParam->staType = STA_ENTRY_BSSID;
2947 }
2948 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2949 (staConfigBssParam->staType == STA_ENTRY_SELF))
2950 {
2951 /* This is the 1st add BSS Req for the BTAMP STA */
2952 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2953 staConfigBssParam->staType = STA_ENTRY_BSSID;
2954 }
2955 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2956 (staConfigBssParam->staType == STA_ENTRY_PEER))
2957 {
2958 /* This is the 2nd ADD BSS Request that is sent
2959 * on the BTAMP STA side. The Sta type is
2960 * set to STA_ENTRY_PEER here.*/
2961 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2962 }
2963 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2964 (staConfigBssParam->staType == STA_ENTRY_SELF))
2965 {
2966 /* statype is already set by PE.
2967 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2968 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2969 staConfigBssParam->staType = STA_ENTRY_BSSID;
2970 }
2971 else
2972 {
2973 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2974 staConfigBssParam->staType = STA_ENTRY_PEER;
2975 }
2976 }
2977 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2978 {
2979 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2980 staConfigBssParam->staType = STA_ENTRY_SELF;
2981 }
2982 else
2983 {
2984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2985 "Invalid operation mode specified");
2986 VOS_ASSERT(0);
2987 }
2988
2989 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002990 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2994 sizeof(tSirMacAddr));
2995 staConfigBssParam->txChannelWidthSet =
2996 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2998 staConfigBssParam->htCapable)
2999 {
3000 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3001 wdiConfigBssRsp->ucBSSIdx;
3002 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3003 WDA_VALID_STA_INDEX ;
3004 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3006 wdiConfigBssRsp->ucBSSIdx,
3007 wdiConfigBssRsp->ucSTAIdx))
3008 {
3009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003010 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 VOS_ASSERT(0) ;
3012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003013 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3014 {
3015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003016 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003017 VOS_ASSERT(0) ;
3018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003019#ifdef WLAN_FEATURE_VOWIFI
3020 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3021#endif
3022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3024 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 return ;
3027}
Jeff Johnson295189b2012-06-20 16:38:30 -07003028/*
3029 * FUNCTION: WDA_UpdateEdcaParamsForAC
3030 * Update WDI EDCA params with PE edca params
3031 */
3032void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3033 WDI_EdcaParamRecord *wdiEdcaParam,
3034 tSirMacEdcaParamRecord *macEdcaParam)
3035{
3036 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3037 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3038 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3039 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3040 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3041 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3042}
Jeff Johnson295189b2012-06-20 16:38:30 -07003043/*
3044 * FUNCTION: WDA_ProcessConfigBssReq
3045 * Configure BSS before starting Assoc with AP
3046 */
3047VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3048 tAddBssParams* configBssReqParam)
3049{
3050 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303051 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003054 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303055 if (NULL == configBssReqParam)
3056 {
3057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3058 "%s: configBssReqParam is NULL", __func__);
3059 return VOS_STATUS_E_INVAL;
3060 }
3061
3062 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3063 sizeof(WDI_ConfigBSSReqParamsType)) ;
3064
Jeff Johnson295189b2012-06-20 16:38:30 -07003065 if(NULL == wdiConfigBssReqParam)
3066 {
3067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 VOS_ASSERT(0);
3070 return VOS_STATUS_E_NOMEM;
3071 }
3072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3073 if(NULL == pWdaParams)
3074 {
3075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_ASSERT(0);
3078 vos_mem_free(wdiConfigBssReqParam);
3079 return VOS_STATUS_E_NOMEM;
3080 }
Kiran4a17ebe2013-01-31 10:43:43 -08003081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3082 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3085 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 /* Store Init Req pointer, as this will be used for response */
3087 /* store Params pass it to WDI */
3088 pWdaParams->pWdaContext = pWDA;
3089 pWdaParams->wdaMsgParam = configBssReqParam;
3090 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3092 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 if(IS_WDI_STATUS_FAILURE(status))
3094 {
3095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3096 "Failure in Config BSS WDI API, free all the memory " );
3097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3098 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003102 return CONVERT_WDI2VOS_STATUS(status) ;
3103}
Jeff Johnson295189b2012-06-20 16:38:30 -07003104#ifdef ENABLE_HAL_COMBINED_MESSAGES
3105/*
3106 * FUNCTION: WDA_PostAssocReqCallback
3107 * Post ASSOC req callback, send RSP back to PE
3108 */
3109void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3110 void* pUserData)
3111{
3112 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3113 tPostAssocParams *postAssocReqParam =
3114 (tPostAssocParams *)pWDA->wdaMsgParam ;
3115 /*STA context within the BSS Params*/
3116 tAddStaParams *staPostAssocParam =
3117 &postAssocReqParam->addBssParams.staContext ;
3118 /*STA Params for self STA*/
3119 tAddStaParams *selfStaPostAssocParam =
3120 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003122 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003124 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3126 {
3127 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3128 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3129 sizeof(tSirMacAddr)) ;
3130 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3131 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3132 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3134 }
3135 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3136 pWDA->wdaWdiApiMsgParam = NULL;
3137 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 return ;
3140}
Jeff Johnson295189b2012-06-20 16:38:30 -07003141/*
3142 * FUNCTION: WDA_ProcessPostAssocReq
3143 * Trigger POST ASSOC processing in WDI
3144 */
3145VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3146 tPostAssocParams *postAssocReqParam)
3147{
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 WDI_Status status = WDI_STATUS_SUCCESS ;
3149
3150 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3151 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3152 sizeof(WDI_PostAssocReqParamsType)) ;
3153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003154 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003155
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if(NULL == wdiPostAssocReqParam)
3157 {
3158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_NOMEM;
3162 }
3163
3164 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 return VOS_STATUS_E_FAILURE;
3170 }
3171
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 /* update BSS params into WDI structure */
3173 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3174 &postAssocReqParam->addBssParams) ;
3175 /* update STA params into WDI structure */
3176 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3177 &postAssocReqParam->addStaParams) ;
3178
3179 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3180 postAssocReqParam->addBssParams.highPerformance;
3181 WDA_UpdateEdcaParamsForAC(pWDA,
3182 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3183 &postAssocReqParam->addBssParams.acbe);
3184 WDA_UpdateEdcaParamsForAC(pWDA,
3185 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3186 &postAssocReqParam->addBssParams.acbk);
3187 WDA_UpdateEdcaParamsForAC(pWDA,
3188 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3189 &postAssocReqParam->addBssParams.acvi);
3190 WDA_UpdateEdcaParamsForAC(pWDA,
3191 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3192 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 /* Store Init Req pointer, as this will be used for response */
3194 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 /* store Params pass it to WDI */
3196 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3198 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 if(IS_WDI_STATUS_FAILURE(status))
3200 {
3201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3202 "Failure in Post Assoc WDI API, free all the memory " );
3203 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3204 pWDA->wdaWdiApiMsgParam = NULL;
3205 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 return CONVERT_WDI2VOS_STATUS(status) ;
3210}
3211#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003212/*
3213 * FUNCTION: WDA_AddStaReqCallback
3214 * ADD STA req callback, send RSP back to PE
3215 */
3216void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3217 void* pUserData)
3218{
3219 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3220 tWDA_CbContext *pWDA;
3221 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003223 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 if(NULL == pWdaParams)
3225 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 VOS_ASSERT(0) ;
3228 return ;
3229 }
3230 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3231 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003233 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3235 {
3236 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3237 /*TODO: UMAC structure doesn't have these fields*/
3238 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3239 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3240 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3241 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3242 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3243 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003244#ifdef FEATURE_WLAN_TDLS
3245 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3246 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3247#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003248 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003249#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 {
3251 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3252 wdiConfigStaRsp->ucBssIdx;
3253 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3254 WDA_VALID_STA_INDEX ;
3255 }
3256 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3257 {
3258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003259 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 VOS_ASSERT(0) ;
3261 return ;
3262 }
3263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3265 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 return ;
3268}
Jeff Johnson295189b2012-06-20 16:38:30 -07003269/*
3270 * FUNCTION: WDA_ConfigStaReq
3271 * Trigger Config STA processing in WDI
3272 */
3273VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3274 tAddStaParams *addStaReqParam)
3275{
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3278 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3279 sizeof(WDI_ConfigSTAReqParamsType)) ;
3280 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if(NULL == wdiConfigStaReqParam)
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003286 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 VOS_ASSERT(0);
3288 return VOS_STATUS_E_NOMEM;
3289 }
3290 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3291 if(NULL == pWdaParams)
3292 {
3293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 VOS_ASSERT(0);
3296 vos_mem_free(wdiConfigStaReqParam);
3297 return VOS_STATUS_E_NOMEM;
3298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 /* update STA params into WDI structure */
3301 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3302 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003303 /* Store Init Req pointer, as this will be used for response */
3304 /* store Params pass it to WDI */
3305 pWdaParams->pWdaContext = pWDA;
3306 pWdaParams->wdaMsgParam = addStaReqParam;
3307 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3309 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 if(IS_WDI_STATUS_FAILURE(status))
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3313 "Failure in Config STA WDI API, free all the memory " );
3314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3315 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 return CONVERT_WDI2VOS_STATUS(status) ;
3320}
Jeff Johnson295189b2012-06-20 16:38:30 -07003321/*
3322 * FUNCTION: WDA_DelBSSReqCallback
3323 * Dens DEL BSS RSP back to PE
3324 */
3325void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3326 void* pUserData)
3327{
3328 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3329 tWDA_CbContext *pWDA;
3330 tDeleteBssParams *delBssReqParam;
3331 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003333 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 if(NULL == pWdaParams)
3335 {
3336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003337 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 VOS_ASSERT(0) ;
3339 return ;
3340 }
3341 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3342 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003343 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3345 {
3346 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3347 sizeof(tSirMacAddr)) ;
3348 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3350 {
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 VOS_ASSERT(0) ;
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3356 {
3357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_ASSERT(0) ;
3360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3362 {
3363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003364 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 VOS_ASSERT(0) ;
3366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3368 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003369 /* reset the the system role*/
3370 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3371
3372 /* Reset the BA related information */
3373 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3374 {
3375 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3376 {
3377 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3378 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3379 /* Reset framesTxed counters here */
3380 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3381 {
3382 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3383 }
3384 }
3385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 return ;
3388}
3389
Jeff Johnson295189b2012-06-20 16:38:30 -07003390/*
3391 * FUNCTION: WDA_ProcessDelBssReq
3392 * Init DEL BSS req with WDI
3393 */
3394VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3395 tDeleteBssParams *delBssParam)
3396{
3397 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3399 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3400 sizeof(WDI_DelBSSReqParamsType)) ;
3401 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003404 if(NULL == wdiDelBssReqParam)
3405 {
3406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 VOS_ASSERT(0);
3409 return VOS_STATUS_E_NOMEM;
3410 }
3411 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3412 if(NULL == pWdaParams)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_ASSERT(0);
3417 vos_mem_free(wdiDelBssReqParam);
3418 return VOS_STATUS_E_NOMEM;
3419 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3421 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3422
3423 /* Store Init Req pointer, as this will be used for response */
3424 /* store Params pass it to WDI */
3425 pWdaParams->pWdaContext = pWDA;
3426 pWdaParams->wdaMsgParam = delBssParam;
3427 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003428 status = WDI_DelBSSReq(wdiDelBssReqParam,
3429 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 if(IS_WDI_STATUS_FAILURE(status))
3431 {
3432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3433 "Failure in Del BSS WDI API, free all the memory " );
3434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3435 vos_mem_free(pWdaParams) ;
3436 delBssParam->status = eSIR_FAILURE ;
3437 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 return CONVERT_WDI2VOS_STATUS(status) ;
3440}
Jeff Johnson295189b2012-06-20 16:38:30 -07003441/*
3442 * FUNCTION: WDA_DelSTAReqCallback
3443 * Dens DEL STA RSP back to PE
3444 */
3445void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3446 void* pUserData)
3447{
3448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3449 tWDA_CbContext *pWDA;
3450 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003452 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 if(NULL == pWdaParams)
3454 {
3455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003456 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 VOS_ASSERT(0) ;
3458 return ;
3459 }
3460 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3461 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003462 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3464 {
3465 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3466 {
3467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003468 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_ASSERT(0) ;
3470 }
3471 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3472 }
3473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3474 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 /*Reset the BA information corresponding to this STAIdx */
3476 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3477 WDA_INVALID_STA_INDEX;
3478 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3479
3480 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 return ;
3482}
Jeff Johnson295189b2012-06-20 16:38:30 -07003483/*
3484 * FUNCTION: WDA_ProcessDelStaReq
3485 * Init DEL STA req with WDI
3486 */
3487VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3488 tDeleteStaParams *delStaParam)
3489{
3490 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3492 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3493 sizeof(WDI_DelSTAReqParamsType)) ;
3494 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 if(NULL == wdiDelStaReqParam)
3498 {
3499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 VOS_ASSERT(0);
3502 return VOS_STATUS_E_NOMEM;
3503 }
3504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3505 if(NULL == pWdaParams)
3506 {
3507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 VOS_ASSERT(0);
3510 vos_mem_free(wdiDelStaReqParam);
3511 return VOS_STATUS_E_NOMEM;
3512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003513 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3514 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 /* Store Init Req pointer, as this will be used for response */
3516 /* store Params pass it to WDI */
3517 pWdaParams->pWdaContext = pWDA;
3518 pWdaParams->wdaMsgParam = delStaParam;
3519 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 status = WDI_DelSTAReq(wdiDelStaReqParam,
3521 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 if(IS_WDI_STATUS_FAILURE(status))
3523 {
3524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3525 "Failure in Del STA WDI API, free all the memory status = %d",
3526 status );
3527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3528 vos_mem_free(pWdaParams) ;
3529 delStaParam->status = eSIR_FAILURE ;
3530 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 return CONVERT_WDI2VOS_STATUS(status) ;
3533}
Jeff Johnson295189b2012-06-20 16:38:30 -07003534void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3535{
3536 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3537 tWDA_CbContext *pWDA;
3538 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 if(NULL == pWdaParams)
3542 {
3543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003544 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 VOS_ASSERT(0) ;
3546 return ;
3547 }
3548 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3549 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3551 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3553 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3554 pwdiAddSTASelfRsp->macSelfSta,
3555 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003557 return ;
3558}
Jeff Johnson295189b2012-06-20 16:38:30 -07003559/*
3560 * FUNCTION: WDA_ProcessAddStaSelfReq
3561 *
3562 */
3563VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3564{
3565 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003566 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3568 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3569 sizeof(WDI_AddSTASelfReqParamsType)) ;
3570 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003572 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 if( NULL == wdiAddStaSelfReq )
3574 {
3575 VOS_ASSERT( 0 );
3576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003577 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 return( VOS_STATUS_E_NOMEM );
3579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003581 if( NULL == pWdaParams )
3582 {
3583 VOS_ASSERT( 0 );
3584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003585 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 vos_mem_free(wdiAddStaSelfReq) ;
3587 return( VOS_STATUS_E_NOMEM );
3588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003591 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 /* Store Init Req pointer, as this will be used for response */
3593 /* store Params pass it to WDI */
3594 pWdaParams->pWdaContext = pWDA;
3595 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3596 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003597 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003598
Jeff Johnson43971f52012-07-17 12:26:56 -07003599 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 {
3601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3602 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003603 wstatus );
3604 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3606 vos_mem_free(pWdaParams) ;
3607 pAddStaSelfReq->status = eSIR_FAILURE ;
3608 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3609 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003610 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003611}
Jeff Johnson295189b2012-06-20 16:38:30 -07003612/*
3613 * FUNCTION: WDA_DelSTASelfRespCallback
3614 *
3615 */
3616void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3617 wdiDelStaSelfRspParams , void* pUserData)
3618{
3619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3620 tWDA_CbContext *pWDA;
3621 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003623 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003624 if (NULL == pWdaParams)
3625 {
3626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003627 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 VOS_ASSERT(0);
3629 return;
3630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3632 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003633 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003634 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003635
3636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3637 vos_mem_free(pWdaParams) ;
3638
3639 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003640 return ;
3641}
Jeff Johnson295189b2012-06-20 16:38:30 -07003642/*
3643 * FUNCTION: WDA_DelSTASelfReqCallback
3644 *
3645 */
3646void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3647 void* pUserData)
3648{
3649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3650 tWDA_CbContext *pWDA;
3651 tDelStaSelfParams *delStaSelfParams;
3652
3653 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303654 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003655 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656
3657 if (NULL == pWdaParams)
3658 {
3659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003660 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 VOS_ASSERT(0);
3662 return;
3663 }
3664
3665 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3666 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3667
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003668 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003669
3670 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3671 {
3672 VOS_ASSERT(0);
3673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3674 vos_mem_free(pWdaParams) ;
3675 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3676 }
3677
3678 return ;
3679}
3680
3681/*
3682 * FUNCTION: WDA_DelSTASelfReq
3683 * Trigger Config STA processing in WDI
3684 */
3685VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3686 tDelStaSelfParams* pDelStaSelfReqParam)
3687{
3688 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003689 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 tWDA_ReqParams *pWdaParams = NULL;
3691 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3692 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3693 sizeof(WDI_DelSTASelfReqParamsType)) ;
3694
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003696 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003697 if( NULL == wdiDelStaSelfReq )
3698 {
3699 VOS_ASSERT( 0 );
3700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003701 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 return( VOS_STATUS_E_NOMEM );
3703 }
3704
3705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3706 if( NULL == pWdaParams )
3707 {
3708 VOS_ASSERT( 0 );
3709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003710 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 vos_mem_free(wdiDelStaSelfReq) ;
3712 return( VOS_STATUS_E_NOMEM );
3713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 pWdaParams->pWdaContext = pWDA;
3715 /* Store param pointer as passed in by caller */
3716 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3717 /* store Params pass it to WDI */
3718 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3720 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3721
3722 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3723 wdiDelStaSelfReq->pUserData = pWdaParams;
3724
Jeff Johnson43971f52012-07-17 12:26:56 -07003725 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003726 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3727
Jeff Johnson43971f52012-07-17 12:26:56 -07003728 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 {
3730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3731 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3732 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003733 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3735 vos_mem_free(pWdaParams) ;
3736 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3737 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3738 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003739 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740}
3741
Jeff Johnson295189b2012-06-20 16:38:30 -07003742/*
3743 * FUNCTION: WDA_SendMsg
3744 * Send Message back to PE
3745 */
3746void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3747 void *pBodyptr, tANI_U32 bodyVal)
3748{
3749 tSirMsgQ msg = {0} ;
3750 tANI_U32 status = VOS_STATUS_SUCCESS ;
3751 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003752 msg.type = msgType;
3753 msg.bodyval = bodyVal;
3754 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003755 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 if (VOS_STATUS_SUCCESS != status)
3757 {
3758 if(NULL != pBodyptr)
3759 {
3760 vos_mem_free(pBodyptr);
3761 }
3762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003763 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 VOS_ASSERT(0) ;
3765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003766 return ;
3767}
Jeff Johnson295189b2012-06-20 16:38:30 -07003768/*
3769 * FUNCTION: WDA_UpdateBSSParams
3770 * Translated WDA/PE BSS info into WDI BSS info..
3771 */
3772void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3773 WDI_ConfigBSSReqInfoType *wdiBssParams,
3774 tAddBssParams *wdaBssParams)
3775{
3776 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003777 /* copy bssReq Params to WDI structure */
3778 vos_mem_copy(wdiBssParams->macBSSID,
3779 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3780 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3781 sizeof(tSirMacAddr)) ;
3782 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3783 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3784 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003785 wdiBssParams->ucShortSlotTimeSupported =
3786 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003787 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3788 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3789 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3790 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3791 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3792
3793 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3794 wdiBssParams->ucTXOPProtectionFullSupport =
3795 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003796 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3797 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003798 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3800 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3801 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3802 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3803
Chet Lanctot186b5732013-03-18 10:26:30 -07003804 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3805
Jeff Johnson295189b2012-06-20 16:38:30 -07003806 /* copy SSID into WDI structure */
3807 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3808 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3809 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003810 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3811 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003813#ifdef WLAN_FEATURE_VOWIFI
3814 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3815#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003816 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003818#ifdef WLAN_FEATURE_VOWIFI_11R
3819 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003820 if(wdiBssParams->bExtSetStaKeyParamValid)
3821 {
3822 /* copy set STA key params to WDI structure */
3823 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3824 wdaBssParams->extSetStaKeyParam.staIdx;
3825 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3826 wdaBssParams->extSetStaKeyParam.encType;
3827 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3828 wdaBssParams->extSetStaKeyParam.wepType;
3829 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3830 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003831 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3832 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003833 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3835 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3836 {
3837 WDA_GetWepKeysFromCfg( pWDA,
3838 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3839 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3840 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3841 }
3842 else
3843 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3845 keyIndex++)
3846 {
3847 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3848 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3849 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3850 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3851 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3852 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003853 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3854 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3855 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3856 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3857 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3858 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3859 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3860 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003862 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3863 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 }
3865 }
3866 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3867 }
3868 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3869 {
3870 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3871 sizeof(wdaBssParams->extSetStaKeyParam) );
3872 }
3873#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003874#ifdef WLAN_FEATURE_11AC
3875 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3876 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3877#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003878
3879 return ;
3880}
Jeff Johnson295189b2012-06-20 16:38:30 -07003881/*
3882 * FUNCTION: WDA_UpdateSTAParams
3883 * Translated WDA/PE BSS info into WDI BSS info..
3884 */
3885void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3886 WDI_ConfigStaReqInfoType *wdiStaParams,
3887 tAddStaParams *wdaStaParams)
3888{
3889 tANI_U8 i = 0;
3890 /* Update STA params */
3891 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3892 sizeof(tSirMacAddr)) ;
3893 wdiStaParams->usAssocId = wdaStaParams->assocId;
3894 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003895 wdiStaParams->staIdx = wdaStaParams->staIdx;
3896
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 wdiStaParams->ucShortPreambleSupported =
3898 wdaStaParams->shortPreambleSupported;
3899 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3900 sizeof(tSirMacAddr)) ;
3901 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3902
3903 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3904
3905 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3906 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3907 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3908 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3909 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3910 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3911 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3912
3913 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3914 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 wdiStaParams->wdiSupportedRates.opRateMode =
3916 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3918 {
3919 wdiStaParams->wdiSupportedRates.llbRates[i] =
3920 wdaStaParams->supportedRates.llbRates[i];
3921 }
3922 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3923 {
3924 wdiStaParams->wdiSupportedRates.llaRates[i] =
3925 wdaStaParams->supportedRates.llaRates[i];
3926 }
3927 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3928 {
3929 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3930 wdaStaParams->supportedRates.aniLegacyRates[i];
3931 }
3932 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3933 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003934#ifdef WLAN_FEATURE_11AC
3935 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3936 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3937 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3938 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3939#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3941 {
3942 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3943 wdaStaParams->supportedRates.supportedMCSSet[i];
3944 }
3945 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3946 wdaStaParams->supportedRates.rxHighestDataRate;
3947
3948 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3949
3950 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3951
3952 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3953 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3954 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3955
3956 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3957 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3958 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3959 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003960 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003961#ifdef WLAN_FEATURE_11AC
3962 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3963 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003964 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003965#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003966 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3967 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 return ;
3969}
Jeff Johnson295189b2012-06-20 16:38:30 -07003970/*
3971 * -------------------------------------------------------------------------
3972 * CFG update to WDI
3973 * -------------------------------------------------------------------------
3974 */
3975
3976 /*
3977 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3978 * Convert the WNI CFG ID to HAL CFG ID
3979 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003980static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003981{
3982 switch(wniCfgId)
3983 {
3984 case WNI_CFG_STA_ID:
3985 return QWLAN_HAL_CFG_STA_ID;
3986 case WNI_CFG_CURRENT_TX_ANTENNA:
3987 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3988 case WNI_CFG_CURRENT_RX_ANTENNA:
3989 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3990 case WNI_CFG_LOW_GAIN_OVERRIDE:
3991 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3992 case WNI_CFG_POWER_STATE_PER_CHAIN:
3993 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3994 case WNI_CFG_CAL_PERIOD:
3995 return QWLAN_HAL_CFG_CAL_PERIOD;
3996 case WNI_CFG_CAL_CONTROL:
3997 return QWLAN_HAL_CFG_CAL_CONTROL;
3998 case WNI_CFG_PROXIMITY:
3999 return QWLAN_HAL_CFG_PROXIMITY;
4000 case WNI_CFG_NETWORK_DENSITY:
4001 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4002 case WNI_CFG_MAX_MEDIUM_TIME:
4003 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4004 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4005 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4006 case WNI_CFG_RTS_THRESHOLD:
4007 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4008 case WNI_CFG_SHORT_RETRY_LIMIT:
4009 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4010 case WNI_CFG_LONG_RETRY_LIMIT:
4011 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4012 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4013 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4014 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4015 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4016 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4017 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4018 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4019 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4020 case WNI_CFG_FIXED_RATE:
4021 return QWLAN_HAL_CFG_FIXED_RATE;
4022 case WNI_CFG_RETRYRATE_POLICY:
4023 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4024 case WNI_CFG_RETRYRATE_SECONDARY:
4025 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4026 case WNI_CFG_RETRYRATE_TERTIARY:
4027 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4028 case WNI_CFG_FORCE_POLICY_PROTECTION:
4029 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4030 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4031 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4032 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4033 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4034 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4035 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4036 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4037 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4038 case WNI_CFG_MAX_BA_SESSIONS:
4039 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4040 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4041 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4042 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4043 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4044 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4045 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4046 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4047 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4048 case WNI_CFG_STATS_PERIOD:
4049 return QWLAN_HAL_CFG_STATS_PERIOD;
4050 case WNI_CFG_CFP_MAX_DURATION:
4051 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4052#if 0 /*This is not part of CFG*/
4053 case WNI_CFG_FRAME_TRANS_ENABLED:
4054 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4055#endif
4056 case WNI_CFG_DTIM_PERIOD:
4057 return QWLAN_HAL_CFG_DTIM_PERIOD;
4058 case WNI_CFG_EDCA_WME_ACBK:
4059 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4060 case WNI_CFG_EDCA_WME_ACBE:
4061 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4062 case WNI_CFG_EDCA_WME_ACVI:
4063 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4064 case WNI_CFG_EDCA_WME_ACVO:
4065 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4066#if 0
4067 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4068 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4069 case WNI_CFG_TELE_BCN_TRANS_LI:
4070 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4071 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4072 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4073 case WNI_CFG_TELE_BCN_MAX_LI:
4074 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4075 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4076 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4077#endif
4078 case WNI_CFG_ENABLE_CLOSE_LOOP:
4079 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004080 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4081 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 default:
4083 {
4084 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4085 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4086 wniCfgId);
4087 return VOS_STATUS_E_INVAL;
4088 }
4089 }
4090}
Jeff Johnson295189b2012-06-20 16:38:30 -07004091/*
4092 * FUNCTION: WDA_UpdateCfgCallback
4093 *
4094 */
4095void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4096{
4097 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4098 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4099 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004101 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 /*
4103 * currently there is no response message is expected between PE and
4104 * WDA, Failure return from WDI is a ASSERT condition
4105 */
4106 if(WDI_STATUS_SUCCESS != wdiStatus)
4107 {
4108 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004109 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4111 }
4112
4113 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4114 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4115 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 return ;
4117}
Jeff Johnson295189b2012-06-20 16:38:30 -07004118/*
4119 * FUNCTION: WDA_UpdateCfg
4120 *
4121 */
4122VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4123{
4124
4125 WDI_Status status = WDI_STATUS_SUCCESS ;
4126 tANI_U32 val =0;
4127 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4128 tHalCfg *configData;
4129 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4130 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004132 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 if (NULL == pMac )
4134 {
4135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004136 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004137 return VOS_STATUS_E_FAILURE;
4138 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 if(WDA_START_STATE != pWDA->wdaState)
4140 {
4141 return VOS_STATUS_E_FAILURE;
4142 }
4143
4144 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4145 {
4146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004147 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004148 VOS_ASSERT(0);
4149 return VOS_STATUS_E_FAILURE;
4150 }
4151
4152 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4153 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004154 if(NULL == wdiCfgReqParam)
4155 {
4156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004157 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 VOS_ASSERT(0);
4159 return VOS_STATUS_E_NOMEM;
4160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4162 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 if(NULL == wdiCfgReqParam->pConfigBuffer)
4164 {
4165 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004166 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 vos_mem_free(wdiCfgReqParam);
4168 VOS_ASSERT(0);
4169 return VOS_STATUS_E_NOMEM;
4170 }
4171
4172 /*convert the WNI CFG Id to HAL CFG Id*/
4173 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4174 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4175
4176 /*TODO: revisit this for handling string parameters */
4177 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4178 &val) != eSIR_SUCCESS)
4179 {
4180 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4181 "Failed to cfg get id %d\n", cfgParam->bodyval);
4182 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4183 vos_mem_free(wdiCfgReqParam);
4184 return eSIR_FAILURE;
4185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004186 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4187 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4188 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4189 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4190 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4191
4192 /* store Params pass it to WDI */
4193 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4195 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4196 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004197 if(IS_WDI_STATUS_FAILURE(status))
4198 {
4199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4200 "Failure in Update CFG WDI API, free all the memory " );
4201 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4202 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4203 pWDA->wdaWdiCfgApiMsgParam = NULL;
4204 /* Failure is not expected */
4205 VOS_ASSERT(0) ;
4206 }
4207#else
4208 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4209 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4210 pWDA->wdaWdiCfgApiMsgParam = NULL;
4211#endif
4212 return CONVERT_WDI2VOS_STATUS(status) ;
4213}
4214
Jeff Johnson295189b2012-06-20 16:38:30 -07004215VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4216 v_U8_t *pDefaultKeyId,
4217 v_U8_t *pNumKeys,
4218 WDI_KeysType *pWdiKeys )
4219{
4220 v_U32_t i, j, defKeyId = 0;
4221 v_U32_t val = SIR_MAC_KEY_LENGTH;
4222 VOS_STATUS status = WDI_STATUS_SUCCESS;
4223 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004224 if (NULL == pMac )
4225 {
4226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004227 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 return VOS_STATUS_E_FAILURE;
4229 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004230 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4231 &defKeyId ))
4232 {
4233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4234 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4235 }
4236
4237 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 /* Need to extract ALL of the configured WEP Keys */
4239 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4240 {
4241 val = SIR_MAC_KEY_LENGTH;
4242 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4243 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4244 pWdiKeys[j].key,
4245 &val ))
4246 {
4247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4248 "WEP Key index [%d] may not configured in CFG\n",i);
4249 }
4250 else
4251 {
4252 pWdiKeys[j].keyId = (tANI_U8) i;
4253 /*
4254 * Actually, a DC (Don't Care) because
4255 * this is determined (and set) by PE/MLME
4256 */
4257 pWdiKeys[j].unicast = 0;
4258 /*
4259 * Another DC (Don't Care)
4260 */
4261 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4262 /* Another DC (Don't Care). Unused for WEP */
4263 pWdiKeys[j].paeRole = 0;
4264 /* Determined from wlan_cfgGetStr() above.*/
4265 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 j++;
4267 *pNumKeys = (tANI_U8) j;
4268 }
4269 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 return status;
4271}
Jeff Johnson295189b2012-06-20 16:38:30 -07004272/*
4273 * FUNCTION: WDA_SetBssKeyReqCallback
4274 * send SET BSS key RSP back to PE
4275 */
4276void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4277{
4278 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4279 tWDA_CbContext *pWDA;
4280 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004282 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 if(NULL == pWdaParams)
4284 {
4285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004286 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 VOS_ASSERT(0) ;
4288 return ;
4289 }
4290 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4291 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4293 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004294 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 return ;
4297}
Jeff Johnson295189b2012-06-20 16:38:30 -07004298/*
4299 * FUNCTION: WDA_ProcessSetBssKeyReq
4300 * Request to WDI for programming the BSS key( key for
4301 * broadcast/multicast frames Encryption)
4302 */
4303VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4304 tSetBssKeyParams *setBssKeyParams )
4305{
4306 WDI_Status status = WDI_STATUS_SUCCESS ;
4307 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4308 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4309 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4310 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004314 if(NULL == wdiSetBssKeyParam)
4315 {
4316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004318 VOS_ASSERT(0);
4319 return VOS_STATUS_E_NOMEM;
4320 }
4321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4322 if(NULL == pWdaParams)
4323 {
4324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 VOS_ASSERT(0);
4327 vos_mem_free(wdiSetBssKeyParam);
4328 return VOS_STATUS_E_NOMEM;
4329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 /* copy set BSS params to WDI structure */
4332 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4333 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4334 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 if(setBssKeyParams->encType != eSIR_ED_NONE)
4336 {
4337 if( setBssKeyParams->numKeys == 0 &&
4338 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4339 setBssKeyParams->encType == eSIR_ED_WEP104))
4340 {
4341 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4343 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4344 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4345 }
4346 else
4347 {
4348 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4349 {
4350 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4351 setBssKeyParams->key[keyIndex].keyId;
4352 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4353 setBssKeyParams->key[keyIndex].unicast;
4354 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4355 setBssKeyParams->key[keyIndex].keyDirection;
4356 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4357 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4358 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4359 setBssKeyParams->key[keyIndex].paeRole;
4360 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4361 setBssKeyParams->key[keyIndex].keyLength;
4362 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4363 setBssKeyParams->key[keyIndex].key,
4364 SIR_MAC_MAX_KEY_LENGTH);
4365 }
4366 }
4367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004368 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4369 setBssKeyParams->singleTidRc;
4370 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 /* Store set key pointer, as this will be used for response */
4372 /* store Params pass it to WDI */
4373 pWdaParams->pWdaContext = pWDA;
4374 pWdaParams->wdaMsgParam = setBssKeyParams;
4375 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4377 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4378
4379 if(IS_WDI_STATUS_FAILURE(status))
4380 {
4381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4382 "Failure in Set BSS Key Req WDI API, free all the memory " );
4383 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4384 vos_mem_free(pWdaParams) ;
4385 setBssKeyParams->status = eSIR_FAILURE ;
4386 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4387 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 return CONVERT_WDI2VOS_STATUS(status) ;
4389}
Jeff Johnson295189b2012-06-20 16:38:30 -07004390/*
4391 * FUNCTION: WDA_RemoveBssKeyReqCallback
4392 * send SET BSS key RSP back to PE
4393 */
4394void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4395{
4396 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4397 tWDA_CbContext *pWDA;
4398 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004400 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004401 if(NULL == pWdaParams)
4402 {
4403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004404 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004405 VOS_ASSERT(0) ;
4406 return ;
4407 }
4408 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4409 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4411 vos_mem_free(pWdaParams) ;
4412
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004413 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 return ;
4416}
Jeff Johnson295189b2012-06-20 16:38:30 -07004417/*
4418 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4419 * Request to WDI to remove the BSS key( key for broadcast/multicast
4420 * frames Encryption)
4421 */
4422VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4423 tRemoveBssKeyParams *removeBssKeyParams )
4424{
4425 WDI_Status status = WDI_STATUS_SUCCESS ;
4426 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4427 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4428 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4429 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 if(NULL == wdiRemoveBssKeyParam)
4433 {
4434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 VOS_ASSERT(0);
4437 return VOS_STATUS_E_NOMEM;
4438 }
4439 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4440 if(NULL == pWdaParams)
4441 {
4442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 VOS_ASSERT(0);
4445 vos_mem_free(wdiRemoveBssKeyParam);
4446 return VOS_STATUS_E_NOMEM;
4447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 /* copy Remove BSS key params to WDI structure*/
4449 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4450 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4451 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4452 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4453 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 /* Store remove key pointer, as this will be used for response */
4455 /* store Params pass it to WDI */
4456 pWdaParams->pWdaContext = pWDA;
4457 pWdaParams->wdaMsgParam = removeBssKeyParams;
4458 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004459 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4460 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 if(IS_WDI_STATUS_FAILURE(status))
4462 {
4463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4464 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4466 vos_mem_free(pWdaParams) ;
4467 removeBssKeyParams->status = eSIR_FAILURE ;
4468 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 return CONVERT_WDI2VOS_STATUS(status) ;
4471}
Jeff Johnson295189b2012-06-20 16:38:30 -07004472/*
4473 * FUNCTION: WDA_SetBssKeyReqCallback
4474 * send SET BSS key RSP back to PE
4475 */
4476void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4477{
4478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4479 tWDA_CbContext *pWDA;
4480 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004482 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 if(NULL == pWdaParams)
4484 {
4485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004486 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 VOS_ASSERT(0) ;
4488 return ;
4489 }
4490 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4491 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4493 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004494 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 return ;
4497}
Jeff Johnson295189b2012-06-20 16:38:30 -07004498/*
4499 * FUNCTION: WDA_ProcessSetStaKeyReq
4500 * Request to WDI for programming the STA key( key for Unicast frames
4501 * Encryption)
4502 */
4503VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4504 tSetStaKeyParams *setStaKeyParams )
4505{
4506 WDI_Status status = WDI_STATUS_SUCCESS ;
4507 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4508 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4509 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4510 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004513 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 if(NULL == wdiSetStaKeyParam)
4515 {
4516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 VOS_ASSERT(0);
4519 return VOS_STATUS_E_NOMEM;
4520 }
4521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4522 if(NULL == pWdaParams)
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_ASSERT(0);
4527 vos_mem_free(wdiSetStaKeyParam);
4528 return VOS_STATUS_E_NOMEM;
4529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 /* copy set STA key params to WDI structure */
4533 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4534 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4535 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4536 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 if(setStaKeyParams->encType != eSIR_ED_NONE)
4538 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004539 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4541 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4542 {
4543 WDA_GetWepKeysFromCfg( pWDA,
4544 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4545 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4546 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4547 }
4548 else
4549 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4551 keyIndex++)
4552 {
4553 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4554 setStaKeyParams->key[keyIndex].keyId;
4555 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4556 setStaKeyParams->key[keyIndex].unicast;
4557 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4558 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4560 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4561 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4562 setStaKeyParams->key[keyIndex].paeRole;
4563 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4564 setStaKeyParams->key[keyIndex].keyLength;
4565 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4566 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4567 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4568 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4569 {
4570 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4571 }
4572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4574 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 }
4576 }
4577 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4578 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 /* Store set key pointer, as this will be used for response */
4580 /* store Params pass it to WDI */
4581 pWdaParams->pWdaContext = pWDA;
4582 pWdaParams->wdaMsgParam = setStaKeyParams;
4583 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4585 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 if(IS_WDI_STATUS_FAILURE(status))
4587 {
4588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4589 "Failure in set STA Key Req WDI API, free all the memory " );
4590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4591 vos_mem_free(pWdaParams) ;
4592 setStaKeyParams->status = eSIR_FAILURE ;
4593 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 return CONVERT_WDI2VOS_STATUS(status) ;
4596}
Jeff Johnson295189b2012-06-20 16:38:30 -07004597/*
4598 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4599 * send SET Bcast STA key RSP back to PE
4600 */
4601void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4602{
4603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4604 tWDA_CbContext *pWDA;
4605 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004607 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 if(NULL == pWdaParams)
4609 {
4610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004611 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 VOS_ASSERT(0) ;
4613 return ;
4614 }
4615 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4616 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4618 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004619 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 return ;
4622}
4623
Jeff Johnson295189b2012-06-20 16:38:30 -07004624/*
4625 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4626 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4627 * Encryption)
4628 */
4629VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4630 tSetStaKeyParams *setStaKeyParams )
4631{
4632 WDI_Status status = WDI_STATUS_SUCCESS ;
4633 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4634 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4635 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4636 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004639 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 if(NULL == wdiSetStaKeyParam)
4641 {
4642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 VOS_ASSERT(0);
4645 return VOS_STATUS_E_NOMEM;
4646 }
4647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4648 if(NULL == pWdaParams)
4649 {
4650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004652 VOS_ASSERT(0);
4653 vos_mem_free(wdiSetStaKeyParam);
4654 return VOS_STATUS_E_NOMEM;
4655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004657 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 /* copy set STA key params to WDI structure */
4659 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4660 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4661 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4662 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004663 if(setStaKeyParams->encType != eSIR_ED_NONE)
4664 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4666 keyIndex++)
4667 {
4668 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4669 setStaKeyParams->key[keyIndex].keyId;
4670 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4671 setStaKeyParams->key[keyIndex].unicast;
4672 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4673 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4675 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4676 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4677 setStaKeyParams->key[keyIndex].paeRole;
4678 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4679 setStaKeyParams->key[keyIndex].keyLength;
4680 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4681 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4684 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 }
4686 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 /* Store set key pointer, as this will be used for response */
4688 /* store Params pass it to WDI */
4689 pWdaParams->pWdaContext = pWDA;
4690 pWdaParams->wdaMsgParam = setStaKeyParams;
4691 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4693 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004694 if(IS_WDI_STATUS_FAILURE(status))
4695 {
4696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4697 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4699 vos_mem_free(pWdaParams) ;
4700 setStaKeyParams->status = eSIR_FAILURE ;
4701 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004703 return CONVERT_WDI2VOS_STATUS(status) ;
4704}
Jeff Johnson295189b2012-06-20 16:38:30 -07004705/*
4706 * FUNCTION: WDA_RemoveStaKeyReqCallback
4707 * send SET BSS key RSP back to PE
4708 */
4709void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4710{
4711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4712 tWDA_CbContext *pWDA;
4713 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 if(NULL == pWdaParams)
4717 {
4718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004720 VOS_ASSERT(0) ;
4721 return ;
4722 }
4723 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4724 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4726 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004727 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004729 return ;
4730}
4731
Jeff Johnson295189b2012-06-20 16:38:30 -07004732/*
4733 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4734 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4735 */
4736VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4737 tRemoveStaKeyParams *removeStaKeyParams )
4738{
4739 WDI_Status status = WDI_STATUS_SUCCESS ;
4740 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4741 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4742 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4743 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 if(NULL == wdiRemoveStaKeyParam)
4747 {
4748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 VOS_ASSERT(0);
4751 return VOS_STATUS_E_NOMEM;
4752 }
4753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4754 if(NULL == pWdaParams)
4755 {
4756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 VOS_ASSERT(0);
4759 vos_mem_free(wdiRemoveStaKeyParam);
4760 return VOS_STATUS_E_NOMEM;
4761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 /* copy remove STA key params to WDI structure*/
4763 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4764 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4765 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4766 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4767 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 /* Store remove key pointer, as this will be used for response */
4769 /* store Params pass it to WDI */
4770 pWdaParams->pWdaContext = pWDA;
4771 pWdaParams->wdaMsgParam = removeStaKeyParams;
4772 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004773 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4774 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 if(IS_WDI_STATUS_FAILURE(status))
4776 {
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4778 "Failure in remove STA Key Req WDI API, free all the memory " );
4779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4780 vos_mem_free(pWdaParams) ;
4781 removeStaKeyParams->status = eSIR_FAILURE ;
4782 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 return CONVERT_WDI2VOS_STATUS(status) ;
4785}
Jeff Johnson295189b2012-06-20 16:38:30 -07004786/*
4787 * FUNCTION: WDA_IsHandleSetLinkStateReq
4788 * Update the WDA state and return the status to handle this message or not
4789 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004790WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4791 tWDA_CbContext *pWDA,
4792 tLinkStateParams *linkStateParams)
4793{
4794 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 switch(linkStateParams->state)
4796 {
4797 case eSIR_LINK_PREASSOC_STATE:
4798 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4799 /*
4800 * set the WDA state to PRE ASSOC
4801 * copy the BSSID into pWDA to use it in join request and return,
4802 * No need to handle these messages.
4803 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004804 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4805 {
4806 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004808 }
4809 else
4810 {
4811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004812 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004813 VOS_ASSERT(0);
4814 }
4815
4816 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4817 {
4818 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004819 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004820 }
4821 else
4822 {
4823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004824 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004825 VOS_ASSERT(0);
4826 }
4827
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4829 *channel and after ) so reset the WDA state to ready when the second
4830 * time UMAC issue the link state with PREASSOC
4831 */
4832 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4833 {
4834 /* RESET WDA state back to WDA_READY_STATE */
4835 pWDA->wdaState = WDA_READY_STATE;
4836 }
4837 else
4838 {
4839 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4840 }
4841 //populate linkState info in WDACbCtxt
4842 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 default:
4845 if(pWDA->wdaState != WDA_READY_STATE)
4846 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004847 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4848 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4849 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4850 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4851 *the ASSERT in WDA_Stop during module unload.*/
4852 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4853 {
4854 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004855 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004856 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004857 else
4858 {
4859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004860 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004861 status = WDA_IGNORE_SET_LINK_STATE;
4862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 }
4864 break;
4865 }
4866
4867 return status;
4868}
Jeff Johnson295189b2012-06-20 16:38:30 -07004869/*
4870 * FUNCTION: WDA_SetLinkStateCallback
4871 * call back function for set link state from WDI
4872 */
4873void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4874{
4875 tWDA_CbContext *pWDA;
4876 tLinkStateParams *linkStateParams;
4877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 if(NULL == pWdaParams)
4881 {
4882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 VOS_ASSERT(0) ;
4885 return ;
4886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 /*
4890 * In STA mode start the BA activity check timer after association
4891 * and in AP mode start BA activity check timer after BSS start */
4892 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4893 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004894 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4895 ((status == WDI_STATUS_SUCCESS) &&
4896 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 {
4898 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 /*
4902 * No respone required for WDA_SET_LINK_STATE so free the request
4903 * param here
4904 */
4905 if( pWdaParams != NULL )
4906 {
4907 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4908 {
4909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4910 }
4911 vos_mem_free(pWdaParams);
4912 }
4913 return ;
4914}
Jeff Johnson295189b2012-06-20 16:38:30 -07004915/*
4916 * FUNCTION: WDA_ProcessSetLinkState
4917 * Request to WDI to set the link status.
4918 */
4919VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4920 tLinkStateParams *linkStateParams)
4921{
4922 WDI_Status status = WDI_STATUS_SUCCESS ;
4923 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4924 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4925 sizeof(WDI_SetLinkReqParamsType)) ;
4926 tWDA_ReqParams *pWdaParams ;
4927 tpAniSirGlobal pMac;
4928 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4929
4930 if(NULL == pMac)
4931 {
4932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004933 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004935 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 return VOS_STATUS_E_FAILURE;
4937 }
4938
4939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004940 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 if(NULL == wdiSetLinkStateParam)
4942 {
4943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 VOS_ASSERT(0);
4946 return VOS_STATUS_E_NOMEM;
4947 }
4948 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4949 if(NULL == pWdaParams)
4950 {
4951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004952 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 VOS_ASSERT(0);
4954 vos_mem_free(wdiSetLinkStateParam);
4955 return VOS_STATUS_E_NOMEM;
4956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 if(WDA_IGNORE_SET_LINK_STATE ==
4958 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4959 {
4960 status = WDI_STATUS_E_FAILURE;
4961 }
4962 else
4963 {
4964 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4965 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4967 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4969 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 pWdaParams->pWdaContext = pWDA;
4971 /* Store remove key pointer, as this will be used for response */
4972 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004973 /* store Params pass it to WDI */
4974 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4975 /* Stop Timer only other than GO role and concurrent session */
4976 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004977 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4979 {
4980 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4983 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 if(IS_WDI_STATUS_FAILURE(status))
4985 {
4986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4987 "Failure in set link state Req WDI API, free all the memory " );
4988 }
4989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 if(IS_WDI_STATUS_FAILURE(status))
4991 {
4992 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004993 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004994 vos_mem_free(pWdaParams);
4995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 return CONVERT_WDI2VOS_STATUS(status) ;
4997}
Jeff Johnson295189b2012-06-20 16:38:30 -07004998/*
4999 * FUNCTION: WDA_GetStatsReqParamsCallback
5000 * send the response to PE with Stats received from WDI
5001 */
5002void WDA_GetStatsReqParamsCallback(
5003 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5004 void* pUserData)
5005{
5006 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5007 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5008
5009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005010 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 pGetPEStatsRspParams =
5012 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5013 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5014
5015 if(NULL == pGetPEStatsRspParams)
5016 {
5017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 VOS_ASSERT(0);
5020 return;
5021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5023 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5024 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5025 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005026
5027 //Fill the Session Id Properly in PE
5028 pGetPEStatsRspParams->sessionId = 0;
5029 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005030 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5032 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 vos_mem_copy( pGetPEStatsRspParams + 1,
5034 wdiGetStatsRsp + 1,
5035 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 /* send response to UMAC*/
5037 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5038
5039 return;
5040}
5041
Jeff Johnson295189b2012-06-20 16:38:30 -07005042/*
5043 * FUNCTION: WDA_ProcessGetStatsReq
5044 * Request to WDI to get the statistics
5045 */
5046VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5047 tAniGetPEStatsReq *pGetStatsParams)
5048{
5049 WDI_Status status = WDI_STATUS_SUCCESS ;
5050 WDI_GetStatsReqParamsType wdiGetStatsParam;
5051 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005053 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005054 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5055 pGetStatsParams->staId;
5056 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5057 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 status = WDI_GetStatsReq(&wdiGetStatsParam,
5060 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 if(IS_WDI_STATUS_FAILURE(status))
5062 {
5063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5064 "Failure in Get Stats Req WDI API, free all the memory " );
5065 pGetPEStatsRspParams =
5066 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5067 if(NULL == pGetPEStatsRspParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005072 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005073 return VOS_STATUS_E_NOMEM;
5074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005075 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5076 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5077 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5078 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5079 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5080 (void *)pGetPEStatsRspParams, 0) ;
5081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 /* Free the request message */
5083 vos_mem_free(pGetStatsParams);
5084 return CONVERT_WDI2VOS_STATUS(status);
5085}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005086
5087#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5088/*
5089 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5090 * send the response to PE with roam Rssi received from WDI
5091 */
5092void WDA_GetRoamRssiReqParamsCallback(
5093 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5094 void* pUserData)
5095{
5096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5097 tWDA_CbContext *pWDA = NULL;
5098 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5099 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5101 "<------ %s " ,__func__);
5102 if(NULL == pWdaParams)
5103 {
5104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5105 "%s: pWdaParams received NULL", __func__);
5106 VOS_ASSERT(0) ;
5107 return ;
5108 }
5109 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5110 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5111
5112 if(NULL == pGetRoamRssiReqParams)
5113 {
5114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5115 "%s: pGetRoamRssiReqParams received NULL", __func__);
5116 VOS_ASSERT(0);
5117 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5118 vos_mem_free(pWdaParams);
5119 return ;
5120 }
5121 pGetRoamRssiRspParams =
5122 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5123
5124 if(NULL == pGetRoamRssiRspParams)
5125 {
5126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5127 "%s: VOS MEM Alloc Failure", __func__);
5128 VOS_ASSERT(0);
5129 return;
5130 }
5131 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5132 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005133 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005134 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5135 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5136
5137 /* Assign get roam rssi req (backup) in to the response */
5138 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5139
5140 /* free WDI command buffer */
5141 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5142 vos_mem_free(pWdaParams) ;
5143
5144 /* send response to UMAC*/
5145 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5146
5147 return;
5148}
5149
5150
5151
5152/*
5153 * FUNCTION: WDA_ProcessGetRoamRssiReq
5154 * Request to WDI to get the statistics
5155 */
5156VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5157 tAniGetRssiReq *pGetRoamRssiParams)
5158{
5159 WDI_Status status = WDI_STATUS_SUCCESS ;
5160 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5161 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5162 tWDA_ReqParams *pWdaParams = NULL;
5163
5164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5165 "------> %s " ,__func__);
5166 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5167 pGetRoamRssiParams->staId;
5168 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5169
5170 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5171 if(NULL == pWdaParams)
5172 {
5173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5174 "%s: VOS MEM Alloc Failure", __func__);
5175 VOS_ASSERT(0);
5176 return VOS_STATUS_E_NOMEM;
5177 }
5178
5179 /* Store Init Req pointer, as this will be used for response */
5180 pWdaParams->pWdaContext = pWDA;
5181
5182 /* Take Get roam Rssi req backup as it stores the callback to be called after
5183 receiving the response */
5184 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5185 pWdaParams->wdaWdiApiMsgParam = NULL;
5186
5187 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5188 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5189 if(IS_WDI_STATUS_FAILURE(status))
5190 {
5191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5192 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5193 pGetRoamRssiRspParams =
5194 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5195 if(NULL == pGetRoamRssiRspParams)
5196 {
5197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5198 "%s: VOS MEM Alloc Failure", __func__);
5199 VOS_ASSERT(0);
5200 vos_mem_free(pGetRoamRssiParams);
5201 vos_mem_free(pWdaParams);
5202 return VOS_STATUS_E_NOMEM;
5203 }
5204 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5205 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5206 pGetRoamRssiRspParams->rssi = 0;
5207 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5208 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5209 (void *)pGetRoamRssiRspParams, 0) ;
5210 }
5211 return CONVERT_WDI2VOS_STATUS(status);
5212}
5213#endif
5214
5215
Jeff Johnson295189b2012-06-20 16:38:30 -07005216/*
5217 * FUNCTION: WDA_UpdateEDCAParamCallback
5218 * call back function for Update EDCA params from WDI
5219 */
5220void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5221{
5222 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5223 tEdcaParams *pEdcaParams;
5224
5225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005226 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 if(NULL == pWdaParams)
5228 {
5229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005230 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 VOS_ASSERT(0) ;
5232 return ;
5233 }
5234 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005235 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5236 vos_mem_free(pWdaParams);
5237 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 return ;
5239}
Jeff Johnson295189b2012-06-20 16:38:30 -07005240/*
5241 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5242 * Request to WDI to Update the EDCA params.
5243 */
5244VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5245 tEdcaParams *pEdcaParams)
5246{
5247 WDI_Status status = WDI_STATUS_SUCCESS ;
5248 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5249 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5250 sizeof(WDI_UpdateEDCAParamsType)) ;
5251 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005253 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 if(NULL == wdiEdcaParam)
5255 {
5256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005257 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005259 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 return VOS_STATUS_E_NOMEM;
5261 }
5262 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5263 if(NULL == pWdaParams)
5264 {
5265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005267 VOS_ASSERT(0);
5268 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005269 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 return VOS_STATUS_E_NOMEM;
5271 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005273 /*
5274 Since firmware is not using highperformance flag, we have removed
5275 this flag from wdiEDCAInfo structure to match sizeof the structure
5276 between host and firmware.In future if we are planning to use
5277 highperformance flag then Please define this flag in wdiEDCAInfo
5278 structure, update it here and send it to firmware. i.e.
5279 Following is the original line which we removed as part of the fix
5280 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5281 pEdcaParams->highPerformance;
5282 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5284 &pEdcaParams->acbe);
5285 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5286 &pEdcaParams->acbk);
5287 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5288 &pEdcaParams->acvi);
5289 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5290 &pEdcaParams->acvo);
5291 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 pWdaParams->pWdaContext = pWDA;
5293 /* Store remove key pointer, as this will be used for response */
5294 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 /* store Params pass it to WDI */
5296 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5298 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 if(IS_WDI_STATUS_FAILURE(status))
5300 {
5301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5302 "Failure in Update EDCA Params WDI API, free all the memory " );
5303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5304 vos_mem_free(pWdaParams);
5305 vos_mem_free(pEdcaParams);
5306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005307 return CONVERT_WDI2VOS_STATUS(status) ;
5308}
Jeff Johnson295189b2012-06-20 16:38:30 -07005309/*
5310 * FUNCTION: WDA_AddBAReqCallback
5311 * send ADD BA RSP back to PE
5312 */
5313void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5314 void* pUserData)
5315{
5316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5317 tWDA_CbContext *pWDA;
5318 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 if(NULL == pWdaParams)
5322 {
5323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_ASSERT(0) ;
5326 return ;
5327 }
5328 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5329 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5331 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005332 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 return ;
5335}
5336
Jeff Johnson295189b2012-06-20 16:38:30 -07005337/*
5338 * FUNCTION: WDA_ProcessAddBAReq
5339 * Request to WDI to Update the ADDBA REQ params.
5340 */
5341VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5342 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5343{
Jeff Johnson43971f52012-07-17 12:26:56 -07005344 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5346 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5347 sizeof(WDI_AddBAReqParamsType)) ;
5348 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005350 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 if(NULL == wdiAddBAReqParam)
5352 {
5353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005354 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 VOS_ASSERT(0);
5356 return VOS_STATUS_E_NOMEM;
5357 }
5358 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5359 if(NULL == pWdaParams)
5360 {
5361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 VOS_ASSERT(0);
5364 vos_mem_free(wdiAddBAReqParam);
5365 return VOS_STATUS_E_NOMEM;
5366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 do
5368 {
5369 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 wdiAddBaInfo->ucSTAIdx = staIdx ;
5371 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5372 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 } while(0) ;
5374 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 pWdaParams->pWdaContext = pWDA;
5376 /* store Params pass it to WDI */
5377 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5378 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005379 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5380 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005381
Jeff Johnson43971f52012-07-17 12:26:56 -07005382 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 {
5384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005385 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5386 status = CONVERT_WDI2VOS_STATUS(wstatus);
5387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005388 vos_mem_free(pWdaParams);
5389 pAddBAReqParams->status = eSIR_FAILURE;
5390 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5391 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005392 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005393}
Jeff Johnson295189b2012-06-20 16:38:30 -07005394/*
5395 * FUNCTION: WDA_AddBASessionReqCallback
5396 * send ADD BA SESSION RSP back to PE/(or TL)
5397 */
5398void WDA_AddBASessionReqCallback(
5399 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5400{
5401 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5402 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5403 tWDA_CbContext *pWDA;
5404 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005406 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 if(NULL == pWdaParams)
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 VOS_ASSERT(0) ;
5412 return ;
5413 }
5414 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5415 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 if( NULL == pAddBAReqParams )
5417 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005419 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005421 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5422 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 return ;
5424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5426 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 /*
5428 * if WDA in update TL state, update TL with BA session parama and send
5429 * another request to HAL(/WDI) (ADD_BA_REQ)
5430 */
5431
5432 if((VOS_STATUS_SUCCESS ==
5433 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5434 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5435 {
5436 /* Update TL with BA info received from HAL/WDI */
5437 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5438 wdiAddBaSession->usBaSessionID,
5439 wdiAddBaSession->ucSTAIdx,
5440 wdiAddBaSession->ucBaTID,
5441 wdiAddBaSession->ucBaBufferSize,
5442 wdiAddBaSession->ucWinSize,
5443 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5445 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5446 }
5447 else
5448 {
5449 pAddBAReqParams->status =
5450 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5451
5452 /* Setting Flag to indicate that Set BA is success */
5453 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5454 {
5455 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5456 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5457 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005459 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 /*Reset the WDA state to READY */
5462 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 return ;
5464}
5465
Jeff Johnson295189b2012-06-20 16:38:30 -07005466/*
5467 * FUNCTION: WDA_ProcessAddBASessionReq
5468 * Request to WDI to Update the ADDBA REQ params.
5469 */
5470VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5471 tAddBAParams *pAddBAReqParams)
5472{
5473 WDI_Status status = WDI_STATUS_SUCCESS ;
5474 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5475 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5476 sizeof(WDI_AddBASessionReqParamsType)) ;
5477 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005478 WLANTL_STAStateType tlSTAState = 0;
5479
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005482 if(NULL == wdiAddBASessionReqParam)
5483 {
5484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 VOS_ASSERT(0);
5487 return VOS_STATUS_E_NOMEM;
5488 }
5489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5490 if(NULL == pWdaParams)
5491 {
5492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 VOS_ASSERT(0);
5495 vos_mem_free(wdiAddBASessionReqParam);
5496 return VOS_STATUS_E_NOMEM;
5497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 /*
5499 * Populate ADD BA parameters and pass these paarmeters to WDI.
5500 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5501 * the state to track if these is BA recipient case or BA initiator
5502 * case.
5503 */
5504 do
5505 {
5506 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5507 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5508 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5509 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5510 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5511 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5512 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5515 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5516 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5517 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5518 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 /* check the BA direction and update state accordingly */
5520 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5521 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5522 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5523
5524 }while(0) ;
5525 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 pWdaParams->pWdaContext = pWDA;
5527 /* Store ADD BA pointer, as this will be used for response */
5528 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5529 /* store Params pass it to WDI */
5530 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005531
5532 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5533 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5534 */
5535 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5536 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5537 {
5538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5539 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5540 status = WDI_STATUS_E_NOT_ALLOWED;
5541 pAddBAReqParams->status =
5542 CONVERT_WDI2SIR_STATUS(status) ;
5543 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5544 /*Reset the WDA state to READY */
5545 pWDA->wdaState = WDA_READY_STATE;
5546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5547 vos_mem_free(pWdaParams);
5548
5549 return CONVERT_WDI2VOS_STATUS(status) ;
5550 }
5551
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5553 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 if(IS_WDI_STATUS_FAILURE(status))
5555 {
5556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005557 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5559 "Send ADD BA failure response to PE\n");
5560 pAddBAReqParams->status =
5561 CONVERT_WDI2SIR_STATUS(status) ;
5562 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005563 /*Reset the WDA state to READY */
5564 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 vos_mem_free(pWdaParams);
5567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005569}
Jeff Johnson295189b2012-06-20 16:38:30 -07005570/*
5571 * FUNCTION: WDA_DelBANotifyTL
5572 * send DEL BA IND to TL
5573 */
5574void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5575 tDelBAParams *pDelBAReqParams)
5576{
5577 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5578 //tSirMsgQ msg;
5579 vos_msg_t vosMsg;
5580 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005581 if(NULL == pDelBAInd)
5582 {
5583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005584 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 VOS_ASSERT(0) ;
5586 return;
5587 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5589 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5590 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5591 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005592
Jeff Johnson295189b2012-06-20 16:38:30 -07005593
5594 vosMsg.type = WDA_DELETEBA_IND;
5595 vosMsg.bodyptr = pDelBAInd;
5596 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5597 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5598 {
5599 vosStatus = VOS_STATUS_E_BADMSG;
5600 }
5601}
Jeff Johnson295189b2012-06-20 16:38:30 -07005602/*
5603 * FUNCTION: WDA_DelBAReqCallback
5604 * send DEL BA RSP back to PE
5605 */
5606void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5607{
5608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5609 tWDA_CbContext *pWDA;
5610 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005612 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 if(NULL == pWdaParams)
5614 {
5615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005616 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005617 VOS_ASSERT(0) ;
5618 return ;
5619 }
5620 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5621 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 /* Notify TL about DEL BA in case of recipinet */
5623 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5624 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5625 {
5626 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 /*
5629 * No respone required for WDA_DELBA_IND so just free the request
5630 * param here
5631 */
5632 vos_mem_free(pDelBAReqParams);
5633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5634 vos_mem_free(pWdaParams);
5635 return ;
5636}
5637
Jeff Johnson295189b2012-06-20 16:38:30 -07005638/*
5639 * FUNCTION: WDA_ProcessDelBAReq
5640 * Request to WDI to Update the DELBA REQ params.
5641 */
5642VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5643 tDelBAParams *pDelBAReqParams)
5644{
5645 WDI_Status status = WDI_STATUS_SUCCESS ;
5646 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5647 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5648 sizeof(WDI_DelBAReqParamsType)) ;
5649 tWDA_ReqParams *pWdaParams ;
5650 tANI_U16 staIdx = 0;
5651 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005653 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005654 if(NULL == wdiDelBAReqParam)
5655 {
5656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005658 VOS_ASSERT(0);
5659 return VOS_STATUS_E_NOMEM;
5660 }
5661 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5662 if(NULL == pWdaParams)
5663 {
5664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 VOS_ASSERT(0);
5667 vos_mem_free(wdiDelBAReqParam);
5668 return VOS_STATUS_E_NOMEM;
5669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5671 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5672 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5673 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 pWdaParams->pWdaContext = pWDA;
5675 /* Store DEL BA pointer, as this will be used for response */
5676 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 /* store Params pass it to WDI */
5678 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5680 * maintained in WDA, so that WDA can retry for another BA session
5681 */
5682 staIdx = pDelBAReqParams->staIdx;
5683 tid = pDelBAReqParams->baTID;
5684 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 status = WDI_DelBAReq(wdiDelBAReqParam,
5686 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 if(IS_WDI_STATUS_FAILURE(status))
5688 {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5690 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5692 vos_mem_free(pWdaParams->wdaMsgParam);
5693 vos_mem_free(pWdaParams);
5694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696}
Jeff Johnson295189b2012-06-20 16:38:30 -07005697/*
5698 * FUNCTION: WDA_AddTSReqCallback
5699 * send ADD TS RSP back to PE
5700 */
5701void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5702{
5703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5704 tWDA_CbContext *pWDA;
5705 tAddTsParams *pAddTsReqParams;
5706
5707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005708 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005709 if(NULL == pWdaParams)
5710 {
5711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005712 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 VOS_ASSERT(0) ;
5714 return ;
5715 }
5716 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5717 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5719 vos_mem_free(pWdaParams);
5720
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005721 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 return ;
5724}
5725
Jeff Johnson295189b2012-06-20 16:38:30 -07005726/*
5727 * FUNCTION: WDA_ProcessAddTSReq
5728 * Request to WDI to Update the ADD TS REQ params.
5729 */
5730VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5731 tAddTsParams *pAddTsReqParams)
5732{
5733 WDI_Status status = WDI_STATUS_SUCCESS ;
5734 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5735 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5736 sizeof(WDI_AddTSReqParamsType)) ;
5737 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005739 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 if(NULL == wdiAddTSReqParam)
5741 {
5742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 VOS_ASSERT(0);
5745 return VOS_STATUS_E_NOMEM;
5746 }
5747 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5748 if(NULL == pWdaParams)
5749 {
5750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005751 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 VOS_ASSERT(0);
5753 vos_mem_free(wdiAddTSReqParam);
5754 return VOS_STATUS_E_NOMEM;
5755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5757 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 //TS IE
5759 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5760 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5761 pAddTsReqParams->tspec.length;
5762
5763 //TS IE : TS INFO : TRAFFIC
5764 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5765 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5766 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5767 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5768 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5769 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5770 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5771 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5772 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5773 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5774 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5775 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5776 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5777 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5778 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5779 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5780
5781 //TS IE : TS INFO : SCHEDULE
5782 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5783 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5784 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5785 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 //TS IE
5787 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5788 pAddTsReqParams->tspec.nomMsduSz;
5789 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5790 pAddTsReqParams->tspec.maxMsduSz;
5791 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5792 pAddTsReqParams->tspec.minSvcInterval;
5793 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5794 pAddTsReqParams->tspec.maxSvcInterval;
5795 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5796 pAddTsReqParams->tspec.inactInterval;
5797 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5798 pAddTsReqParams->tspec.suspendInterval;
5799 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5800 pAddTsReqParams->tspec.svcStartTime;
5801 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5802 pAddTsReqParams->tspec.minDataRate;
5803 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5804 pAddTsReqParams->tspec.meanDataRate;
5805 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5806 pAddTsReqParams->tspec.peakDataRate;
5807 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5808 pAddTsReqParams->tspec.maxBurstSz;
5809 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5810 pAddTsReqParams->tspec.delayBound;
5811 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5812 pAddTsReqParams->tspec.minPhyRate;
5813 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5814 pAddTsReqParams->tspec.surplusBw;
5815 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5816 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 /* TODO: tAddTsParams doesn't have the following fields */
5818#if 0
5819 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5820 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5821 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5822 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5823#endif
5824 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5825
5826 pWdaParams->pWdaContext = pWDA;
5827 /* Store ADD TS pointer, as this will be used for response */
5828 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 /* store Params pass it to WDI */
5830 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 status = WDI_AddTSReq(wdiAddTSReqParam,
5832 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 if(IS_WDI_STATUS_FAILURE(status))
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5836 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5838 vos_mem_free(pWdaParams);
5839 pAddTsReqParams->status = eSIR_FAILURE ;
5840 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005843}
5844
Jeff Johnson295189b2012-06-20 16:38:30 -07005845/*
5846 * FUNCTION: WDA_DelTSReqCallback
5847 * send DEL TS RSP back to PE
5848 */
5849void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5850{
5851 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005853 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5855 vos_mem_free(pWdaParams->wdaMsgParam) ;
5856 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 /*
5858 * No respone required for WDA_DEL_TS_REQ so just free the request
5859 * param here
5860 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 return ;
5862}
5863
Jeff Johnson295189b2012-06-20 16:38:30 -07005864/*
5865 * FUNCTION: WDA_ProcessDelTSReq
5866 * Request to WDI to Update the DELTS REQ params.
5867 */
5868VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5869 tDelTsParams *pDelTSReqParams)
5870{
5871 WDI_Status status = WDI_STATUS_SUCCESS ;
5872 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5873 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5874 sizeof(WDI_DelTSReqParamsType)) ;
5875 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005877 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 if(NULL == wdiDelTSReqParam)
5879 {
5880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005882 VOS_ASSERT(0);
5883 return VOS_STATUS_E_NOMEM;
5884 }
5885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5886 if(NULL == pWdaParams)
5887 {
5888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005889 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 VOS_ASSERT(0);
5891 vos_mem_free(wdiDelTSReqParam);
5892 return VOS_STATUS_E_NOMEM;
5893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5895 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5896 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5897 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5898 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 pWdaParams->pWdaContext = pWDA;
5900 /* Store DEL TS pointer, as this will be used for response */
5901 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005902 /* store Params pass it to WDI */
5903 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 status = WDI_DelTSReq(wdiDelTSReqParam,
5905 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005906 if(IS_WDI_STATUS_FAILURE(status))
5907 {
5908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5909 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5911 vos_mem_free(pWdaParams->wdaMsgParam);
5912 vos_mem_free(pWdaParams);
5913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005915}
Jeff Johnson295189b2012-06-20 16:38:30 -07005916/*
5917 * FUNCTION: WDA_UpdateBeaconParamsCallback
5918 * Free the memory. No need to send any response to PE in this case
5919 */
5920void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5921{
5922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 if(NULL == pWdaParams)
5926 {
5927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 VOS_ASSERT(0) ;
5930 return ;
5931 }
5932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5933 vos_mem_free(pWdaParams->wdaMsgParam) ;
5934 vos_mem_free(pWdaParams);
5935 /*
5936 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5937 * param here
5938 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return ;
5940}
Jeff Johnson295189b2012-06-20 16:38:30 -07005941/*
5942 * FUNCTION: WDA_ProcessUpdateBeaconParams
5943 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5944 */
5945VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5946 tUpdateBeaconParams *pUpdateBeaconParams)
5947{
5948 WDI_Status status = WDI_STATUS_SUCCESS ;
5949 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5950 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5951 sizeof(WDI_UpdateBeaconParamsType)) ;
5952 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005954 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 if(NULL == wdiUpdateBeaconParams)
5956 {
5957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005958 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 VOS_ASSERT(0);
5960 return VOS_STATUS_E_NOMEM;
5961 }
5962 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5963 if(NULL == pWdaParams)
5964 {
5965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 VOS_ASSERT(0);
5968 vos_mem_free(wdiUpdateBeaconParams);
5969 return VOS_STATUS_E_NOMEM;
5970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5972 pUpdateBeaconParams->bssIdx;
5973 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5974 pUpdateBeaconParams->fShortPreamble;
5975 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5976 pUpdateBeaconParams->fShortSlotTime;
5977 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5978 pUpdateBeaconParams->beaconInterval;
5979 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5980 pUpdateBeaconParams->llaCoexist;
5981 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5982 pUpdateBeaconParams->llbCoexist;
5983 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5984 pUpdateBeaconParams->llgCoexist;
5985 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5986 pUpdateBeaconParams->ht20MhzCoexist;
5987 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5988 pUpdateBeaconParams->llnNonGFCoexist;
5989 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5990 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5991 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5992 pUpdateBeaconParams->fRIFSMode;
5993 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5994 pUpdateBeaconParams->paramChangeBitmap;
5995 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5996
5997 pWdaParams->pWdaContext = pWDA;
5998 /* Store UpdateBeacon Req pointer, as this will be used for response */
5999 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 /* store Params pass it to WDI */
6001 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006002 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6003 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6004 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006005 if(IS_WDI_STATUS_FAILURE(status))
6006 {
6007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6008 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6010 vos_mem_free(pWdaParams->wdaMsgParam);
6011 vos_mem_free(pWdaParams);
6012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006014}
Jeff Johnson295189b2012-06-20 16:38:30 -07006015#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006016/*
6017 * FUNCTION: WDA_TSMStatsReqCallback
6018 * send TSM Stats RSP back to PE
6019 */
6020void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6021{
6022 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6023 tWDA_CbContext *pWDA = NULL;
6024 tTSMStats *pTsmRspParams = NULL;
6025
6026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006027 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 if(NULL == pWdaParams)
6029 {
6030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006031 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_ASSERT(0) ;
6033 return ;
6034 }
6035 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6036 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 if( NULL == pTsmRspParams )
6038 {
6039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006040 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006041 VOS_ASSERT( 0 );
6042 return ;
6043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6045 vos_mem_free(pWdaParams);
6046
6047 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6048 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6049 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6050 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6051 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6052 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6053 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6054 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6055 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6056 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 return ;
6059}
6060
6061
Jeff Johnson295189b2012-06-20 16:38:30 -07006062/*
6063 * FUNCTION: WDA_ProcessTsmStatsReq
6064 * Request to WDI to get the TSM Stats params.
6065 */
6066VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
6067 tTSMStats *pTsmStats)
6068{
6069 WDI_Status status = WDI_STATUS_SUCCESS ;
6070 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
6071 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006073 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6075 sizeof(WDI_TSMStatsReqParamsType));
6076 if(NULL == wdiTSMReqParam)
6077 {
6078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 VOS_ASSERT(0);
6081 return VOS_STATUS_E_NOMEM;
6082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6084 if(NULL == pWdaParams)
6085 {
6086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 VOS_ASSERT(0);
6089 vos_mem_free(wdiTSMReqParam);
6090 return VOS_STATUS_E_NOMEM;
6091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6093 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6094 pTsmStats->bssId,
6095 sizeof(wpt_macAddr));
6096 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6097
6098 pWdaParams->pWdaContext = pWDA;
6099 /* Store TSM Stats pointer, as this will be used for response */
6100 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 /* store Params pass it to WDI */
6102 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 status = WDI_TSMStatsReq(wdiTSMReqParam,
6104 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006105 if(IS_WDI_STATUS_FAILURE(status))
6106 {
6107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6108 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6110 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006111 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 return CONVERT_WDI2VOS_STATUS(status) ;
6114}
6115#endif
6116/*
6117 * FUNCTION: WDA_SendBeaconParamsCallback
6118 * No need to send any response to PE in this case
6119 */
6120void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6121{
6122
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006124 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 return ;
6126}
Jeff Johnson295189b2012-06-20 16:38:30 -07006127/*
6128 * FUNCTION: WDA_ProcessSendBeacon
6129 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6130 * start beacon trasmission
6131 */
6132VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6133 tSendbeaconParams *pSendbeaconParams)
6134{
6135 WDI_Status status = WDI_STATUS_SUCCESS ;
6136 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006138 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6140 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6141 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6142 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6144 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306145 /* p2pIeOffset should be atleast greater than timIeOffset */
6146 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6147 (pSendbeaconParams->p2pIeOffset <
6148 pSendbeaconParams->timIeOffset))
6149 {
6150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6151 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6152 VOS_ASSERT( 0 );
6153 return WDI_STATUS_E_FAILURE;
6154 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6156 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 /* Copy the beacon template to local buffer */
6158 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6159 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6160 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6161
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6163 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 if(IS_WDI_STATUS_FAILURE(status))
6165 {
6166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6167 "Failure in SEND BEACON REQ Params WDI API" );
6168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 vos_mem_free(pSendbeaconParams);
6170 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006171}
Jeff Johnson295189b2012-06-20 16:38:30 -07006172/*
6173 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6174 * No need to send any response to PE in this case
6175 */
6176void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6177{
Jeff Johnson295189b2012-06-20 16:38:30 -07006178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006179 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006180 return ;
6181}
6182
Jeff Johnson295189b2012-06-20 16:38:30 -07006183/*
6184 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6185 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6186 * send probe response
6187 */
6188VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6189 tSendProbeRespParams *pSendProbeRspParams)
6190{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006191 WDI_Status status = WDI_STATUS_SUCCESS;
6192 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6193 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006195 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006196
6197 if (!wdiSendProbeRspParam)
6198 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6199
Jeff Johnson295189b2012-06-20 16:38:30 -07006200 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006201 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006202 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006203 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 /* Copy the Probe Response template to local buffer */
6206 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006207 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 pSendProbeRspParams->pProbeRespTemplate,
6209 pSendProbeRspParams->probeRespTemplateLen);
6210 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006211 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6213 WDI_PROBE_REQ_BITMAP_IE_LEN);
6214
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006215 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006216
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006217 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 if(IS_WDI_STATUS_FAILURE(status))
6220 {
6221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6222 "Failure in SEND Probe RSP Params WDI API" );
6223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006224 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006225 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006226 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006227}
Jeff Johnson295189b2012-06-20 16:38:30 -07006228#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6229/*
6230 * FUNCTION: WDA_SetMaxTxPowerCallBack
6231 * send the response to PE with power value received from WDI
6232 */
6233void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6234 void* pUserData)
6235{
6236 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6237 tWDA_CbContext *pWDA = NULL;
6238 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6239
6240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006241 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 if(NULL == pWdaParams)
6243 {
6244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006245 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 VOS_ASSERT(0) ;
6247 return ;
6248 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6250 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 if( NULL == pMaxTxPowerParams )
6252 {
6253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006255 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 return ;
6259 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006260
Jeff Johnson295189b2012-06-20 16:38:30 -07006261
6262 /*need to free memory for the pointers used in the
6263 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6265 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006267
Jeff Johnson295189b2012-06-20 16:38:30 -07006268
6269 /* send response to UMAC*/
6270 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6271
6272 return;
6273}
Jeff Johnson295189b2012-06-20 16:38:30 -07006274/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006275 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 * Request to WDI to send set Max Tx Power Request
6277 */
6278 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6279 tMaxTxPowerParams *MaxTxPowerParams)
6280{
6281 WDI_Status status = WDI_STATUS_SUCCESS;
6282 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6283 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006284
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006287
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6289 sizeof(WDI_SetMaxTxPowerParamsType));
6290 if(NULL == wdiSetMaxTxPowerParams)
6291 {
6292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 VOS_ASSERT(0);
6295 return VOS_STATUS_E_NOMEM;
6296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6298 if(NULL == pWdaParams)
6299 {
6300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006301 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 vos_mem_free(wdiSetMaxTxPowerParams);
6303 VOS_ASSERT(0);
6304 return VOS_STATUS_E_NOMEM;
6305 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 /* Copy.Max.Tx.Power Params to WDI structure */
6307 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6308 MaxTxPowerParams->bssId,
6309 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6311 MaxTxPowerParams->selfStaMacAddr,
6312 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6314 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 pWdaParams->pWdaContext = pWDA;
6317 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 /* store Params pass it to WDI */
6319 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6321 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 if(IS_WDI_STATUS_FAILURE(status))
6323 {
6324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6325 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6327 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006328 /* send response to UMAC*/
6329 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 }
6331 return CONVERT_WDI2VOS_STATUS(status);
6332
6333}
Jeff Johnson295189b2012-06-20 16:38:30 -07006334#endif
schang86c22c42013-03-13 18:41:24 -07006335
6336/*
6337 * FUNCTION: WDA_SetTxPowerCallBack
6338 * send the response to PE with power value received from WDI
6339 */
6340void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6341 void* pUserData)
6342{
6343 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6344 tWDA_CbContext *pWDA = NULL;
6345 tSirSetTxPowerReq *pTxPowerParams = NULL;
6346
6347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6348 "<------ %s ", __func__);
6349 if(NULL == pWdaParams)
6350 {
6351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6352 "%s: pWdaParams received NULL", __func__);
6353 VOS_ASSERT(0) ;
6354 return ;
6355 }
6356 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6357 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6358 if(NULL == pTxPowerParams)
6359 {
6360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6361 "%s: pTxPowerParams received NULL " ,__func__);
6362 VOS_ASSERT(0);
6363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6364 vos_mem_free(pWdaParams);
6365 return ;
6366 }
6367
6368 /*need to free memory for the pointers used in the
6369 WDA Process.Set Max Tx Power Req function*/
6370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6371 vos_mem_free(pWdaParams);
6372
6373 /* send response to UMAC*/
6374 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6375 return;
6376}
6377
6378/*
6379 * FUNCTION: WDA_ProcessSetTxPowerReq
6380 * Request to WDI to send set Tx Power Request
6381 */
6382 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6383 tSirSetTxPowerReq *txPowerParams)
6384{
6385 WDI_Status status = WDI_STATUS_SUCCESS;
6386 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6387 tWDA_ReqParams *pWdaParams = NULL;
6388
6389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6390 "------> %s ", __func__);
6391
6392 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6393 sizeof(WDI_SetTxPowerParamsType));
6394 if(NULL == wdiSetTxPowerParams)
6395 {
6396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6397 "%s: VOS MEM Alloc Failure", __func__);
6398 VOS_ASSERT(0);
6399 return VOS_STATUS_E_NOMEM;
6400 }
6401 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6402 if(NULL == pWdaParams)
6403 {
6404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6405 "%s: VOS MEM Alloc Failure", __func__);
6406 vos_mem_free(wdiSetTxPowerParams);
6407 VOS_ASSERT(0);
6408 return VOS_STATUS_E_NOMEM;
6409 }
6410 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6411 txPowerParams->bssIdx;
6412 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6413 txPowerParams->mwPower;
6414 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6415 pWdaParams->pWdaContext = pWDA;
6416 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6417 /* store Params pass it to WDI */
6418 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6419 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6420 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6421 if(IS_WDI_STATUS_FAILURE(status))
6422 {
6423 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6424 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6426 vos_mem_free(pWdaParams);
6427 /* send response to UMAC*/
6428 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6429 }
6430 return CONVERT_WDI2VOS_STATUS(status);
6431}
6432
Jeff Johnson295189b2012-06-20 16:38:30 -07006433/*
6434 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6435 * Free the memory. No need to send any response to PE in this case
6436 */
6437void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6438{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6440
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006442 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006443
6444 if(NULL == pWdaParams)
6445 {
6446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006447 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006448 VOS_ASSERT(0) ;
6449 return ;
6450 }
6451
6452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6453 vos_mem_free(pWdaParams->wdaMsgParam) ;
6454 vos_mem_free(pWdaParams);
6455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 /*
6457 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6458 * so just free the request param here
6459 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 return ;
6461}
6462
Jeff Johnson295189b2012-06-20 16:38:30 -07006463/*
6464 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6465 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6466 */
6467VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6468 tP2pPsParams *pP2pPsConfigParams)
6469{
6470 WDI_Status status = WDI_STATUS_SUCCESS ;
6471 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6472 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6473 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006474 tWDA_ReqParams *pWdaParams = NULL;
6475
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006477 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 if(NULL == wdiSetP2PGONOAReqParam)
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006481 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 VOS_ASSERT(0);
6483 return VOS_STATUS_E_NOMEM;
6484 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006485
6486 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6487 if(NULL == pWdaParams)
6488 {
6489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006490 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006491 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006492 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006493 VOS_ASSERT(0);
6494 return VOS_STATUS_E_NOMEM;
6495 }
6496
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6498 pP2pPsConfigParams->opp_ps;
6499 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6500 pP2pPsConfigParams->ctWindow;
6501 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6502 pP2pPsConfigParams->count;
6503 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6504 pP2pPsConfigParams->duration;
6505 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6506 pP2pPsConfigParams->interval;
6507 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6508 pP2pPsConfigParams->single_noa_duration;
6509 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6510 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006511
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6513 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006514 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6515
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006517 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6518 pWdaParams->pWdaContext = pWDA;
6519
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006521 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6522
Jeff Johnson295189b2012-06-20 16:38:30 -07006523 if(IS_WDI_STATUS_FAILURE(status))
6524 {
6525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6526 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6528 vos_mem_free(pWdaParams->wdaMsgParam);
6529 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 return CONVERT_WDI2VOS_STATUS(status);
6532
Jeff Johnson295189b2012-06-20 16:38:30 -07006533}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306534
6535#ifdef FEATURE_WLAN_TDLS
6536/*
6537 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6538 * Free the memory. No need to send any response to PE in this case
6539 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306540void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6541 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306542{
6543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6544 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306545 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306546
6547
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6549 "<------ %s " ,__func__);
6550 if(NULL == pWdaParams)
6551 {
6552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6553 "%s: pWdaParams received NULL", __func__);
6554 VOS_ASSERT(0) ;
6555 return ;
6556 }
6557 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6558
6559 if(NULL == pWdaParams)
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6562 "%s: pWdaParams received NULL", __func__);
6563 VOS_ASSERT(0) ;
6564 return ;
6565 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306566 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6567 if( NULL == pTdlsLinkEstablishParams )
6568 {
6569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6570 "%s: pTdlsLinkEstablishParams "
6571 "received NULL " ,__func__);
6572 VOS_ASSERT(0);
6573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6574 vos_mem_free(pWdaParams);
6575 return ;
6576 }
6577 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6578 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306580 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306581 /* send response to UMAC*/
6582 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6583
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306584 return ;
6585}
6586
6587VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6588 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6589{
6590 WDI_Status status = WDI_STATUS_SUCCESS ;
6591 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6592 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6593 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6594 tWDA_ReqParams *pWdaParams = NULL;
6595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6596 "------> %s " ,__func__);
6597 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6598 {
6599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6600 "%s: VOS MEM Alloc Failure", __func__);
6601 VOS_ASSERT(0);
6602 return VOS_STATUS_E_NOMEM;
6603 }
6604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6605 if(NULL == pWdaParams)
6606 {
6607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6608 "%s: VOS MEM Alloc Failure", __func__);
6609 vos_mem_free(pTdlsLinkEstablishParams);
6610 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6611 VOS_ASSERT(0);
6612 return VOS_STATUS_E_NOMEM;
6613 }
6614 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306615 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306616 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306617 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306618 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306619 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306620 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306621 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306622 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306623 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306624
6625 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6626 /* Store msg pointer from PE, as this will be used for response */
6627 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6628 /* store Params pass it to WDI */
6629 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6630 pWdaParams->pWdaContext = pWDA;
6631
6632 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6633 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6634 WDA_SetTDLSLinkEstablishReqParamsCallback,
6635 pWdaParams);
6636 if(IS_WDI_STATUS_FAILURE(status))
6637 {
6638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6639 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6641 vos_mem_free(pWdaParams->wdaMsgParam);
6642 vos_mem_free(pWdaParams);
6643 }
6644 return CONVERT_WDI2VOS_STATUS(status);
6645}
6646#endif
6647
6648
Jeff Johnson295189b2012-06-20 16:38:30 -07006649#ifdef WLAN_FEATURE_VOWIFI_11R
6650/*
6651 * FUNCTION: WDA_AggrAddTSReqCallback
6652 * send ADD AGGREGATED TS RSP back to PE
6653 */
6654void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6655{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6657 tWDA_CbContext *pWDA;
6658 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006661 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006662 if(NULL == pWdaParams)
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006665 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006666 VOS_ASSERT(0) ;
6667 return ;
6668 }
6669
6670 pWDA = pWdaParams->pWdaContext;
6671 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006672
6673 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6674 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006675 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006678
6679 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6680 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 return ;
6682}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006683/*
6684 * FUNCTION: WDA_ProcessAddTSReq
6685 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6686 */
6687VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6688 tAggrAddTsParams *pAggrAddTsReqParams)
6689{
6690 WDI_Status status = WDI_STATUS_SUCCESS ;
6691 int i;
6692 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006693 tWDA_ReqParams *pWdaParams = NULL;
6694
6695
Jeff Johnson295189b2012-06-20 16:38:30 -07006696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006697 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6699 sizeof(WDI_AggrAddTSReqParamsType)) ;
6700 if(NULL == wdiAggrAddTSReqParam)
6701 {
6702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006704 VOS_ASSERT(0);
6705 return VOS_STATUS_E_NOMEM;
6706 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006707
6708
6709 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6710 if(NULL == pWdaParams)
6711 {
6712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006713 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006714 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006715 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006716 VOS_ASSERT(0);
6717 return VOS_STATUS_E_NOMEM;
6718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6720 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6721 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6723 {
6724 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6725 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6726 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6728 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6729 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6730 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6731 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6732 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6733 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6734 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6735 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6736 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6737 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6738 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6739 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6740 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6741 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6742 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6744 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6746 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6747 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6748 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6749 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6750 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6751 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6752 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6753 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6754 pAggrAddTsReqParams->tspec[i].inactInterval;
6755 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6756 pAggrAddTsReqParams->tspec[i].suspendInterval;
6757 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6758 pAggrAddTsReqParams->tspec[i].svcStartTime;
6759 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6760 pAggrAddTsReqParams->tspec[i].minDataRate;
6761 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6762 pAggrAddTsReqParams->tspec[i].meanDataRate;
6763 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6764 pAggrAddTsReqParams->tspec[i].peakDataRate;
6765 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6766 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6767 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6768 pAggrAddTsReqParams->tspec[i].delayBound;
6769 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6770 pAggrAddTsReqParams->tspec[i].minPhyRate;
6771 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6772 pAggrAddTsReqParams->tspec[i].surplusBw;
6773 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6774 pAggrAddTsReqParams->tspec[i].mediumTime;
6775 }
6776
6777 /* TODO: tAggrAddTsParams doesn't have the following fields */
6778#if 0
6779 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6780 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6781 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6782 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6783#endif
6784 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6785
6786 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006787 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006789 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6790
6791 pWdaParams->pWdaContext = pWDA;
6792
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006794 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6795
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 if(IS_WDI_STATUS_FAILURE(status))
6797 {
6798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6799 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006800 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6801 vos_mem_free(pWdaParams);
6802
6803 /* send the failure response back to PE*/
6804 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6805 {
6806 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6807 }
6808
6809 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6810 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 return CONVERT_WDI2VOS_STATUS(status) ;
6813}
6814#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006815/*
6816 * FUNCTION: WDA_EnterImpsReqCallback
6817 * send Enter IMPS RSP back to PE
6818 */
6819void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6820{
6821 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006823 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006824 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 return ;
6826}
Jeff Johnson295189b2012-06-20 16:38:30 -07006827/*
6828 * FUNCTION: WDA_ProcessEnterImpsReq
6829 * Request to WDI to Enter IMPS power state.
6830 */
6831VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6832{
6833 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006835 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006836 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 if(IS_WDI_STATUS_FAILURE(status))
6838 {
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6840 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006841 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 return CONVERT_WDI2VOS_STATUS(status) ;
6844}
Jeff Johnson295189b2012-06-20 16:38:30 -07006845/*
6846 * FUNCTION: WDA_ExitImpsReqCallback
6847 * send Exit IMPS RSP back to PE
6848 */
6849void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6850{
6851 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006853 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006854 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006855 return ;
6856}
Jeff Johnson295189b2012-06-20 16:38:30 -07006857/*
6858 * FUNCTION: WDA_ProcessExitImpsReq
6859 * Request to WDI to Exit IMPS power state.
6860 */
6861VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6862{
6863 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006865 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 if(IS_WDI_STATUS_FAILURE(status))
6868 {
6869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6870 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006871 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 return CONVERT_WDI2VOS_STATUS(status) ;
6874}
Jeff Johnson295189b2012-06-20 16:38:30 -07006875/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006876 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 * send Enter BMPS RSP back to PE
6878 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006879void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006880{
6881 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6882 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006883 tEnterBmpsParams *pEnterBmpsRspParams;
6884
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006886 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 if(NULL == pWdaParams)
6888 {
6889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006890 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006891 VOS_ASSERT(0) ;
6892 return ;
6893 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006894
6895 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6896 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6897
6898 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006899 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006900
6901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006903 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6904
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 return ;
6906}
Jeff Johnson295189b2012-06-20 16:38:30 -07006907/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006908 * FUNCTION: WDA_EnterBmpsReqCallback
6909 * Free memory and send Enter BMPS RSP back to PE.
6910 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6911 */
6912void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6913{
6914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6915 tWDA_CbContext *pWDA;
6916 tEnterBmpsParams *pEnterBmpsRspParams;
6917
6918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6919 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6920
6921 if(NULL == pWdaParams)
6922 {
6923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6924 "%s: pWdaParams received NULL", __func__);
6925 VOS_ASSERT(0);
6926 return;
6927 }
6928
6929 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6930 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6931 pEnterBmpsRspParams->status = wdiStatus;
6932
6933 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6934 {
6935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6936 vos_mem_free(pWdaParams);
6937 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6938 }
6939
6940 return;
6941}
6942/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 * FUNCTION: WDA_ProcessEnterBmpsReq
6944 * Request to WDI to Enter BMPS power state.
6945 */
6946VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6947 tEnterBmpsParams *pEnterBmpsReqParams)
6948{
6949 WDI_Status status = WDI_STATUS_SUCCESS;
6950 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6951 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006953 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6955 {
6956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006957 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006958 VOS_ASSERT(0);
6959 return VOS_STATUS_E_FAILURE;
6960 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6962 if (NULL == wdiEnterBmpsReqParams)
6963 {
6964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006966 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006967 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6968 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 return VOS_STATUS_E_NOMEM;
6970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6972 if (NULL == pWdaParams)
6973 {
6974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_ASSERT(0);
6977 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006978 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6979 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 return VOS_STATUS_E_NOMEM;
6981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6983 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6984 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6985 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006986 // For CCX and 11R Roaming
6987 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6988 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6989 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006990 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6991 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006992
Jeff Johnson295189b2012-06-20 16:38:30 -07006993 /* Store param pointer as passed in by caller */
6994 /* store Params pass it to WDI */
6995 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006996 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006999 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 if (IS_WDI_STATUS_FAILURE(status))
7001 {
7002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7003 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007005 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007006 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007007 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 return CONVERT_WDI2VOS_STATUS(status);
7010}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007011
7012
7013static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7014 WDI_Status wdiStatus,
7015 tExitBmpsParams *pExitBmpsReqParams)
7016{
7017 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7018
7019 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7020}
7021
7022
Jeff Johnson295189b2012-06-20 16:38:30 -07007023/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007024 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 * send Exit BMPS RSP back to PE
7026 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007027void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007028{
7029 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7030 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007031 tExitBmpsParams *pExitBmpsRspParams;
7032
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007034 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 if(NULL == pWdaParams)
7036 {
7037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007038 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 VOS_ASSERT(0) ;
7040 return ;
7041 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007042
7043 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7044 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7045
7046 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007047 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007048
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7050 vos_mem_free(pWdaParams) ;
7051
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007052 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007053 return ;
7054}
Jeff Johnson295189b2012-06-20 16:38:30 -07007055/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007056 * FUNCTION: WDA_ExitBmpsReqCallback
7057 * Free memory and send Exit BMPS RSP back to PE.
7058 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7059 */
7060void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7061{
7062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7063 tWDA_CbContext *pWDA;
7064 tExitBmpsParams *pExitBmpsRspParams;
7065
7066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7067 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7068
7069 if(NULL == pWdaParams)
7070 {
7071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7072 "%s: pWdaParams received NULL", __func__);
7073 VOS_ASSERT(0);
7074 return;
7075 }
7076
7077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7078 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7079 pExitBmpsRspParams->status = wdiStatus;
7080
7081 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7082 {
7083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7084 vos_mem_free(pWdaParams);
7085 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7086 }
7087
7088 return;
7089}
7090/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 * FUNCTION: WDA_ProcessExitBmpsReq
7092 * Request to WDI to Exit BMPS power state.
7093 */
7094VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7095 tExitBmpsParams *pExitBmpsReqParams)
7096{
7097 WDI_Status status = WDI_STATUS_SUCCESS ;
7098 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7099 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7100 sizeof(WDI_ExitBmpsReqParamsType)) ;
7101 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007103 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 if(NULL == wdiExitBmpsReqParams)
7105 {
7106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007109 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 return VOS_STATUS_E_NOMEM;
7111 }
7112 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7113 if(NULL == pWdaParams)
7114 {
7115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007117 VOS_ASSERT(0);
7118 vos_mem_free(wdiExitBmpsReqParams);
7119 return VOS_STATUS_E_NOMEM;
7120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007121 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007122
7123 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7124
Yue Ma7f44bbe2013-04-12 11:47:39 -07007125 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7126 wdiExitBmpsReqParams->pUserData = pWdaParams;
7127
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 /* Store param pointer as passed in by caller */
7129 /* store Params pass it to WDI */
7130 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7131 pWdaParams->pWdaContext = pWDA;
7132 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007133 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007134 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 if(IS_WDI_STATUS_FAILURE(status))
7136 {
7137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7138 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7140 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007141 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007143 return CONVERT_WDI2VOS_STATUS(status) ;
7144}
Jeff Johnson295189b2012-06-20 16:38:30 -07007145/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007146 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 * send Enter UAPSD RSP back to PE
7148 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007149void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007150{
7151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7152 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007153 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007155 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 if(NULL == pWdaParams)
7157 {
7158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007159 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_ASSERT(0) ;
7161 return ;
7162 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007163
7164 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7165 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7166
7167 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007168 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007169
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7171 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007172 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 return ;
7174}
Jeff Johnson295189b2012-06-20 16:38:30 -07007175/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007176 * FUNCTION: WDA_EnterUapsdReqCallback
7177 * Free memory and send Enter UAPSD RSP back to PE.
7178 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7179 */
7180void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7181{
7182 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7183 tWDA_CbContext *pWDA;
7184 tUapsdParams *pEnterUapsdRsqParams;
7185
7186 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7187 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7188
7189 if(NULL == pWdaParams)
7190 {
7191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7192 "%s: pWdaParams received NULL", __func__);
7193 VOS_ASSERT(0);
7194 return;
7195 }
7196
7197 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7198 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7199 pEnterUapsdRsqParams->status = wdiStatus;
7200
7201 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7202 {
7203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7204 vos_mem_free(pWdaParams);
7205 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7206 }
7207
7208 return;
7209}
7210/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 * FUNCTION: WDA_ProcessEnterUapsdReq
7212 * Request to WDI to Enter UAPSD power state.
7213 */
7214VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7215 tUapsdParams *pEnterUapsdReqParams)
7216{
7217 WDI_Status status = WDI_STATUS_SUCCESS ;
7218 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7219 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7220 sizeof(WDI_EnterUapsdReqParamsType)) ;
7221 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if(NULL == wdiEnterUapsdReqParams)
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 VOS_ASSERT(0);
7229 return VOS_STATUS_E_NOMEM;
7230 }
7231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7232 if(NULL == pWdaParams)
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 VOS_ASSERT(0);
7237 vos_mem_free(wdiEnterUapsdReqParams);
7238 return VOS_STATUS_E_NOMEM;
7239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7241 pEnterUapsdReqParams->beDeliveryEnabled;
7242 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7243 pEnterUapsdReqParams->beTriggerEnabled;
7244 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7245 pEnterUapsdReqParams->bkDeliveryEnabled;
7246 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7247 pEnterUapsdReqParams->bkTriggerEnabled;
7248 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7249 pEnterUapsdReqParams->viDeliveryEnabled;
7250 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7251 pEnterUapsdReqParams->viTriggerEnabled;
7252 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7253 pEnterUapsdReqParams->voDeliveryEnabled;
7254 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7255 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007256 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007257
Yue Ma7f44bbe2013-04-12 11:47:39 -07007258 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7259 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007260
Jeff Johnson295189b2012-06-20 16:38:30 -07007261 /* Store param pointer as passed in by caller */
7262 /* store Params pass it to WDI */
7263 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7264 pWdaParams->pWdaContext = pWDA;
7265 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007267 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007268 if(IS_WDI_STATUS_FAILURE(status))
7269 {
7270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7271 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7272 vos_mem_free(pWdaParams->wdaMsgParam) ;
7273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7274 vos_mem_free(pWdaParams) ;
7275 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 return CONVERT_WDI2VOS_STATUS(status) ;
7277}
Jeff Johnson295189b2012-06-20 16:38:30 -07007278/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007279 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 * send Exit UAPSD RSP back to PE
7281 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007282void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007283{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007284
7285 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7286 tWDA_CbContext *pWDA;
7287 tExitUapsdParams *pExitUapsdRspParams;
7288
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007290 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007291 if(NULL == pWdaParams)
7292 {
7293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007294 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007295 VOS_ASSERT(0);
7296 return;
7297 }
7298
7299 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7300 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7301
7302 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007303 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007304
7305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7306 vos_mem_free(pWdaParams) ;
7307
7308 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 return ;
7310}
Jeff Johnson295189b2012-06-20 16:38:30 -07007311/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007312 * FUNCTION: WDA_ExitUapsdReqCallback
7313 * Free memory and send Exit UAPSD RSP back to PE.
7314 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7315 */
7316void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7317{
7318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7319 tWDA_CbContext *pWDA;
7320 tExitUapsdParams *pExitUapsdRspParams;
7321
7322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7323 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7324
7325 if(NULL == pWdaParams)
7326 {
7327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7328 "%s: pWdaParams received NULL", __func__);
7329 VOS_ASSERT(0);
7330 return;
7331 }
7332
7333 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7334 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7335 pExitUapsdRspParams->status = wdiStatus;
7336
7337 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7338 {
7339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7340 vos_mem_free(pWdaParams);
7341 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7342 }
7343
7344 return;
7345}
7346/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 * FUNCTION: WDA_ProcessExitUapsdReq
7348 * Request to WDI to Exit UAPSD power state.
7349 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007350VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7351 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007352{
7353 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007354 tWDA_ReqParams *pWdaParams ;
7355 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7356 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7357 sizeof(WDI_ExitUapsdReqParamsType)) ;
7358
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007360 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007361
7362 if(NULL == wdiExitUapsdReqParams)
7363 {
7364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007365 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007366 VOS_ASSERT(0);
7367 return VOS_STATUS_E_NOMEM;
7368 }
7369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7370 if(NULL == pWdaParams)
7371 {
7372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007373 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007374 VOS_ASSERT(0);
7375 vos_mem_free(wdiExitUapsdReqParams);
7376 return VOS_STATUS_E_NOMEM;
7377 }
7378
7379 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007380 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7381 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007382
7383 /* Store param pointer as passed in by caller */
7384 /* store Params pass it to WDI */
7385 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7386 pWdaParams->pWdaContext = pWDA;
7387 pWdaParams->wdaMsgParam = pExitUapsdParams;
7388
Yue Ma7f44bbe2013-04-12 11:47:39 -07007389 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 if(IS_WDI_STATUS_FAILURE(status))
7391 {
7392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7393 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007394 vos_mem_free(pWdaParams->wdaMsgParam) ;
7395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7396 vos_mem_free(pWdaParams) ;
7397
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 return CONVERT_WDI2VOS_STATUS(status) ;
7400}
7401
Jeff Johnson295189b2012-06-20 16:38:30 -07007402/*
7403 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7404 *
7405 */
7406void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7407{
7408 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007410 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 if(NULL == pWdaParams)
7412 {
7413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007414 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 VOS_ASSERT(0) ;
7416 return ;
7417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 if( pWdaParams != NULL )
7419 {
7420 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7421 {
7422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7423 }
7424 if( pWdaParams->wdaMsgParam != NULL )
7425 {
7426 vos_mem_free(pWdaParams->wdaMsgParam) ;
7427 }
7428 vos_mem_free(pWdaParams) ;
7429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 return ;
7431}
Jeff Johnson295189b2012-06-20 16:38:30 -07007432/*
7433 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7434 * Request to WDI to set the power save params at start.
7435 */
7436VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7437 tSirPowerSaveCfg *pPowerSaveCfg)
7438{
7439 WDI_Status status = WDI_STATUS_SUCCESS ;
7440 tHalCfg *tlvStruct = NULL ;
7441 tANI_U8 *tlvStructStart = NULL ;
7442 v_PVOID_t *configParam;
7443 tANI_U32 configParamSize;
7444 tANI_U32 *configDataValue;
7445 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7446 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7450 {
7451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007452 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007454 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007455 return VOS_STATUS_E_FAILURE;
7456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007457 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7458 if (NULL == wdiPowerSaveCfg)
7459 {
7460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007463 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 return VOS_STATUS_E_NOMEM;
7465 }
7466 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7467 if(NULL == pWdaParams)
7468 {
7469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 VOS_ASSERT(0);
7472 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007473 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 return VOS_STATUS_E_NOMEM;
7475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7477 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 if(NULL == configParam)
7479 {
7480 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007481 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007482 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 vos_mem_free(pWdaParams);
7484 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007485 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 return VOS_STATUS_E_NOMEM;
7487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 vos_mem_set(configParam, configParamSize, 0);
7489 wdiPowerSaveCfg->pConfigBuffer = configParam;
7490 tlvStruct = (tHalCfg *)configParam;
7491 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7493 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7494 tlvStruct->length = sizeof(tANI_U32);
7495 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7496 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7498 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7500 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7501 tlvStruct->length = sizeof(tANI_U32);
7502 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7503 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7505 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7507 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7508 tlvStruct->length = sizeof(tANI_U32);
7509 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7510 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007511 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7512 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7514 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7515 tlvStruct->length = sizeof(tANI_U32);
7516 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7517 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7519 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7521 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7522 tlvStruct->length = sizeof(tANI_U32);
7523 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7524 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7526 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7528 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7529 tlvStruct->length = sizeof(tANI_U32);
7530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7531 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7533 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7535 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7536 tlvStruct->length = sizeof(tANI_U32);
7537 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7538 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7540 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7542 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7543 tlvStruct->length = sizeof(tANI_U32);
7544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7545 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7546 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7547 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007548 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7549 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7550 tlvStruct->length = sizeof(tANI_U32);
7551 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7552 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7553 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7554 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7556 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7557 tlvStruct->length = sizeof(tANI_U32);
7558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7559 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7561 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7563 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7564 tlvStruct->length = sizeof(tANI_U32);
7565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7566 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7568 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007569 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 /* store Params pass it to WDI */
7572 pWdaParams->wdaMsgParam = configParam;
7573 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7574 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7576 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 if(IS_WDI_STATUS_FAILURE(status))
7578 {
7579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7580 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7581 vos_mem_free(pWdaParams->wdaMsgParam);
7582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7583 vos_mem_free(pWdaParams);
7584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 return CONVERT_WDI2VOS_STATUS(status);
7587}
Jeff Johnson295189b2012-06-20 16:38:30 -07007588/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007589 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 *
7591 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007592void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007593{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7595
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007598
7599 if(NULL == pWdaParams)
7600 {
7601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7602 "%s: pWdaParams received NULL", __func__);
7603 VOS_ASSERT(0);
7604 return ;
7605 }
7606
7607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 vos_mem_free(pWdaParams);
7609
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 return ;
7611}
Jeff Johnson295189b2012-06-20 16:38:30 -07007612/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007613 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7614 * Free memory.
7615 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7616 */
7617void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7618{
7619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7620
7621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7622 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7623
7624 if(NULL == pWdaParams)
7625 {
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7627 "%s: pWdaParams received NULL", __func__);
7628 VOS_ASSERT(0);
7629 return;
7630 }
7631
7632 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7633 {
7634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7635 vos_mem_free(pWdaParams);
7636 }
7637
7638 return;
7639}
7640/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 * FUNCTION: WDA_SetUapsdAcParamsReq
7642 * Request to WDI to set the UAPSD params for an ac (sta mode).
7643 */
7644VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7645 tUapsdInfo *pUapsdInfo)
7646{
7647 WDI_Status status = WDI_STATUS_SUCCESS;
7648 tWDA_CbContext *pWDA = NULL ;
7649 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7650 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7651 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7652 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007654 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 if(NULL == wdiUapsdParams)
7656 {
7657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 VOS_ASSERT(0);
7660 return VOS_STATUS_E_NOMEM;
7661 }
7662 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7663 if(NULL == pWdaParams)
7664 {
7665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007666 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 VOS_ASSERT(0);
7668 vos_mem_free(wdiUapsdParams);
7669 return VOS_STATUS_E_NOMEM;
7670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7672 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7673 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7674 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7675 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7676 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007677 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7678 wdiUapsdParams->pUserData = pWdaParams;
7679
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 pWdaParams->pWdaContext = pWDA;
7682 /* Store param pointer as passed in by caller */
7683 pWdaParams->wdaMsgParam = pUapsdInfo;
7684 /* store Params pass it to WDI */
7685 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007687 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 if(IS_WDI_STATUS_FAILURE(status))
7690 {
7691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7692 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7694 vos_mem_free(pWdaParams);
7695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7697 return VOS_STATUS_SUCCESS;
7698 else
7699 return VOS_STATUS_E_FAILURE;
7700
Jeff Johnson295189b2012-06-20 16:38:30 -07007701}
7702/*
7703 * FUNCTION: WDA_ClearUapsdAcParamsReq
7704 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7705 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7706 * and again enter the UPASD with the modified params. Hence the disable
7707 * function was kept empty.
7708 *
7709 */
7710VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7711{
7712 /* do nothing */
7713 return VOS_STATUS_SUCCESS;
7714}
Jeff Johnson295189b2012-06-20 16:38:30 -07007715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007716 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007717 *
7718 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007719void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007720{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007721 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7722
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007724 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007725
7726 if(NULL == pWdaParams)
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007729 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007730 VOS_ASSERT(0) ;
7731 return ;
7732 }
7733
7734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7735 vos_mem_free(pWdaParams->wdaMsgParam);
7736 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007737
Jeff Johnson295189b2012-06-20 16:38:30 -07007738 //print a msg, nothing else to do
7739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007740 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 return ;
7742}
Jeff Johnson295189b2012-06-20 16:38:30 -07007743/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007744 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7745 * Free memory.
7746 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7747 */
7748void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7749{
7750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7751
7752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7753 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7754
7755 if(NULL == pWdaParams)
7756 {
7757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7758 "%s: pWdaParams received NULL", __func__);
7759 VOS_ASSERT(0);
7760 return;
7761 }
7762
7763 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7764 {
7765 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7766 vos_mem_free(pWdaParams->wdaMsgParam);
7767 vos_mem_free(pWdaParams);
7768 }
7769
7770 return;
7771}
7772/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007773 * FUNCTION: WDA_UpdateUapsdParamsReq
7774 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7775 */
7776VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7777 tUpdateUapsdParams* pUpdateUapsdInfo)
7778{
7779 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007780 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7782 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7783 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784 tWDA_ReqParams *pWdaParams = NULL;
7785
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007787 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 if(NULL == wdiUpdateUapsdParams)
7789 {
7790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 VOS_ASSERT(0);
7793 return VOS_STATUS_E_NOMEM;
7794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7796 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7797 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007798 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7799 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007800
7801 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7802 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007803 {
7804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007805 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007807 vos_mem_free(pUpdateUapsdInfo);
7808 vos_mem_free(wdiUpdateUapsdParams);
7809 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007811 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007812 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007814 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7815 pWdaParams->pWdaContext = pWDA;
7816
Jeff Johnson43971f52012-07-17 12:26:56 -07007817 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007818 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007819 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820
Jeff Johnson43971f52012-07-17 12:26:56 -07007821 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7824 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007825 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7827 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007828 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007830 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007831}
Jeff Johnson295189b2012-06-20 16:38:30 -07007832/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007833 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 *
7835 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007836void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007837{
7838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007840 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 if(WDI_STATUS_SUCCESS != wdiStatus)
7842 {
7843 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007844 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 if(NULL == pWdaParams)
7847 {
7848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007849 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 VOS_ASSERT(0) ;
7851 return ;
7852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007853 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7854 vos_mem_free(pWdaParams->wdaMsgParam);
7855 vos_mem_free(pWdaParams);
7856 return ;
7857}
Jeff Johnson295189b2012-06-20 16:38:30 -07007858/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007859 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7860 * Free memory.
7861 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7862 */
7863void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7864{
7865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7866
7867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7868 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7869
7870 if(NULL == pWdaParams)
7871 {
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7873 "%s: pWdaParams received NULL", __func__);
7874 VOS_ASSERT(0);
7875 return;
7876 }
7877
7878 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7879 {
7880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7881 vos_mem_free(pWdaParams->wdaMsgParam);
7882 vos_mem_free(pWdaParams);
7883 }
7884
7885 return;
7886}
7887/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7889 *
7890 */
7891VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7892 tSirWlanSetRxpFilters *pWlanSuspendParam)
7893{
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007895 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007896 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7897 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7898 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7899 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007901 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007902 if(NULL == wdiRxpFilterParams)
7903 {
7904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007906 VOS_ASSERT(0);
7907 vos_mem_free(pWlanSuspendParam);
7908 return VOS_STATUS_E_NOMEM;
7909 }
7910 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7911 if(NULL == pWdaParams)
7912 {
7913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 VOS_ASSERT(0);
7916 vos_mem_free(wdiRxpFilterParams);
7917 vos_mem_free(pWlanSuspendParam);
7918 return VOS_STATUS_E_NOMEM;
7919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7921 pWlanSuspendParam->setMcstBcstFilter;
7922 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7923 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7924
Yue Ma7f44bbe2013-04-12 11:47:39 -07007925 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7926 wdiRxpFilterParams->pUserData = pWdaParams;
7927
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 pWdaParams->pWdaContext = pWDA;
7929 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7930 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007931 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007932 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007934 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007935 {
7936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7937 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007938 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007939 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7940 vos_mem_free(pWdaParams->wdaMsgParam);
7941 vos_mem_free(pWdaParams);
7942 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007943 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944}
Jeff Johnson295189b2012-06-20 16:38:30 -07007945/*
7946 * FUNCTION: WDA_WdiIndicationCallback
7947 *
7948 */
7949void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7950 void* pUserData)
7951{
7952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007953 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007954}
Jeff Johnson295189b2012-06-20 16:38:30 -07007955/*
7956 * FUNCTION: WDA_ProcessWlanSuspendInd
7957 *
7958 */
7959VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7960 tSirWlanSuspendParam *pWlanSuspendParam)
7961{
7962 WDI_Status wdiStatus;
7963 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007965 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7967 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7968 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7969 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7972 if(WDI_STATUS_PENDING == wdiStatus)
7973 {
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007975 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 }
7977 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7978 {
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007980 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 vos_mem_free(pWlanSuspendParam);
7983 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7984}
7985
Chet Lanctot186b5732013-03-18 10:26:30 -07007986#ifdef WLAN_FEATURE_11W
7987/*
7988 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7989 *
7990 */
7991VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7992 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7993{
7994 WDI_Status wdiStatus;
7995 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7997 "------> %s ", __func__);
7998
7999 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8000 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8001 sizeof(tSirMacAddr));
8002
8003 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8004 wdiExclUnencryptParams.pUserData = pWDA;
8005
8006 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8007 if(WDI_STATUS_PENDING == wdiStatus)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8010 "Pending received for %s:%d ", __func__, __LINE__ );
8011 }
8012 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8015 "Failure in %s:%d ", __func__, __LINE__ );
8016 }
8017 vos_mem_free(pExclUnencryptParam);
8018 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8019}
8020#endif
8021
Jeff Johnson295189b2012-06-20 16:38:30 -07008022/*
8023 * FUNCTION: WDA_ProcessWlanResumeCallback
8024 *
8025 */
8026void WDA_ProcessWlanResumeCallback(
8027 WDI_SuspendResumeRspParamsType *resumeRspParams,
8028 void* pUserData)
8029{
8030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008032 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 if(NULL == pWdaParams)
8034 {
8035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008036 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 VOS_ASSERT(0) ;
8038 return ;
8039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008040 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8041 {
8042 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008043 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8046 vos_mem_free(pWdaParams->wdaMsgParam);
8047 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 return ;
8049}
Jeff Johnson295189b2012-06-20 16:38:30 -07008050/*
8051 * FUNCTION: WDA_ProcessWlanResumeReq
8052 *
8053 */
8054VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8055 tSirWlanResumeParam *pWlanResumeParam)
8056{
8057 WDI_Status wdiStatus;
8058 WDI_ResumeParamsType *wdiResumeParams =
8059 (WDI_ResumeParamsType *)vos_mem_malloc(
8060 sizeof(WDI_ResumeParamsType) ) ;
8061 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 if(NULL == wdiResumeParams)
8065 {
8066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 VOS_ASSERT(0);
8069 return VOS_STATUS_E_NOMEM;
8070 }
8071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8072 if(NULL == pWdaParams)
8073 {
8074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 VOS_ASSERT(0);
8077 vos_mem_free(wdiResumeParams);
8078 return VOS_STATUS_E_NOMEM;
8079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8081 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 wdiResumeParams->wdiReqStatusCB = NULL;
8084 pWdaParams->wdaMsgParam = pWlanResumeParam;
8085 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8086 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8088 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8089 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8091 {
8092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8093 "Failure in Host Resume REQ WDI API, free all the memory " );
8094 VOS_ASSERT(0);
8095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8096 vos_mem_free(pWdaParams->wdaMsgParam);
8097 vos_mem_free(pWdaParams);
8098 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8100}
8101
Jeff Johnson295189b2012-06-20 16:38:30 -07008102/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008103 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008104 *
8105 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008106void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008107{
8108 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 if(NULL == pWdaParams)
8112 {
8113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 VOS_ASSERT(0) ;
8116 return ;
8117 }
8118
8119 vos_mem_free(pWdaParams->wdaMsgParam) ;
8120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8121 vos_mem_free(pWdaParams) ;
8122 /*
8123 * No respone required for SetBeaconFilter req so just free the request
8124 * param here
8125 */
8126
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 return ;
8128}
Jeff Johnson295189b2012-06-20 16:38:30 -07008129/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008130 * FUNCTION: WDA_SetBeaconFilterReqCallback
8131 * Free memory.
8132 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8133 */
8134void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8135{
8136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8137
8138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8139 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8140
8141 if(NULL == pWdaParams)
8142 {
8143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8144 "%s: pWdaParams received NULL", __func__);
8145 VOS_ASSERT(0);
8146 return;
8147 }
8148
8149 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8150 {
8151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8152 vos_mem_free(pWdaParams->wdaMsgParam);
8153 vos_mem_free(pWdaParams);
8154 }
8155
8156 return;
8157}
8158/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 * FUNCTION: WDA_SetBeaconFilterReq
8160 * Request to WDI to send the beacon filtering related information.
8161 */
8162VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8163 tBeaconFilterMsg* pBeaconFilterInfo)
8164{
8165 WDI_Status status = WDI_STATUS_SUCCESS;
8166 tANI_U8 *dstPtr, *srcPtr;
8167 tANI_U8 filterLength;
8168 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8169 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8170 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8171 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 if(NULL == wdiBeaconFilterInfo)
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 return VOS_STATUS_E_NOMEM;
8180 }
8181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8182 if(NULL == pWdaParams)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_ASSERT(0);
8187 vos_mem_free(wdiBeaconFilterInfo);
8188 return VOS_STATUS_E_NOMEM;
8189 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8191 pBeaconFilterInfo->beaconInterval;
8192 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8193 pBeaconFilterInfo->capabilityInfo;
8194 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8195 pBeaconFilterInfo->capabilityMask;
8196 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008197
8198 //Fill the BssIdx
8199 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8200
Jeff Johnson295189b2012-06-20 16:38:30 -07008201 //Fill structure with info contained in the beaconFilterTable
8202 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8203 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8204 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8205 if(WDI_BEACON_FILTER_LEN < filterLength)
8206 {
8207 filterLength = WDI_BEACON_FILTER_LEN;
8208 }
8209 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008210 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8211 wdiBeaconFilterInfo->pUserData = pWdaParams;
8212
Jeff Johnson295189b2012-06-20 16:38:30 -07008213 /* Store param pointer as passed in by caller */
8214 /* store Params pass it to WDI */
8215 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8216 pWdaParams->pWdaContext = pWDA;
8217 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8218
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008220 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 if(IS_WDI_STATUS_FAILURE(status))
8222 {
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8224 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8225 vos_mem_free(pWdaParams->wdaMsgParam) ;
8226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8227 vos_mem_free(pWdaParams) ;
8228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008229 return CONVERT_WDI2VOS_STATUS(status) ;
8230}
Jeff Johnson295189b2012-06-20 16:38:30 -07008231/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008232 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008233 *
8234 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008235void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008236{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8238
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008240 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008241
8242 if(NULL == pWdaParams)
8243 {
8244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008245 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008246 VOS_ASSERT(0) ;
8247 return ;
8248 }
8249
8250 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8251 vos_mem_free(pWdaParams->wdaMsgParam);
8252 vos_mem_free(pWdaParams);
8253
Jeff Johnson295189b2012-06-20 16:38:30 -07008254 //print a msg, nothing else to do
8255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008256 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 return ;
8258}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008259/*
8260 * FUNCTION: WDA_RemBeaconFilterReqCallback
8261 * Free memory.
8262 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8263 */
8264void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8265{
8266 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8267
8268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8269 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8270
8271 if(NULL == pWdaParams)
8272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8274 "%s: pWdaParams received NULL", __func__);
8275 VOS_ASSERT(0);
8276 return;
8277 }
8278
8279 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8280 {
8281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8282 vos_mem_free(pWdaParams->wdaMsgParam);
8283 vos_mem_free(pWdaParams);
8284 }
8285
8286 return;
8287}
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 // TODO: PE does not have this feature for now implemented,
8289 // but the support for removing beacon filter exists between
8290 // HAL and FW. This function can be called whenever PE defines
8291 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008292/*
8293 * FUNCTION: WDA_RemBeaconFilterReq
8294 * Request to WDI to send the removal of beacon filtering related information.
8295 */
8296VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8297 tRemBeaconFilterMsg* pBeaconFilterInfo)
8298{
8299 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008300 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8302 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8303 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304 tWDA_ReqParams *pWdaParams ;
8305
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == wdiBeaconFilterInfo)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 VOS_ASSERT(0);
8313 return VOS_STATUS_E_NOMEM;
8314 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008315 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8316 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 {
8318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008319 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008321 vos_mem_free(wdiBeaconFilterInfo);
8322 vos_mem_free(pBeaconFilterInfo);
8323 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008325
8326 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8327 pBeaconFilterInfo->ucIeCount;
8328 //Fill structure with info contained in the ucRemIeId
8329 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8330 pBeaconFilterInfo->ucRemIeId,
8331 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8332 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8333 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334
8335 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008336 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008338 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8339
8340 pWdaParams->pWdaContext = pWDA;
8341
Jeff Johnson43971f52012-07-17 12:26:56 -07008342 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008343 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008344 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008348 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8350 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008351 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008353 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008354}
Jeff Johnson295189b2012-06-20 16:38:30 -07008355/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008356 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 *
8358 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008359void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008360{
8361 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008363 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 if(NULL == pWdaParams)
8365 {
8366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008367 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 VOS_ASSERT(0) ;
8369 return ;
8370 }
8371
8372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8373 vos_mem_free(pWdaParams) ;
8374
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 return ;
8376}
Jeff Johnson295189b2012-06-20 16:38:30 -07008377/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008378 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8379 * Free memory.
8380 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8381 */
8382void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8383{
8384 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8385
8386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8387 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8388
8389 if(NULL == pWdaParams)
8390 {
8391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8392 "%s: pWdaParams received NULL", __func__);
8393 VOS_ASSERT(0);
8394 return;
8395 }
8396
8397 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8398 {
8399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8400 vos_mem_free(pWdaParams);
8401 }
8402
8403 return;
8404}
8405/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 * FUNCTION: WDA_SetRSSIThresholdsReq
8407 * Request to WDI to set the RSSI thresholds (sta mode).
8408 */
8409VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8410{
8411 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008412 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 tWDA_CbContext *pWDA = NULL ;
8414 v_PVOID_t pVosContext = NULL;
8415 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8416 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8417 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8418 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008420 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 if(NULL == wdiRSSIThresholdsInfo)
8422 {
8423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008424 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 VOS_ASSERT(0);
8426 return VOS_STATUS_E_NOMEM;
8427 }
8428 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8429 if(NULL == pWdaParams)
8430 {
8431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 VOS_ASSERT(0);
8434 vos_mem_free(wdiRSSIThresholdsInfo);
8435 return VOS_STATUS_E_NOMEM;
8436 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008438 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8439 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8440 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8442 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8443 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8445 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8446 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008447 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8448 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8450 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8451
Jeff Johnson295189b2012-06-20 16:38:30 -07008452 /* Store param pointer as passed in by caller */
8453 /* store Params pass it to WDI */
8454 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8455 pWdaParams->pWdaContext = pWDA;
8456 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008457 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008458 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008459 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008460 {
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8462 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008463 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8465 vos_mem_free(pWdaParams) ;
8466 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008467 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008468
8469}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008470/*
Yue Madb90ac12013-04-04 13:39:13 -07008471 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008472 *
8473 */
Yue Madb90ac12013-04-04 13:39:13 -07008474void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008475{
8476 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8477
8478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008479 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 if(NULL == pWdaParams)
8481 {
8482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008483 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 VOS_ASSERT(0) ;
8485 return ;
8486 }
8487
8488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8489 vos_mem_free(pWdaParams->wdaMsgParam);
8490 vos_mem_free(pWdaParams) ;
8491
8492 //print a msg, nothing else to do
8493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008494 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 return ;
8496}
Jeff Johnson295189b2012-06-20 16:38:30 -07008497/*
Yue Madb90ac12013-04-04 13:39:13 -07008498 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008499 * Free memory.
8500 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008501 */
8502void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8503{
8504 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8505
8506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8507 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8508
8509 if(NULL == pWdaParams)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "%s: Invalid pWdaParams pointer", __func__);
8513 VOS_ASSERT(0);
8514 return;
8515 }
8516
8517 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8518 {
8519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8520 vos_mem_free(pWdaParams->wdaMsgParam);
8521 vos_mem_free(pWdaParams);
8522 }
8523
8524 return;
8525}
8526/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 * FUNCTION: WDA_ProcessHostOffloadReq
8528 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8529 * to broadcast traffic (sta mode).
8530 */
8531VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8532 tSirHostOffloadReq *pHostOffloadParams)
8533{
8534 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008535 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008536 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8537 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8538 sizeof(WDI_HostOffloadReqParamsType)) ;
8539 tWDA_ReqParams *pWdaParams ;
8540
8541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008542 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008543
8544 if(NULL == wdiHostOffloadInfo)
8545 {
8546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008547 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008548 VOS_ASSERT(0);
8549 return VOS_STATUS_E_NOMEM;
8550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8552 if(NULL == pWdaParams)
8553 {
8554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 VOS_ASSERT(0);
8557 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008558 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 return VOS_STATUS_E_NOMEM;
8560 }
8561
8562 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8563 pHostOffloadParams->offloadType;
8564 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8565 pHostOffloadParams->enableOrDisable;
8566
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008567 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8568 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8569
Jeff Johnson295189b2012-06-20 16:38:30 -07008570 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8571 {
8572 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8573 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8574 pHostOffloadParams->params.hostIpv4Addr,
8575 4);
8576 break;
8577 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8578 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8579 pHostOffloadParams->params.hostIpv6Addr,
8580 16);
8581 break;
8582 case SIR_IPV6_NS_OFFLOAD:
8583 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8584 pHostOffloadParams->params.hostIpv6Addr,
8585 16);
8586
8587#ifdef WLAN_NS_OFFLOAD
8588 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8589 {
8590 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8591 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8592 16);
8593 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8594 }
8595 else
8596 {
8597 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8598 }
8599
8600 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8601 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8602 16);
8603 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8604 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8605 6);
8606
8607 //Only two are supported so let's go through them without a loop
8608 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8609 {
8610 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8611 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8612 16);
8613 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8614 }
8615 else
8616 {
8617 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8618 }
8619
8620 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8621 {
8622 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8623 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8624 16);
8625 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8626 }
8627 else
8628 {
8629 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8630 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308631 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8632 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008633 break;
8634#endif //WLAN_NS_OFFLOAD
8635 default:
8636 {
8637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8638 "No Handling for Offload Type %x in WDA "
8639 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8640 //WDA_VOS_ASSERT(0) ;
8641 }
8642 }
Yue Madb90ac12013-04-04 13:39:13 -07008643 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8644 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008645
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008647 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 /* store Params pass it to WDI */
8649 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8650 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651
Jeff Johnson295189b2012-06-20 16:38:30 -07008652
Jeff Johnson43971f52012-07-17 12:26:56 -07008653 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008654 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008655
Jeff Johnson43971f52012-07-17 12:26:56 -07008656 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 {
8658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8659 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008660 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8662 vos_mem_free(pWdaParams->wdaMsgParam);
8663 vos_mem_free(pWdaParams) ;
8664 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008665 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008666
8667}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008668/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008669 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008670 *
8671 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008672void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008673{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8675
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008677 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008678
8679 if(NULL == pWdaParams)
8680 {
8681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008682 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008683 VOS_ASSERT(0) ;
8684 return ;
8685 }
8686
8687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8688 vos_mem_free(pWdaParams->wdaMsgParam);
8689 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008690
Jeff Johnson295189b2012-06-20 16:38:30 -07008691 //print a msg, nothing else to do
8692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008693 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008694 return ;
8695}
Jeff Johnson295189b2012-06-20 16:38:30 -07008696/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008697 * FUNCTION: WDA_KeepAliveReqCallback
8698 * Free memory.
8699 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8700 */
8701void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8702{
8703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8704
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8706 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8707
8708 if(NULL == pWdaParams)
8709 {
8710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8711 "%s: pWdaParams received NULL", __func__);
8712 VOS_ASSERT(0);
8713 return;
8714 }
8715
8716 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8717 {
8718 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8719 vos_mem_free(pWdaParams->wdaMsgParam);
8720 vos_mem_free(pWdaParams);
8721 }
8722
8723 return;
8724}
8725/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 * FUNCTION: WDA_ProcessKeepAliveReq
8727 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8728 * wakeup due to broadcast traffic (sta mode).
8729 */
8730VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8731 tSirKeepAliveReq *pKeepAliveParams)
8732{
8733 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008734 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008735 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8736 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8737 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008738 tWDA_ReqParams *pWdaParams;
8739
Jeff Johnson295189b2012-06-20 16:38:30 -07008740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008742 if(NULL == wdiKeepAliveInfo)
8743 {
8744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008747 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748 return VOS_STATUS_E_NOMEM;
8749 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008750
8751 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8752 if(NULL == pWdaParams)
8753 {
8754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008755 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008756 VOS_ASSERT(0);
8757 vos_mem_free(wdiKeepAliveInfo);
8758 vos_mem_free(pKeepAliveParams);
8759 return VOS_STATUS_E_NOMEM;
8760 }
8761
Jeff Johnson295189b2012-06-20 16:38:30 -07008762 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8763 pKeepAliveParams->packetType;
8764 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8765 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008766
8767 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8768 pKeepAliveParams->bssId,
8769 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008770
8771 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8772 {
8773 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8774 pKeepAliveParams->hostIpv4Addr,
8775 SIR_IPV4_ADDR_LEN);
8776 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8777 pKeepAliveParams->destIpv4Addr,
8778 SIR_IPV4_ADDR_LEN);
8779 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8780 pKeepAliveParams->destMacAddr,
8781 SIR_MAC_ADDR_LEN);
8782 }
8783 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8784 {
8785 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8786 SIR_IPV4_ADDR_LEN,
8787 0);
8788 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8789 SIR_IPV4_ADDR_LEN,
8790 0);
8791 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8792 SIR_MAC_ADDR_LEN,
8793 0);
8794 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008795 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8796 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008797
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008799 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008801 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8802 pWdaParams->pWdaContext = pWDA;
8803
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8805 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8806 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8807 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8808 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8810 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8811 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8812 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8813 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8815 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8816 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8817 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8818 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8819 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8820 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8821 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8823 "TimePeriod %d PacketType %d",
8824 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8825 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008826 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008827 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008828
Jeff Johnson43971f52012-07-17 12:26:56 -07008829 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008830 {
8831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8832 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008833 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8835 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008836 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008837 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008838 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008839
8840}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008841/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008842 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008843 *
8844 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008845void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008846 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8847 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008848{
8849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008851 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008852 if(NULL == pWdaParams)
8853 {
8854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008855 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008856 VOS_ASSERT(0) ;
8857 return ;
8858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8860 vos_mem_free(pWdaParams->wdaMsgParam);
8861 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 return ;
8863}
Jeff Johnson295189b2012-06-20 16:38:30 -07008864/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008865 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8866 * Free memory.
8867 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8868 */
8869void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8870{
8871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8872
8873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8874 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8875
8876 if(NULL == pWdaParams)
8877 {
8878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8879 "%s: pWdaParams received NULL", __func__);
8880 VOS_ASSERT(0);
8881 return;
8882 }
8883
8884 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8885 {
8886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8887 vos_mem_free(pWdaParams->wdaMsgParam);
8888 vos_mem_free(pWdaParams);
8889 }
8890
8891 return;
8892}
8893
8894/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8896 * Request to WDI to add WOWL Bcast pattern
8897 */
8898VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8899 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8900{
8901 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008902 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8904 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8905 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8906 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 if(NULL == wdiWowlAddBcPtrnInfo)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 VOS_ASSERT(0);
8914 return VOS_STATUS_E_NOMEM;
8915 }
8916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8917 if(NULL == pWdaParams)
8918 {
8919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 VOS_ASSERT(0);
8922 vos_mem_free(wdiWowlAddBcPtrnInfo);
8923 return VOS_STATUS_E_NOMEM;
8924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8926 pWowlAddBcPtrnParams->ucPatternId;
8927 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8928 pWowlAddBcPtrnParams->ucPatternByteOffset;
8929 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8930 pWowlAddBcPtrnParams->ucPatternMaskSize;
8931 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8932 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8934 {
8935 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8936 pWowlAddBcPtrnParams->ucPattern,
8937 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8938 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8939 pWowlAddBcPtrnParams->ucPatternMask,
8940 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8941 }
8942 else
8943 {
8944 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8945 pWowlAddBcPtrnParams->ucPattern,
8946 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8947 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8948 pWowlAddBcPtrnParams->ucPatternMask,
8949 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8950
8951 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8952 pWowlAddBcPtrnParams->ucPatternExt,
8953 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8954 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8955 pWowlAddBcPtrnParams->ucPatternMaskExt,
8956 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8957 }
8958
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008959 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8960 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8961
Yue Ma7f44bbe2013-04-12 11:47:39 -07008962 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8963 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008964 /* Store param pointer as passed in by caller */
8965 /* store Params pass it to WDI */
8966 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8967 pWdaParams->pWdaContext = pWDA;
8968 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008969 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008970 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008971 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 {
8973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8974 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008975 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 vos_mem_free(pWdaParams->wdaMsgParam) ;
8977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8978 vos_mem_free(pWdaParams) ;
8979 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008980 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008981
8982}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008983/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008984 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 *
8986 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008987void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008988 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8989 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008990{
8991 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008993 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 if(NULL == pWdaParams)
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 VOS_ASSERT(0) ;
8999 return ;
9000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009001 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9002 vos_mem_free(pWdaParams->wdaMsgParam);
9003 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 return ;
9005}
Jeff Johnson295189b2012-06-20 16:38:30 -07009006/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009007 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9008 * Free memory.
9009 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9010 */
9011void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9012{
9013 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9014
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9016 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9017
9018 if(NULL == pWdaParams)
9019 {
9020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9021 "%s: pWdaParams received NULL", __func__);
9022 VOS_ASSERT(0);
9023 return;
9024 }
9025
9026 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9027 {
9028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9029 vos_mem_free(pWdaParams->wdaMsgParam);
9030 vos_mem_free(pWdaParams);
9031 }
9032
9033 return;
9034}
9035/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9037 * Request to WDI to delete WOWL Bcast pattern
9038 */
9039VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9040 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9041{
9042 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009043 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9045 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9046 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9047 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 if(NULL == wdiWowlDelBcPtrnInfo)
9051 {
9052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009053 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 VOS_ASSERT(0);
9055 return VOS_STATUS_E_NOMEM;
9056 }
9057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9058 if(NULL == pWdaParams)
9059 {
9060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009062 VOS_ASSERT(0);
9063 vos_mem_free(wdiWowlDelBcPtrnInfo);
9064 return VOS_STATUS_E_NOMEM;
9065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9067 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009068
9069 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9070 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9071
Yue Ma7f44bbe2013-04-12 11:47:39 -07009072 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9073 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 /* Store param pointer as passed in by caller */
9075 /* store Params pass it to WDI */
9076 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9077 pWdaParams->pWdaContext = pWDA;
9078 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009079 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009080 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009081 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009082 {
9083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9084 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009085 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 vos_mem_free(pWdaParams->wdaMsgParam) ;
9087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9088 vos_mem_free(pWdaParams) ;
9089 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009090 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009091
9092}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009093/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009094 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 *
9096 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009097void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009098{
9099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9100 tWDA_CbContext *pWDA;
9101 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009103 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009104 if(NULL == pWdaParams)
9105 {
9106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009107 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009108 VOS_ASSERT(0) ;
9109 return ;
9110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009111 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9112 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9113
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009114 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9115
Jeff Johnson295189b2012-06-20 16:38:30 -07009116 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9117 vos_mem_free(pWdaParams) ;
9118
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009119 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009120 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009121 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009122 return ;
9123}
Jeff Johnson295189b2012-06-20 16:38:30 -07009124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009125 * FUNCTION: WDA_WowlEnterReqCallback
9126 * Free memory and send WOWL Enter RSP back to PE.
9127 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9128 */
9129void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9130{
9131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9132 tWDA_CbContext *pWDA;
9133 tSirHalWowlEnterParams *pWowlEnterParams;
9134
9135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9136 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9137
9138 if(NULL == pWdaParams)
9139 {
9140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9141 "%s: pWdaParams received NULL", __func__);
9142 VOS_ASSERT(0);
9143 return;
9144 }
9145
9146 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9147 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9148 pWowlEnterParams->status = wdiStatus;
9149
9150 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9151 {
9152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9153 vos_mem_free(pWdaParams);
9154 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9155 }
9156
9157 return;
9158}
9159/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 * FUNCTION: WDA_ProcessWowlEnterReq
9161 * Request to WDI to enter WOWL
9162 */
9163VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9164 tSirHalWowlEnterParams *pWowlEnterParams)
9165{
9166 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009167 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9169 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9170 sizeof(WDI_WowlEnterReqParamsType)) ;
9171 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009173 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 if(NULL == wdiWowlEnterInfo)
9175 {
9176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009177 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 VOS_ASSERT(0);
9179 return VOS_STATUS_E_NOMEM;
9180 }
9181 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9182 if(NULL == pWdaParams)
9183 {
9184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 VOS_ASSERT(0);
9187 vos_mem_free(wdiWowlEnterInfo);
9188 return VOS_STATUS_E_NOMEM;
9189 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009190
9191 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9192
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9194 pWowlEnterParams->magicPtrn,
9195 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9197 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009198 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9199 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9201 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9203 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9205 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9207 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9209 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9211 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009212#ifdef WLAN_WAKEUP_EVENTS
9213 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9214 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9215
9216 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9217 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9218
9219 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9220 pWowlEnterParams->ucWowNetScanOffloadMatch;
9221
9222 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9223 pWowlEnterParams->ucWowGTKRekeyError;
9224
9225 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9226 pWowlEnterParams->ucWoWBSSConnLoss;
9227#endif // WLAN_WAKEUP_EVENTS
9228
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009229 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9230 pWowlEnterParams->bssIdx;
9231
Yue Ma7f44bbe2013-04-12 11:47:39 -07009232 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9233 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 /* Store param pointer as passed in by caller */
9235 /* store Params pass it to WDI */
9236 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9237 pWdaParams->pWdaContext = pWDA;
9238 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009239 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009240 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009241 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009242 {
9243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9244 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009245 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 vos_mem_free(pWdaParams->wdaMsgParam) ;
9247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9248 vos_mem_free(pWdaParams) ;
9249 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009250 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009251
9252}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009253/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009254 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 *
9256 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009257void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009258{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009259 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9260 tWDA_CbContext *pWDA;
9261 tSirHalWowlExitParams *pWowlExitParams;
9262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009263 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009264 if(NULL == pWdaParams)
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009267 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009268 VOS_ASSERT(0) ;
9269 return ;
9270 }
9271 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9272 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9273
9274 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009275 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009276
9277 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9278 vos_mem_free(pWdaParams) ;
9279
Jeff Johnson295189b2012-06-20 16:38:30 -07009280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009281 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009282 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 return ;
9284}
Jeff Johnson295189b2012-06-20 16:38:30 -07009285/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009286 * FUNCTION: WDA_WowlExitReqCallback
9287 * Free memory and send WOWL Exit RSP back to PE.
9288 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9289 */
9290void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9291{
9292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9293 tWDA_CbContext *pWDA;
9294 tSirHalWowlExitParams *pWowlExitParams;
9295
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9297 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9298
9299 if(NULL == pWdaParams)
9300 {
9301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9302 "%s: pWdaParams received NULL", __func__);
9303 VOS_ASSERT(0);
9304 return;
9305 }
9306
9307 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9308 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9309 pWowlExitParams->status = wdiStatus;
9310
9311 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9312 {
9313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9314 vos_mem_free(pWdaParams);
9315 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9316 }
9317
9318 return;
9319}
9320/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009321 * FUNCTION: WDA_ProcessWowlExitReq
9322 * Request to WDI to add WOWL Bcast pattern
9323 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009324VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9325 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009326{
9327 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009328 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009329 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9330 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9331 sizeof(WDI_WowlExitReqParamsType)) ;
9332 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009334 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009335 if(NULL == wdiWowlExitInfo)
9336 {
9337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009338 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009339 VOS_ASSERT(0);
9340 return VOS_STATUS_E_NOMEM;
9341 }
9342 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9343 if(NULL == pWdaParams)
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009346 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009347 VOS_ASSERT(0);
9348 vos_mem_free(wdiWowlExitInfo);
9349 return VOS_STATUS_E_NOMEM;
9350 }
9351
9352 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9353 pWowlExitParams->bssIdx;
9354
Yue Ma7f44bbe2013-04-12 11:47:39 -07009355 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9356 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009357
9358 /* Store param pointer as passed in by caller */
9359 /* store Params pass it to WDI */
9360 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9361 pWdaParams->pWdaContext = pWDA;
9362 pWdaParams->wdaMsgParam = pWowlExitParams;
9363
9364 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009365 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009366
Jeff Johnson43971f52012-07-17 12:26:56 -07009367 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 {
9369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9370 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009371 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9373 vos_mem_free(pWdaParams->wdaMsgParam);
9374 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009376 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009377}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009378/*
9379 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9380 * Request to WDI to determine whether a given station is capable of
9381 * using HW-based frame translation
9382 */
9383v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9384 tANI_U8 staIdx)
9385{
9386 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9387}
Jeff Johnson295189b2012-06-20 16:38:30 -07009388/*
9389 * FUNCTION: WDA_NvDownloadReqCallback
9390 * send NV Download RSP back to PE
9391 */
9392void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9393 void* pUserData)
9394{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009395
9396 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9397 tWDA_CbContext *pWDA;
9398
Jeff Johnson295189b2012-06-20 16:38:30 -07009399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009400 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009401
9402 if(NULL == pWdaParams)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009406 VOS_ASSERT(0) ;
9407 return ;
9408 }
9409
9410 pWDA = pWdaParams->pWdaContext;
9411
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9414 vos_mem_free(pWdaParams);
9415
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 return ;
9418}
Jeff Johnson295189b2012-06-20 16:38:30 -07009419/*
9420 * FUNCTION: WDA_ProcessNvDownloadReq
9421 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9422 */
9423VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9424{
9425 /* Initialize the local Variables*/
9426 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9427 v_VOID_t *pNvBuffer=NULL;
9428 v_SIZE_t bufferSize = 0;
9429 WDI_Status status = WDI_STATUS_E_FAILURE;
9430 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009431 tWDA_ReqParams *pWdaParams ;
9432
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 if(NULL == pWDA)
9436 {
9437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009438 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009439 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 return VOS_STATUS_E_FAILURE;
9441 }
9442
9443 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009444 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9445
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9447 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009448 if(NULL == wdiNvDownloadReqParam)
9449 {
9450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009452 VOS_ASSERT(0);
9453 return VOS_STATUS_E_NOMEM;
9454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 /* Copy Params to wdiNvDownloadReqParam*/
9456 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9457 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009458
9459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9460 if(NULL == pWdaParams)
9461 {
9462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009463 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009464 VOS_ASSERT(0);
9465 vos_mem_free(wdiNvDownloadReqParam);
9466 return VOS_STATUS_E_NOMEM;
9467 }
9468
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009470 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9471 pWdaParams->wdaMsgParam = NULL;
9472 pWdaParams->pWdaContext = pWDA;
9473
9474
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009476
Jeff Johnson295189b2012-06-20 16:38:30 -07009477 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009478 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9479
Jeff Johnson295189b2012-06-20 16:38:30 -07009480 if(IS_WDI_STATUS_FAILURE(status))
9481 {
9482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9483 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9485 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009488}
9489/*
9490 * FUNCTION: WDA_FlushAcReqCallback
9491 * send Flush AC RSP back to TL
9492 */
9493void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9494{
9495 vos_msg_t wdaMsg = {0} ;
9496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9497 tFlushACReq *pFlushACReqParams;
9498 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 if(NULL == pWdaParams)
9502 {
9503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_ASSERT(0) ;
9506 return ;
9507 }
9508
9509 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9510 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9511 if(NULL == pFlushACRspParams)
9512 {
9513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009516 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 return ;
9518 }
9519 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9520 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9521 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9522 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9523 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009524 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009525 vos_mem_free(pWdaParams->wdaMsgParam) ;
9526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9527 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9529 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9530 // POST message to TL
9531 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9532
Jeff Johnson295189b2012-06-20 16:38:30 -07009533 return ;
9534}
Jeff Johnson295189b2012-06-20 16:38:30 -07009535/*
9536 * FUNCTION: WDA_ProcessFlushAcReq
9537 * Request to WDI to Update the DELBA REQ params.
9538 */
9539VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9540 tFlushACReq *pFlushAcReqParams)
9541{
9542 WDI_Status status = WDI_STATUS_SUCCESS ;
9543 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9544 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9545 sizeof(WDI_FlushAcReqParamsType)) ;
9546 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009547 if(NULL == wdiFlushAcReqParam)
9548 {
9549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009550 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009551 VOS_ASSERT(0);
9552 return VOS_STATUS_E_NOMEM;
9553 }
9554 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9555 if(NULL == pWdaParams)
9556 {
9557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009558 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009559 VOS_ASSERT(0);
9560 vos_mem_free(wdiFlushAcReqParam);
9561 return VOS_STATUS_E_NOMEM;
9562 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009564 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009565 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9566 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9567 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9568 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009569 /* Store Flush AC pointer, as this will be used for response */
9570 /* store Params pass it to WDI */
9571 pWdaParams->pWdaContext = pWDA;
9572 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9573 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9575 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009576 if(IS_WDI_STATUS_FAILURE(status))
9577 {
9578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9579 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9580 vos_mem_free(pWdaParams->wdaMsgParam) ;
9581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9582 vos_mem_free(pWdaParams) ;
9583 //TODO: respond to TL with failure
9584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009585 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586}
Jeff Johnson295189b2012-06-20 16:38:30 -07009587/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009588 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009589 *
9590 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009591void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009592{
9593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9594 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009595 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009596
9597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009598 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 if(NULL == pWdaParams)
9600 {
9601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009602 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 VOS_ASSERT(0) ;
9604 return ;
9605 }
9606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9607 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9608 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9609 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9610 {
9611 pWDA->wdaAmpSessionOn = VOS_FALSE;
9612 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009613 vos_mem_free(pWdaParams->wdaMsgParam) ;
9614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9615 vos_mem_free(pWdaParams) ;
9616 /*
9617 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9618 * param here
9619 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009620 return ;
9621}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009622/*
9623 * FUNCTION: WDA_BtAmpEventReqCallback
9624 * Free memory.
9625 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9626 */
9627void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9628{
9629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9630 tWDA_CbContext *pWDA;
9631 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009632
Yue Ma7f44bbe2013-04-12 11:47:39 -07009633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9634 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9635
9636 if(NULL == pWdaParams)
9637 {
9638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9639 "%s: pWdaParams received NULL", __func__);
9640 VOS_ASSERT(0);
9641 return;
9642 }
9643
9644 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9645 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9646
9647 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9648 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9649 {
9650 pWDA->wdaAmpSessionOn = VOS_FALSE;
9651 }
9652
9653 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9654 {
9655 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9656 vos_mem_free(pWdaParams->wdaMsgParam);
9657 vos_mem_free(pWdaParams);
9658 }
9659
9660 return;
9661}
Jeff Johnson295189b2012-06-20 16:38:30 -07009662/*
9663 * FUNCTION: WDA_ProcessBtAmpEventReq
9664 * Request to WDI to Update with BT AMP events.
9665 */
9666VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9667 tSmeBtAmpEvent *pBtAmpEventParams)
9668{
9669 WDI_Status status = WDI_STATUS_SUCCESS ;
9670 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9671 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9672 sizeof(WDI_BtAmpEventParamsType)) ;
9673 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009675 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 if(NULL == wdiBtAmpEventParam)
9677 {
9678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 VOS_ASSERT(0);
9681 return VOS_STATUS_E_NOMEM;
9682 }
9683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9684 if(NULL == pWdaParams)
9685 {
9686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009688 VOS_ASSERT(0);
9689 vos_mem_free(wdiBtAmpEventParam);
9690 return VOS_STATUS_E_NOMEM;
9691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9693 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009694 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9695 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 /* Store BT AMP event pointer, as this will be used for response */
9697 /* store Params pass it to WDI */
9698 pWdaParams->pWdaContext = pWDA;
9699 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9700 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009702 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 if(IS_WDI_STATUS_FAILURE(status))
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9706 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9707 vos_mem_free(pWdaParams->wdaMsgParam) ;
9708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9709 vos_mem_free(pWdaParams) ;
9710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9712 {
9713 pWDA->wdaAmpSessionOn = VOS_TRUE;
9714 }
9715 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009716}
9717
Jeff Johnson295189b2012-06-20 16:38:30 -07009718/*
9719 * FUNCTION: WDA_FTMCommandReqCallback
9720 * Handle FTM CMD response came from HAL
9721 * Route responce to HDD FTM
9722 */
9723void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9724 void *usrData)
9725{
9726 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9728 {
9729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309730 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 return;
9732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009733 /* Release Current FTM Command Request */
9734 vos_mem_free(pWDA->wdaFTMCmdReq);
9735 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009736 /* Post FTM Responce to HDD FTM */
9737 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009738 return;
9739}
Jeff Johnson295189b2012-06-20 16:38:30 -07009740/*
9741 * FUNCTION: WDA_ProcessFTMCommand
9742 * Send FTM command to WDI
9743 */
9744VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9745 tPttMsgbuffer *pPTTFtmCmd)
9746{
9747 WDI_Status status = WDI_STATUS_SUCCESS;
9748 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 ftmCMDReq = (WDI_FTMCommandReqType *)
9750 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9751 if(NULL == ftmCMDReq)
9752 {
9753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9754 "WDA FTM Command buffer alloc fail");
9755 return VOS_STATUS_E_NOMEM;
9756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009757 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9758 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009759 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009760 /* Send command to WDI */
9761 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009762 return status;
9763}
Jeff Johnsone7245742012-09-05 17:12:55 -07009764#ifdef FEATURE_OEM_DATA_SUPPORT
9765/*
9766 * FUNCTION: WDA_StartOemDataReqCallback
9767 *
9768 */
9769void WDA_StartOemDataReqCallback(
9770 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9771 void* pUserData)
9772{
9773 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9775 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009776 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009777
Jeff Johnsone7245742012-09-05 17:12:55 -07009778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009779 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009780
9781 if(NULL == pWdaParams)
9782 {
9783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009784 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009785 VOS_ASSERT(0) ;
9786 return ;
9787 }
9788 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9789
Jeff Johnsone7245742012-09-05 17:12:55 -07009790 if(NULL == pWDA)
9791 {
9792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009793 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009794 VOS_ASSERT(0);
9795 return ;
9796 }
9797
9798 /*
9799 * Allocate memory for response params sent to PE
9800 */
9801 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9802
9803 // Check if memory is allocated for OemdataMeasRsp Params.
9804 if(NULL == pOemDataRspParams)
9805 {
9806 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9807 "OEM DATA WDA callback alloc fail");
9808 VOS_ASSERT(0) ;
9809 return;
9810 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009811
Jeff Johnsone7245742012-09-05 17:12:55 -07009812 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9814 vos_mem_free(pWdaParams->wdaMsgParam);
9815 vos_mem_free(pWdaParams) ;
9816
Jeff Johnsone7245742012-09-05 17:12:55 -07009817 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009818 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009819 * Also, here success always means that we have atleast one BSSID.
9820 */
9821 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9822
9823 //enable Tx
9824 status = WDA_ResumeDataTx(pWDA);
9825 if(status != VOS_STATUS_SUCCESS)
9826 {
9827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9828 }
9829 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9830 return ;
9831}
9832/*
9833 * FUNCTION: WDA_ProcessStartOemDataReq
9834 * Send Start Oem Data Req to WDI
9835 */
9836VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9837 tStartOemDataReq *pOemDataReqParams)
9838{
9839 WDI_Status status = WDI_STATUS_SUCCESS;
9840 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009841 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009842
9843 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9844
9845 if(NULL == wdiOemDataReqParams)
9846 {
9847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009848 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009849 VOS_ASSERT(0);
9850 return VOS_STATUS_E_NOMEM;
9851 }
9852
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009853 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9854 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9855 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9856 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009857
9858 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9859
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009860 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9861 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009862 {
9863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009865 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009866 vos_mem_free(pOemDataReqParams);
9867 VOS_ASSERT(0);
9868 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009869 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009870
Bernald44a1ae2013-01-09 08:30:39 -08009871 pWdaParams->pWdaContext = (void*)pWDA;
9872 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9873 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009874
9875 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9876 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009877
9878 if(IS_WDI_STATUS_FAILURE(status))
9879 {
9880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9881 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009882 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9883 vos_mem_free(pWdaParams->wdaMsgParam);
9884 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009885 }
9886 return CONVERT_WDI2VOS_STATUS(status) ;
9887}
9888#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009889/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009890 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 *
9892 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009893void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009894{
9895 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009897 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 if(NULL == pWdaParams)
9899 {
9900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009901 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 VOS_ASSERT(0) ;
9903 return ;
9904 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009905
9906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9907 vos_mem_free(pWdaParams->wdaMsgParam);
9908 vos_mem_free(pWdaParams);
9909
9910 return ;
9911}
9912/*
9913 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9914 * Free memory.
9915 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9916 */
9917void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9918{
9919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9920
9921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9922 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9923
9924 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9927 "%s: pWdaParams received NULL", __func__);
9928 VOS_ASSERT(0);
9929 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009930 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009931
9932 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009933 {
9934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009935 vos_mem_free(pWdaParams->wdaMsgParam);
9936 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009938
9939 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009940}
Jeff Johnson295189b2012-06-20 16:38:30 -07009941#ifdef WLAN_FEATURE_GTK_OFFLOAD
9942/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009943 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009944 *
9945 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009946void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009947 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009948{
9949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9950
9951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009952 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009953
9954 VOS_ASSERT(NULL != pWdaParams);
9955
9956 vos_mem_free(pWdaParams->wdaMsgParam) ;
9957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9958 vos_mem_free(pWdaParams) ;
9959
9960 //print a msg, nothing else to do
9961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009962 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009963
9964 return ;
9965}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009966/*
9967 * FUNCTION: WDA_GTKOffloadReqCallback
9968 * Free memory.
9969 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9970 */
9971void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9972{
9973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009974
Yue Ma7f44bbe2013-04-12 11:47:39 -07009975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9976 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9977
9978 if(NULL == pWdaParams)
9979 {
9980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9981 "%s: pWdaParams received NULL", __func__);
9982 VOS_ASSERT(0);
9983 return;
9984 }
9985
9986 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9987 {
9988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9989 vos_mem_free(pWdaParams->wdaMsgParam);
9990 vos_mem_free(pWdaParams);
9991 }
9992
9993 return;
9994}
Jeff Johnson295189b2012-06-20 16:38:30 -07009995/*
9996 * FUNCTION: WDA_ProcessGTKOffloadReq
9997 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9998 * to broadcast traffic (sta mode).
9999 */
10000VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10001 tpSirGtkOffloadParams pGtkOffloadParams)
10002{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010003 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10005 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10006 sizeof(WDI_GtkOffloadReqMsg)) ;
10007 tWDA_ReqParams *pWdaParams ;
10008
10009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010010 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011
10012 if(NULL == wdiGtkOffloadReqMsg)
10013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 VOS_ASSERT(0);
10017 return VOS_STATUS_E_NOMEM;
10018 }
10019
10020 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10021 if(NULL == pWdaParams)
10022 {
10023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010024 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010025 VOS_ASSERT(0);
10026 vos_mem_free(wdiGtkOffloadReqMsg);
10027 return VOS_STATUS_E_NOMEM;
10028 }
10029
10030 //
10031 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10032 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010033
10034 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010035 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010036
Jeff Johnson295189b2012-06-20 16:38:30 -070010037 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10038 // Copy KCK
10039 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10040 // Copy KEK
10041 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10042 // Copy KeyReplayCounter
10043 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10044 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10045
Yue Ma7f44bbe2013-04-12 11:47:39 -070010046 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10047 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010048
Jeff Johnson295189b2012-06-20 16:38:30 -070010049
10050 /* Store Params pass it to WDI */
10051 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10052 pWdaParams->pWdaContext = pWDA;
10053 /* Store param pointer as passed in by caller */
10054 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10055
Yue Ma7f44bbe2013-04-12 11:47:39 -070010056 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010057
10058 if(IS_WDI_STATUS_FAILURE(status))
10059 {
10060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10061 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10063 vos_mem_free(pWdaParams->wdaMsgParam);
10064 vos_mem_free(pWdaParams);
10065 }
10066
10067 return CONVERT_WDI2VOS_STATUS(status) ;
10068}
10069
10070/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010071 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010072 *
10073 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010074void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010075 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010076{
10077 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10078 tWDA_CbContext *pWDA;
10079 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010080 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010081 vos_msg_t vosMsg;
10082
10083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010084 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010085
10086 VOS_ASSERT(NULL != pWdaParams);
10087
10088 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10089 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10090
10091 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10092 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10093
10094 /* Message Header */
10095 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010096 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010097
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010098 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10099 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10100 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10101 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10102 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010103
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010104 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10105 pwdiGtkOffloadGetInfoRsparams->bssId,
10106 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 /* VOS message wrapper */
10108 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10109 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10110 vosMsg.bodyval = 0;
10111
10112 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10113 {
10114 /* free the mem and return */
10115 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10116 }
10117
10118 vos_mem_free(pWdaParams->wdaMsgParam) ;
10119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10120 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010121
10122 return;
10123}
10124/*
10125 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10126 * Free memory and send RSP back to SME.
10127 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10128 */
10129void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10130{
10131 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10132 vos_msg_t vosMsg;
10133
10134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10135 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10136
10137 if(NULL == pWdaParams)
10138 {
10139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10140 "%s: pWdaParams received NULL", __func__);
10141 VOS_ASSERT(0);
10142 return;
10143 }
10144
10145 /* VOS message wrapper */
10146 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10147 vosMsg.bodyptr = NULL;
10148 vosMsg.bodyval = 0;
10149
10150 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10151 {
10152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10153 vos_mem_free(pWdaParams->wdaMsgParam);
10154 vos_mem_free(pWdaParams);
10155 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10156 }
10157
10158 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010159}
10160#endif
10161
10162/*
10163 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10164 * Request to WDI to set Tx Per Tracking configurations
10165 */
10166VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10167{
10168 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010169 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10171 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10172 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10173 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010175 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 if(NULL == pwdiSetTxPerTrackingReqParams)
10177 {
10178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010180 vos_mem_free(pTxPerTrackingParams);
10181 VOS_ASSERT(0);
10182 return VOS_STATUS_E_NOMEM;
10183 }
10184 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10185 if(NULL == pWdaParams)
10186 {
10187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010189 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10190 vos_mem_free(pTxPerTrackingParams);
10191 VOS_ASSERT(0);
10192 return VOS_STATUS_E_NOMEM;
10193 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010194 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10195 pTxPerTrackingParams->ucTxPerTrackingEnable;
10196 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10197 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10198 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10199 pTxPerTrackingParams->ucTxPerTrackingRatio;
10200 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10201 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010202 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10203 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 /* Store param pointer as passed in by caller */
10205 /* store Params pass it to WDI
10206 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10207 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10208 pWdaParams->pWdaContext = pWDA;
10209 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010210 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010211 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010212 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010213 {
10214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10215 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010216 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 vos_mem_free(pWdaParams->wdaMsgParam) ;
10218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10219 vos_mem_free(pWdaParams) ;
10220 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010221 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010222
10223}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010224/*
10225 * FUNCTION: WDA_HALDumpCmdCallback
10226 * Send the VOS complete .
10227 */
10228void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10229 void* pUserData)
10230{
10231 tANI_U8 *buffer = NULL;
10232 tWDA_CbContext *pWDA = NULL;
10233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 if(NULL == pWdaParams)
10235 {
10236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010237 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010238 VOS_ASSERT(0) ;
10239 return ;
10240 }
10241
10242 pWDA = pWdaParams->pWdaContext;
10243 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010244 if(wdiRspParams->usBufferLen > 0)
10245 {
10246 /*Copy the Resp data to UMAC supplied buffer*/
10247 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10248 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10250 vos_mem_free(pWdaParams);
10251
10252 /* Indicate VOSS about the start complete */
10253 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 return ;
10255}
10256
Jeff Johnson295189b2012-06-20 16:38:30 -070010257/*
10258 * FUNCTION: WDA_ProcessHALDumpCmdReq
10259 * Send Dump command to WDI
10260 */
10261VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10262 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10263 tANI_U32 arg4, tANI_U8 *pBuffer)
10264{
10265 WDI_Status status = WDI_STATUS_SUCCESS;
10266 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10267 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10268 tWDA_ReqParams *pWdaParams ;
10269 pVosContextType pVosContext = NULL;
10270 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10272 (void *)pMac);
10273
10274 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10275 if(NULL == pWdaParams)
10276 {
10277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010278 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010279 return VOS_STATUS_E_NOMEM;
10280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 /* Allocate memory WDI request structure*/
10282 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10283 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10284 if(NULL == wdiHALDumpCmdReqParam)
10285 {
10286 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10287 "WDA HAL DUMP Command buffer alloc fail");
10288 vos_mem_free(pWdaParams);
10289 return WDI_STATUS_E_FAILURE;
10290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010291 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 /* Extract the arguments */
10293 wdiHalDumpCmdInfo->command = cmd;
10294 wdiHalDumpCmdInfo->argument1 = arg1;
10295 wdiHalDumpCmdInfo->argument2 = arg2;
10296 wdiHalDumpCmdInfo->argument3 = arg3;
10297 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010299 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10300
10301 /* Response message will be passed through the buffer */
10302 pWdaParams->wdaMsgParam = (void *)pBuffer;
10303
10304 /* store Params pass it to WDI */
10305 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010306 /* Send command to WDI */
10307 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010308 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 if ( vStatus != VOS_STATUS_SUCCESS )
10310 {
10311 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10312 {
10313 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010314 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010315 }
10316 else
10317 {
10318 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010319 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010320 }
10321 VOS_ASSERT(0);
10322 }
10323 return status;
10324}
Jeff Johnson295189b2012-06-20 16:38:30 -070010325#ifdef WLAN_FEATURE_GTK_OFFLOAD
10326/*
10327 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10328 * Request to WDI to get GTK Offload Information
10329 */
10330VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10331 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10332{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010333 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010334 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10335 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10336 tWDA_ReqParams *pWdaParams ;
10337
10338 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10339 {
10340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010341 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010342 VOS_ASSERT(0);
10343 return VOS_STATUS_E_NOMEM;
10344 }
10345
10346 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10347 if(NULL == pWdaParams)
10348 {
10349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010350 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 VOS_ASSERT(0);
10352 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10353 return VOS_STATUS_E_NOMEM;
10354 }
10355
Yue Ma7f44bbe2013-04-12 11:47:39 -070010356 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10357 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010358
Jeff Johnson295189b2012-06-20 16:38:30 -070010359 /* Store Params pass it to WDI */
10360 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10361 pWdaParams->pWdaContext = pWDA;
10362 /* Store param pointer as passed in by caller */
10363 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10364
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010365 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010366 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010367
Yue Ma7f44bbe2013-04-12 11:47:39 -070010368 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369
10370 if(IS_WDI_STATUS_FAILURE(status))
10371 {
10372 /* failure returned by WDI API */
10373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10374 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10376 vos_mem_free(pWdaParams) ;
10377 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10378 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10379 }
10380
10381 return CONVERT_WDI2VOS_STATUS(status) ;
10382}
10383#endif // WLAN_FEATURE_GTK_OFFLOAD
10384
10385/*
Yue Mab9c86f42013-08-14 15:59:08 -070010386 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10387 *
10388 */
10389VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10390 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10391{
10392 WDI_Status wdiStatus;
10393 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10394
10395 addPeriodicTxPtrnParams =
10396 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10397
10398 if (NULL == addPeriodicTxPtrnParams)
10399 {
10400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10401 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10402 __func__);
10403
10404 return VOS_STATUS_E_NOMEM;
10405 }
10406
10407 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10408 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10409
10410 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10411 addPeriodicTxPtrnParams->pUserData = pWDA;
10412
10413 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10414
10415 if (WDI_STATUS_PENDING == wdiStatus)
10416 {
10417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10418 "Pending received for %s:%d", __func__, __LINE__ );
10419 }
10420 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10421 {
10422 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10423 "Failure in %s:%d", __func__, __LINE__ );
10424 }
10425
10426 vos_mem_free(addPeriodicTxPtrnParams);
10427
10428 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10429}
10430
10431/*
10432 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10433 *
10434 */
10435VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10436 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10437{
10438 WDI_Status wdiStatus;
10439 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10440
10441 delPeriodicTxPtrnParams =
10442 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10443
10444 if (NULL == delPeriodicTxPtrnParams)
10445 {
10446 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10447 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10448 __func__);
10449
10450 return VOS_STATUS_E_NOMEM;
10451 }
10452
10453 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10454 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10455
10456 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10457 delPeriodicTxPtrnParams->pUserData = pWDA;
10458
10459 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10460
10461 if (WDI_STATUS_PENDING == wdiStatus)
10462 {
10463 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10464 "Pending received for %s:%d", __func__, __LINE__ );
10465 }
10466 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10467 {
10468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10469 "Failure in %s:%d", __func__, __LINE__ );
10470 }
10471
10472 vos_mem_free(delPeriodicTxPtrnParams);
10473
10474 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10475}
10476
10477/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 * -------------------------------------------------------------------------
10479 * DATA interface with WDI for Mgmt Frames
10480 * -------------------------------------------------------------------------
10481 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010482/*
10483 * FUNCTION: WDA_TxComplete
10484 * Callback function for the WDA_TxPacket
10485 */
10486VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10487 VOS_STATUS status )
10488{
10489
10490 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10491 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010492 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010493
10494 if(NULL == wdaContext)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10497 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010498 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 VOS_ASSERT(0);
10500 return VOS_STATUS_E_FAILURE;
10501 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010502
10503 /*Check if frame was timed out or not*/
10504 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10505 (v_PVOID_t)&uUserData);
10506
10507 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10508 {
10509 /*Discard frame - no further processing is needed*/
10510 vos_pkt_return_packet(pData);
10511 return VOS_STATUS_SUCCESS;
10512 }
10513
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10515 if( NULL!=wdaContext->pTxCbFunc)
10516 {
10517 /*check if packet is freed already*/
10518 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10519 {
10520 wdaContext->pTxCbFunc(pMac, pData);
10521 }
10522 else
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010525 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010526 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 //Return from here since we reaching here because the packet already timeout
10528 return status;
10529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 }
10531
10532 /*
10533 * Trigger the event to bring the HAL TL Tx complete function to come
10534 * out of wait
10535 * Let the coe above to complete the packet first. When this event is set,
10536 * the thread waiting for the event may run and set Vospacket_freed causing the original
10537 * packet not being freed.
10538 */
10539 status = vos_event_set(&wdaContext->txFrameEvent);
10540 if(!VOS_IS_STATUS_SUCCESS(status))
10541 {
10542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10543 "NEW VOS Event Set failed - status = %d \n", status);
10544 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 return status;
10546}
Jeff Johnson295189b2012-06-20 16:38:30 -070010547/*
10548 * FUNCTION: WDA_TxPacket
10549 * Forward TX management frame to WDI
10550 */
10551VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10552 void *pFrmBuf,
10553 tANI_U16 frmLen,
10554 eFrameType frmType,
10555 eFrameTxDir txDir,
10556 tANI_U8 tid,
10557 pWDATxRxCompFunc pCompFunc,
10558 void *pData,
10559 pWDAAckFnTxComp pAckTxComp,
10560 tANI_U8 txFlag)
10561{
10562 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10563 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10564 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10565 tANI_U8 eventIdx = 0;
10566 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10567 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010568 if((NULL == pWDA)||(NULL == pFrmBuf))
10569 {
10570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010571 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010572 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 VOS_ASSERT(0);
10574 return VOS_STATUS_E_FAILURE;
10575 }
10576
10577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010578 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10580 if(NULL == pMac)
10581 {
10582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010583 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 VOS_ASSERT(0);
10585 return VOS_STATUS_E_FAILURE;
10586 }
10587
10588
10589
10590 /* store the call back function in WDA context */
10591 pWDA->pTxCbFunc = pCompFunc;
10592 /* store the call back for the function of ackTxComplete */
10593 if( pAckTxComp )
10594 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010595 if( NULL != pWDA->pAckTxCbFunc )
10596 {
10597 /* Already TxComp is active no need to active again */
10598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10599 "There is already one request pending for tx complete\n");
10600 pWDA->pAckTxCbFunc( pMac, 0);
10601 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010602
Jeff Johnsone7245742012-09-05 17:12:55 -070010603 if( VOS_STATUS_SUCCESS !=
10604 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10607 "Tx Complete timeout Timer Stop Failed ");
10608 }
10609 else
10610 {
10611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010612 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010613 }
10614 }
10615
10616 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10617 pWDA->pAckTxCbFunc = pAckTxComp;
10618 if( VOS_STATUS_SUCCESS !=
10619 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10620 {
10621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10622 "Tx Complete Timer Start Failed ");
10623 pWDA->pAckTxCbFunc = NULL;
10624 return eHAL_STATUS_FAILURE;
10625 }
10626 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 /* Reset the event to be not signalled */
10628 status = vos_event_reset(&pWDA->txFrameEvent);
10629 if(!VOS_IS_STATUS_SUCCESS(status))
10630 {
10631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10632 "VOS Event reset failed - status = %d\n",status);
10633 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10634 if( pAckTxComp )
10635 {
10636 pWDA->pAckTxCbFunc = NULL;
10637 if( VOS_STATUS_SUCCESS !=
10638 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10639 {
10640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10641 "Tx Complete timeout Timer Stop Failed ");
10642 }
10643 }
10644 return VOS_STATUS_E_FAILURE;
10645 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010646
10647 /* If Peer Sta mask is set don't overwrite to self sta */
10648 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010649 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010650 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010651 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010652 else
10653 {
Ganesh K08bce952012-12-13 15:04:41 -080010654 /* Get system role, use the self station if in unknown role or STA role */
10655 systemRole = wdaGetGlobalSystemRole(pMac);
10656 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10657 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010658#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010659 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010660#endif
Ganesh K08bce952012-12-13 15:04:41 -080010661 ))
10662 {
10663 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10664 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010665 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010666
Jeff Johnsone7245742012-09-05 17:12:55 -070010667 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10668 disassoc frame reaches the HW, HAL has already deleted the peer station */
10669 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010670 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010671 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010672 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010674 /*Send Probe request frames on self sta idx*/
10675 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010677 /* Since we donot want probe responses to be retried, send probe responses
10678 through the NO_ACK queues */
10679 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10680 {
10681 //probe response is sent out using self station and no retries options.
10682 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10683 }
10684 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10685 {
10686 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10687 }
10688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010689 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10690
10691 /*Set frame tag to 0
10692 We will use the WDA user data in order to tag a frame as expired*/
10693 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10694 (v_PVOID_t)0);
10695
10696
10697 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10698 frmLen, ucTypeSubType, tid,
10699 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10700 {
10701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10702 "Sending Mgmt Frame failed - status = %d\n", status);
10703 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10704 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10705 if( pAckTxComp )
10706 {
10707 pWDA->pAckTxCbFunc = NULL;
10708 if( VOS_STATUS_SUCCESS !=
10709 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10710 {
10711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10712 "Tx Complete timeout Timer Stop Failed ");
10713 }
10714 }
10715 return VOS_STATUS_E_FAILURE;
10716 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 /*
10718 * Wait for the event to be set by the TL, to get the response of TX
10719 * complete, this event should be set by the Callback function called by TL
10720 */
10721 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10722 &eventIdx);
10723 if(!VOS_IS_STATUS_SUCCESS(status))
10724 {
10725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10726 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010727 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010728 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10729 after the packet gets completed(packet freed once)*/
10730
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010731 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010732 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010733
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010734 /*Tag Frame as timed out for later deletion*/
10735 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10736 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10737
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 /* check whether the packet was freed already,so need not free again when
10739 * TL calls the WDA_Txcomplete routine
10740 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010741 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10742 /*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 -070010743 {
10744 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010745 } */
10746
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 if( pAckTxComp )
10748 {
10749 pWDA->pAckTxCbFunc = NULL;
10750 if( VOS_STATUS_SUCCESS !=
10751 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10752 {
10753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10754 "Tx Complete timeout Timer Stop Failed ");
10755 }
10756 }
10757 status = VOS_STATUS_E_FAILURE;
10758 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053010759#ifdef WLAN_DUMP_MGMTFRAMES
10760 if (VOS_IS_STATUS_SUCCESS(status))
10761 {
10762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10763 "%s() TX packet : SubType %d", __func__,pFc->subType);
10764 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10765 pData, frmLen);
10766 }
10767#endif
10768
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 return status;
10770}
Jeff Johnson295189b2012-06-20 16:38:30 -070010771/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010772 * FUNCTION: WDA_ProcessDHCPStartInd
10773 * Forward DHCP Start to WDI
10774 */
10775static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10776 tAniDHCPInd *dhcpStartInd)
10777{
10778 WDI_Status status;
10779 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10780 if (NULL == wdiDHCPInd)
10781 {
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10783 "%s: VOS MEM Alloc Failure", __func__);
10784 VOS_ASSERT(0);
10785 vos_mem_free(dhcpStartInd);
10786 return VOS_STATUS_E_NOMEM;
10787 }
10788
10789 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10790 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10791 sizeof(tSirMacAddr));
10792
10793 status = WDI_dhcpStartInd(wdiDHCPInd);
10794
10795 if (IS_WDI_STATUS_FAILURE(status))
10796 {
10797 vos_mem_free(wdiDHCPInd);
10798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10799 "DHCP Start Indication failed");
10800 }
10801 vos_mem_free(dhcpStartInd);
10802 return CONVERT_WDI2VOS_STATUS(status) ;
10803}
10804
10805 /*
10806 * FUNCTION: WDA_ProcessDHCPStopInd
10807 * Forward DHCP Stop to WDI
10808 */
10809 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10810 tAniDHCPInd *dhcpStopInd)
10811 {
10812 WDI_Status status;
10813 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10814 if (NULL == wdiDHCPInd)
10815 {
10816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10817 "%s: VOS MEM Alloc Failure", __func__);
10818 VOS_ASSERT(0);
10819 vos_mem_free(dhcpStopInd);
10820 return VOS_STATUS_E_NOMEM;
10821 }
10822 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10823 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10824 status = WDI_dhcpStopInd(wdiDHCPInd);
10825 if (IS_WDI_STATUS_FAILURE(status))
10826 {
10827 vos_mem_free(wdiDHCPInd);
10828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10829 "DHCP Start Indication failed");
10830 }
10831 vos_mem_free(dhcpStopInd);
10832 return CONVERT_WDI2VOS_STATUS(status) ;
10833 }
10834
10835/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 * FUNCTION: WDA_McProcessMsg
10837 * Trigger DAL-AL to start CFG download
10838 */
10839VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10840{
10841 VOS_STATUS status = VOS_STATUS_SUCCESS;
10842 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010843 if(NULL == pMsg)
10844 {
10845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010846 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010847 VOS_ASSERT(0);
10848 return VOS_STATUS_E_FAILURE;
10849 }
10850
10851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010852 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010853
10854 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10855 if(NULL == pWDA )
10856 {
10857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010858 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010860 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 return VOS_STATUS_E_FAILURE;
10862 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 /* Process all the WDA messages.. */
10864 switch( pMsg->type )
10865 {
10866 case WNI_CFG_DNLD_REQ:
10867 {
10868 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010869 /* call WDA complete event if config download success */
10870 if( VOS_IS_STATUS_SUCCESS(status) )
10871 {
10872 vos_WDAComplete_cback(pVosContext);
10873 }
10874 else
10875 {
10876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10877 "WDA Config Download failure" );
10878 }
10879 break ;
10880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010881 /*
10882 * Init SCAN request from PE, convert it into DAL format
10883 * and send it to DAL
10884 */
10885 case WDA_INIT_SCAN_REQ:
10886 {
10887 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10888 break ;
10889 }
10890 /* start SCAN request from PE */
10891 case WDA_START_SCAN_REQ:
10892 {
10893 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10894 break ;
10895 }
10896 /* end SCAN request from PE */
10897 case WDA_END_SCAN_REQ:
10898 {
10899 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10900 break ;
10901 }
10902 /* end SCAN request from PE */
10903 case WDA_FINISH_SCAN_REQ:
10904 {
10905 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10906 break ;
10907 }
10908 /* join request from PE */
10909 case WDA_CHNL_SWITCH_REQ:
10910 {
10911 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10912 {
10913 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10914 }
10915 else
10916 {
10917 WDA_ProcessChannelSwitchReq(pWDA,
10918 (tSwitchChannelParams*)pMsg->bodyptr) ;
10919 }
10920 break ;
10921 }
10922 /* ADD BSS request from PE */
10923 case WDA_ADD_BSS_REQ:
10924 {
10925 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10926 break ;
10927 }
10928 case WDA_ADD_STA_REQ:
10929 {
10930 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10931 break ;
10932 }
10933 case WDA_DELETE_BSS_REQ:
10934 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10936 break ;
10937 }
10938 case WDA_DELETE_STA_REQ:
10939 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10941 break ;
10942 }
10943 case WDA_CONFIG_PARAM_UPDATE_REQ:
10944 {
10945 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10946 break ;
10947 }
10948 case WDA_SET_BSSKEY_REQ:
10949 {
10950 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10951 break ;
10952 }
10953 case WDA_SET_STAKEY_REQ:
10954 {
10955 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10956 break ;
10957 }
10958 case WDA_SET_STA_BCASTKEY_REQ:
10959 {
10960 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10961 break ;
10962 }
10963 case WDA_REMOVE_BSSKEY_REQ:
10964 {
10965 WDA_ProcessRemoveBssKeyReq(pWDA,
10966 (tRemoveBssKeyParams *)pMsg->bodyptr);
10967 break ;
10968 }
10969 case WDA_REMOVE_STAKEY_REQ:
10970 {
10971 WDA_ProcessRemoveStaKeyReq(pWDA,
10972 (tRemoveStaKeyParams *)pMsg->bodyptr);
10973 break ;
10974 }
10975 case WDA_REMOVE_STA_BCASTKEY_REQ:
10976 {
10977 /* TODO: currently UMAC is not sending this request, Add the code for
10978 handling this request when UMAC supports */
10979 break;
10980 }
10981#ifdef FEATURE_WLAN_CCX
10982 case WDA_TSM_STATS_REQ:
10983 {
10984 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10985 break;
10986 }
10987#endif
10988 case WDA_UPDATE_EDCA_PROFILE_IND:
10989 {
10990 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10991 break;
10992 }
10993 case WDA_ADD_TS_REQ:
10994 {
10995 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10996 break;
10997 }
10998 case WDA_DEL_TS_REQ:
10999 {
11000 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11001 break;
11002 }
11003 case WDA_ADDBA_REQ:
11004 {
11005 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11006 break;
11007 }
11008 case WDA_DELBA_IND:
11009 {
11010 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11011 break;
11012 }
11013 case WDA_SET_LINK_STATE:
11014 {
11015 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11016 break;
11017 }
11018 case WDA_GET_STATISTICS_REQ:
11019 {
11020 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11021 break;
11022 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011023#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11024 case WDA_GET_ROAM_RSSI_REQ:
11025 {
11026 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11027 break;
11028 }
11029#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 case WDA_PWR_SAVE_CFG:
11031 {
11032 if(pWDA->wdaState == WDA_READY_STATE)
11033 {
11034 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11035 }
11036 else
11037 {
11038 if(NULL != pMsg->bodyptr)
11039 {
11040 vos_mem_free(pMsg->bodyptr);
11041 }
11042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11043 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11044 }
11045 break;
11046 }
11047 case WDA_ENTER_IMPS_REQ:
11048 {
11049 if(pWDA->wdaState == WDA_READY_STATE)
11050 {
11051 WDA_ProcessEnterImpsReq(pWDA);
11052 }
11053 else
11054 {
11055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11056 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11057 }
11058 break;
11059 }
11060 case WDA_EXIT_IMPS_REQ:
11061 {
11062 if(pWDA->wdaState == WDA_READY_STATE)
11063 {
11064 WDA_ProcessExitImpsReq(pWDA);
11065 }
11066 else
11067 {
11068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11069 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11070 }
11071 break;
11072 }
11073 case WDA_ENTER_BMPS_REQ:
11074 {
11075 if(pWDA->wdaState == WDA_READY_STATE)
11076 {
11077 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11078 }
11079 else
11080 {
11081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11082 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11083 }
11084 break;
11085 }
11086 case WDA_EXIT_BMPS_REQ:
11087 {
11088 if(pWDA->wdaState == WDA_READY_STATE)
11089 {
11090 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11091 }
11092 else
11093 {
11094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11095 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11096 }
11097 break;
11098 }
11099 case WDA_ENTER_UAPSD_REQ:
11100 {
11101 if(pWDA->wdaState == WDA_READY_STATE)
11102 {
11103 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11104 }
11105 else
11106 {
11107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11108 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11109 }
11110 break;
11111 }
11112 case WDA_EXIT_UAPSD_REQ:
11113 {
11114 if(pWDA->wdaState == WDA_READY_STATE)
11115 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011116 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 }
11118 else
11119 {
11120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11121 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11122 }
11123 break;
11124 }
11125 case WDA_UPDATE_UAPSD_IND:
11126 {
11127 if(pWDA->wdaState == WDA_READY_STATE)
11128 {
11129 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11130 }
11131 else
11132 {
11133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11134 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11135 }
11136 break;
11137 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 case WDA_REGISTER_PE_CALLBACK :
11139 {
11140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11141 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11142 /*TODO: store the PE callback */
11143 /* Do Nothing? MSG Body should be freed at here */
11144 if(NULL != pMsg->bodyptr)
11145 {
11146 vos_mem_free(pMsg->bodyptr);
11147 }
11148 break;
11149 }
11150 case WDA_SYS_READY_IND :
11151 {
11152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11153 "Handling msg type WDA_SYS_READY_IND " );
11154 pWDA->wdaState = WDA_READY_STATE;
11155 if(NULL != pMsg->bodyptr)
11156 {
11157 vos_mem_free(pMsg->bodyptr);
11158 }
11159 break;
11160 }
11161 case WDA_BEACON_FILTER_IND :
11162 {
11163 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11164 break;
11165 }
11166 case WDA_BTC_SET_CFG:
11167 {
11168 /*TODO: handle this while dealing with BTC */
11169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11170 "Handling msg type WDA_BTC_SET_CFG " );
11171 /* Do Nothing? MSG Body should be freed at here */
11172 if(NULL != pMsg->bodyptr)
11173 {
11174 vos_mem_free(pMsg->bodyptr);
11175 }
11176 break;
11177 }
11178 case WDA_SIGNAL_BT_EVENT:
11179 {
11180 /*TODO: handle this while dealing with BTC */
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11182 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11183 /* Do Nothing? MSG Body should be freed at here */
11184 if(NULL != pMsg->bodyptr)
11185 {
11186 vos_mem_free(pMsg->bodyptr);
11187 }
11188 break;
11189 }
11190 case WDA_CFG_RXP_FILTER_REQ:
11191 {
11192 WDA_ProcessConfigureRxpFilterReq(pWDA,
11193 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11194 break;
11195 }
11196 case WDA_SET_HOST_OFFLOAD:
11197 {
11198 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11199 break;
11200 }
11201 case WDA_SET_KEEP_ALIVE:
11202 {
11203 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11204 break;
11205 }
11206#ifdef WLAN_NS_OFFLOAD
11207 case WDA_SET_NS_OFFLOAD:
11208 {
11209 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11210 break;
11211 }
11212#endif //WLAN_NS_OFFLOAD
11213 case WDA_ADD_STA_SELF_REQ:
11214 {
11215 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11216 break;
11217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 case WDA_DEL_STA_SELF_REQ:
11219 {
11220 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11221 break;
11222 }
11223 case WDA_WOWL_ADD_BCAST_PTRN:
11224 {
11225 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11226 break;
11227 }
11228 case WDA_WOWL_DEL_BCAST_PTRN:
11229 {
11230 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11231 break;
11232 }
11233 case WDA_WOWL_ENTER_REQ:
11234 {
11235 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11236 break;
11237 }
11238 case WDA_WOWL_EXIT_REQ:
11239 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011240 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011241 break;
11242 }
11243 case WDA_TL_FLUSH_AC_REQ:
11244 {
11245 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11246 break;
11247 }
11248 case WDA_SIGNAL_BTAMP_EVENT:
11249 {
11250 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11251 break;
11252 }
11253#ifdef WDA_UT
11254 case WDA_WDI_EVENT_MSG:
11255 {
11256 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11257 break ;
11258 }
11259#endif
11260 case WDA_UPDATE_BEACON_IND:
11261 {
11262 WDA_ProcessUpdateBeaconParams(pWDA,
11263 (tUpdateBeaconParams *)pMsg->bodyptr);
11264 break;
11265 }
11266 case WDA_SEND_BEACON_REQ:
11267 {
11268 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11269 break;
11270 }
11271 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11272 {
11273 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11274 (tSendProbeRespParams *)pMsg->bodyptr);
11275 break;
11276 }
11277#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11278 case WDA_SET_MAX_TX_POWER_REQ:
11279 {
11280 WDA_ProcessSetMaxTxPowerReq(pWDA,
11281 (tMaxTxPowerParams *)pMsg->bodyptr);
11282 break;
11283 }
11284#endif
schang86c22c42013-03-13 18:41:24 -070011285 case WDA_SET_TX_POWER_REQ:
11286 {
11287 WDA_ProcessSetTxPowerReq(pWDA,
11288 (tSirSetTxPowerReq *)pMsg->bodyptr);
11289 break;
11290 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 case WDA_SET_P2P_GO_NOA_REQ:
11292 {
11293 WDA_ProcessSetP2PGONOAReq(pWDA,
11294 (tP2pPsParams *)pMsg->bodyptr);
11295 break;
11296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 /* timer related messages */
11298 case WDA_TIMER_BA_ACTIVITY_REQ:
11299 {
11300 WDA_BaCheckActivity(pWDA) ;
11301 break ;
11302 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011303
11304 /* timer related messages */
11305 case WDA_TIMER_TRAFFIC_STATS_IND:
11306 {
11307 WDA_TimerTrafficStatsInd(pWDA);
11308 break;
11309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011310#ifdef WLAN_FEATURE_VOWIFI_11R
11311 case WDA_AGGR_QOS_REQ:
11312 {
11313 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11314 break;
11315 }
11316#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011317 case WDA_FTM_CMD_REQ:
11318 {
11319 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11320 break ;
11321 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011322#ifdef FEATURE_OEM_DATA_SUPPORT
11323 case WDA_START_OEM_DATA_REQ:
11324 {
11325 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11326 break;
11327 }
11328#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 /* Tx Complete Time out Indication */
11330 case WDA_TX_COMPLETE_TIMEOUT_IND:
11331 {
11332 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11333 break;
11334 }
11335 case WDA_WLAN_SUSPEND_IND:
11336 {
11337 WDA_ProcessWlanSuspendInd(pWDA,
11338 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11339 break;
11340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 case WDA_WLAN_RESUME_REQ:
11342 {
11343 WDA_ProcessWlanResumeReq(pWDA,
11344 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11345 break;
11346 }
11347
11348 case WDA_UPDATE_CF_IND:
11349 {
11350 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11351 pMsg->bodyptr = NULL;
11352 break;
11353 }
11354#ifdef FEATURE_WLAN_SCAN_PNO
11355 case WDA_SET_PNO_REQ:
11356 {
11357 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11358 break;
11359 }
11360 case WDA_UPDATE_SCAN_PARAMS_REQ:
11361 {
11362 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11363 break;
11364 }
11365 case WDA_SET_RSSI_FILTER_REQ:
11366 {
11367 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11368 break;
11369 }
11370#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011371#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011372 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011373 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011374 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011375 break;
11376 }
11377#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011378 case WDA_SET_TX_PER_TRACKING_REQ:
11379 {
11380 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11381 break;
11382 }
11383
11384#ifdef WLAN_FEATURE_PACKET_FILTERING
11385 case WDA_8023_MULTICAST_LIST_REQ:
11386 {
11387 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11388 break;
11389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11391 {
11392 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11393 break;
11394 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11396 {
11397 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11398 break;
11399 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11401 {
11402 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11403 break;
11404 }
11405#endif // WLAN_FEATURE_PACKET_FILTERING
11406
11407
11408 case WDA_TRANSMISSION_CONTROL_IND:
11409 {
11410 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11411 break;
11412 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 case WDA_SET_POWER_PARAMS_REQ:
11414 {
11415 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11416 break;
11417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011418#ifdef WLAN_FEATURE_GTK_OFFLOAD
11419 case WDA_GTK_OFFLOAD_REQ:
11420 {
11421 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11422 break;
11423 }
11424
11425 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11426 {
11427 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11428 break;
11429 }
11430#endif //WLAN_FEATURE_GTK_OFFLOAD
11431
11432 case WDA_SET_TM_LEVEL_REQ:
11433 {
11434 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11435 break;
11436 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011437#ifdef WLAN_FEATURE_11AC
11438 case WDA_UPDATE_OP_MODE:
11439 {
11440 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11441 {
11442 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11443 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11444 else
11445 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11446 " VHT OpMode Feature is Not Supported \n");
11447 }
11448 else
11449 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11450 " 11AC Feature is Not Supported \n");
11451 break;
11452 }
11453#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011454#ifdef WLAN_FEATURE_11W
11455 case WDA_EXCLUDE_UNENCRYPTED_IND:
11456 {
11457 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11458 break;
11459 }
11460#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011461#ifdef FEATURE_WLAN_TDLS
11462 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11463 {
11464 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11465 break;
11466 }
11467#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011468 case WDA_DHCP_START_IND:
11469 {
11470 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11471 break;
11472 }
11473 case WDA_DHCP_STOP_IND:
11474 {
11475 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11476 break;
11477 }
Leo Chang9056f462013-08-01 19:21:11 -070011478#ifdef FEATURE_WLAN_LPHB
11479 case WDA_LPHB_CONF_REQ:
11480 {
11481 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11482 break;
11483 }
11484#endif
Yue Mab9c86f42013-08-14 15:59:08 -070011485 case WDA_ADD_PERIODIC_TX_PTRN_IND:
11486 {
11487 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
11488 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
11489 break;
11490 }
11491 case WDA_DEL_PERIODIC_TX_PTRN_IND:
11492 {
11493 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
11494 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
11495 break;
11496 }
11497
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 default:
11499 {
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11501 "No Handling for msg type %x in WDA "
11502 ,pMsg->type);
11503 /* Do Nothing? MSG Body should be freed at here */
11504 if(NULL != pMsg->bodyptr)
11505 {
11506 vos_mem_free(pMsg->bodyptr);
11507 }
11508 //WDA_VOS_ASSERT(0) ;
11509 }
11510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 return status ;
11512}
11513
Jeff Johnson295189b2012-06-20 16:38:30 -070011514/*
11515 * FUNCTION: WDA_LowLevelIndCallback
11516 * IND API callback from WDI, send Ind to PE
11517 */
11518void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11519 void* pUserData )
11520{
11521 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11522#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11523 tSirRSSINotification rssiNotification;
11524#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 if(NULL == pWDA)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 VOS_ASSERT(0);
11530 return ;
11531 }
11532
11533 switch(wdiLowLevelInd->wdiIndicationType)
11534 {
11535 case WDI_RSSI_NOTIFICATION_IND:
11536 {
11537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11538 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011539#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11540 rssiNotification.bReserved =
11541 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11542 rssiNotification.bRssiThres1NegCross =
11543 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11544 rssiNotification.bRssiThres1PosCross =
11545 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11546 rssiNotification.bRssiThres2NegCross =
11547 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11548 rssiNotification.bRssiThres2PosCross =
11549 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11550 rssiNotification.bRssiThres3NegCross =
11551 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11552 rssiNotification.bRssiThres3PosCross =
11553 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011554 rssiNotification.avgRssi = (v_S7_t)
11555 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011556 WLANTL_BMPSRSSIRegionChangedNotification(
11557 pWDA->pVosContext,
11558 &rssiNotification);
11559#endif
11560 break ;
11561 }
11562 case WDI_MISSED_BEACON_IND:
11563 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011564 tpSirSmeMissedBeaconInd pMissBeacInd =
11565 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11567 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011568 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011569 if(NULL == pMissBeacInd)
11570 {
11571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11572 "%s: VOS MEM Alloc Failure", __func__);
11573 break;
11574 }
11575 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11576 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11577 pMissBeacInd->bssIdx =
11578 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11579 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011580 break ;
11581 }
11582 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11583 {
11584 /* TODO: Decode Ind and send Ind to PE */
11585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11586 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11587 break ;
11588 }
11589
11590 case WDI_MIC_FAILURE_IND:
11591 {
11592 tpSirSmeMicFailureInd pMicInd =
11593 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11594
11595 if(NULL == pMicInd)
11596 {
11597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011599 break;
11600 }
11601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11602 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011603 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11604 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11605 vos_mem_copy(pMicInd->bssId,
11606 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11607 sizeof(tSirMacAddr));
11608 vos_mem_copy(pMicInd->info.srcMacAddr,
11609 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11610 sizeof(tSirMacAddr));
11611 vos_mem_copy(pMicInd->info.taMacAddr,
11612 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11613 sizeof(tSirMacAddr));
11614 vos_mem_copy(pMicInd->info.dstMacAddr,
11615 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11616 sizeof(tSirMacAddr));
11617 vos_mem_copy(pMicInd->info.rxMacAddr,
11618 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11619 sizeof(tSirMacAddr));
11620 pMicInd->info.multicast =
11621 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11622 pMicInd->info.keyId=
11623 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11624 pMicInd->info.IV1=
11625 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11626 vos_mem_copy(pMicInd->info.TSC,
11627 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011628 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11629 (void *)pMicInd , 0) ;
11630 break ;
11631 }
11632 case WDI_FATAL_ERROR_IND:
11633 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011634 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011635 /* TODO: Decode Ind and send Ind to PE */
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11637 "Received WDI_FATAL_ERROR_IND from WDI ");
11638 break ;
11639 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011640 case WDI_DEL_STA_IND:
11641 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011642 tpDeleteStaContext pDelSTACtx =
11643 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11644
11645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11646 "Received WDI_DEL_STA_IND from WDI ");
11647 if(NULL == pDelSTACtx)
11648 {
11649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011650 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011651 break;
11652 }
11653 vos_mem_copy(pDelSTACtx->addr2,
11654 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11655 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 vos_mem_copy(pDelSTACtx->bssId,
11657 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11658 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 pDelSTACtx->assocId =
11660 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11661 pDelSTACtx->reasonCode =
11662 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11663 pDelSTACtx->staId =
11664 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11666 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 break ;
11668 }
11669 case WDI_COEX_IND:
11670 {
11671 tANI_U32 index;
11672 vos_msg_t vosMsg;
11673 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11674 if(NULL == pSmeCoexInd)
11675 {
11676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011677 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 break;
11679 }
11680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11681 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011682 /* Message Header */
11683 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11684 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 /* Info from WDI Indication */
11686 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11687 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11688 {
11689 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011691 /* VOS message wrapper */
11692 vosMsg.type = eWNI_SME_COEX_IND;
11693 vosMsg.bodyptr = (void *)pSmeCoexInd;
11694 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011695 /* Send message to SME */
11696 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11697 {
11698 /* free the mem and return */
11699 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11700 }
11701 else
11702 {
11703 /* DEBUG */
11704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11705 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11706 pSmeCoexInd->coexIndType,
11707 pSmeCoexInd->coexIndData[0],
11708 pSmeCoexInd->coexIndData[1],
11709 pSmeCoexInd->coexIndData[2],
11710 pSmeCoexInd->coexIndData[3]);
11711 }
11712 break;
11713 }
11714 case WDI_TX_COMPLETE_IND:
11715 {
11716 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11717 /* Calling TxCompleteAck Indication from wda context*/
11718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11719 "Complete Indication received from HAL");
11720 if( pWDA->pAckTxCbFunc )
11721 {
11722 if( VOS_STATUS_SUCCESS !=
11723 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11724 {
11725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11726 "Tx Complete timeout Timer Stop Failed ");
11727 }
11728 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11729 pWDA->pAckTxCbFunc = NULL;
11730 }
11731 else
11732 {
11733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11734 "Tx Complete Indication is received after timeout ");
11735 }
11736 break;
11737 }
Viral Modid86bde22012-12-10 13:09:21 -080011738 case WDI_P2P_NOA_START_IND :
11739 {
11740 tSirP2PNoaStart *pP2pNoaStart =
11741 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11742
11743 if (NULL == pP2pNoaStart)
11744 {
11745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "Memory allocation failure, "
11747 "WDI_P2P_NOA_START_IND not forwarded");
11748 break;
11749 }
11750 pP2pNoaStart->status =
11751 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11752 pP2pNoaStart->bssIdx =
11753 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11754 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11755 (void *)pP2pNoaStart , 0) ;
11756 break;
11757 }
11758
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011759#ifdef FEATURE_WLAN_TDLS
11760 case WDI_TDLS_IND :
11761 {
11762 tSirTdlsInd *pTdlsInd =
11763 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11764
11765 if (NULL == pTdlsInd)
11766 {
11767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11768 "Memory allocation failure, "
11769 "WDI_TDLS_IND not forwarded");
11770 break;
11771 }
11772 pTdlsInd->status =
11773 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11774 pTdlsInd->assocId =
11775 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11776 pTdlsInd->staIdx =
11777 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11778 pTdlsInd->reasonCode =
11779 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11780 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11781 (void *)pTdlsInd , 0) ;
11782 break;
11783 }
11784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011785 case WDI_P2P_NOA_ATTR_IND :
11786 {
11787 tSirP2PNoaAttr *pP2pNoaAttr =
11788 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11790 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011791 if (NULL == pP2pNoaAttr)
11792 {
11793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11794 "Memory allocation failure, "
11795 "WDI_P2P_NOA_ATTR_IND not forwarded");
11796 break;
11797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 pP2pNoaAttr->index =
11799 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11800 pP2pNoaAttr->oppPsFlag =
11801 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11802 pP2pNoaAttr->ctWin =
11803 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11804
11805 pP2pNoaAttr->uNoa1IntervalCnt =
11806 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11807 pP2pNoaAttr->uNoa1Duration =
11808 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11809 pP2pNoaAttr->uNoa1Interval =
11810 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11811 pP2pNoaAttr->uNoa1StartTime =
11812 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011813 pP2pNoaAttr->uNoa2IntervalCnt =
11814 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11815 pP2pNoaAttr->uNoa2Duration =
11816 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11817 pP2pNoaAttr->uNoa2Interval =
11818 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11819 pP2pNoaAttr->uNoa2StartTime =
11820 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011821 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11822 (void *)pP2pNoaAttr , 0) ;
11823 break;
11824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011825#ifdef FEATURE_WLAN_SCAN_PNO
11826 case WDI_PREF_NETWORK_FOUND_IND:
11827 {
11828 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011829 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11830 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11831 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11832 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11833
Jeff Johnson295189b2012-06-20 16:38:30 -070011834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11835 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011836 if (NULL == pPrefNetworkFoundInd)
11837 {
11838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11839 "Memory allocation failure, "
11840 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11841 break;
11842 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011843 /* Message Header */
11844 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011845 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011846
11847 /* Info from WDI Indication */
11848 pPrefNetworkFoundInd->ssId.length =
11849 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011850 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011851 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11852 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11853 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011854 if (NULL !=
11855 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11856 {
11857 pPrefNetworkFoundInd->frameLength =
11858 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11859 vos_mem_copy( pPrefNetworkFoundInd->data,
11860 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11861 pPrefNetworkFoundInd->frameLength);
11862 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11863 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11864 }
11865 else
11866 {
11867 pPrefNetworkFoundInd->frameLength = 0;
11868 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011869 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011870 /* VOS message wrapper */
11871 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11872 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11873 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011874 /* Send message to SME */
11875 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11876 {
11877 /* free the mem and return */
11878 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11879 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011880 break;
11881 }
11882#endif // FEATURE_WLAN_SCAN_PNO
11883
11884#ifdef WLAN_WAKEUP_EVENTS
11885 case WDI_WAKE_REASON_IND:
11886 {
11887 vos_msg_t vosMsg;
11888 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11889 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11890 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11891
11892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11893 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11894 wdiLowLevelInd->wdiIndicationType,
11895 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11896 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11897 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11898
11899 if (NULL == pWakeReasonInd)
11900 {
11901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11902 "Memory allocation failure, "
11903 "WDI_WAKE_REASON_IND not forwarded");
11904 break;
11905 }
11906
11907 vos_mem_zero(pWakeReasonInd, allocSize);
11908
11909 /* Message Header */
11910 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11911 pWakeReasonInd->mesgLen = allocSize;
11912
11913 /* Info from WDI Indication */
11914 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11915 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11916 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11917 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11918 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11919 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11920 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11921 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11922
11923 /* VOS message wrapper */
11924 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11925 vosMsg.bodyptr = (void *) pWakeReasonInd;
11926 vosMsg.bodyval = 0;
11927
11928 /* Send message to SME */
11929 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11930 {
11931 /* free the mem and return */
11932 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11933 }
11934
11935 break;
11936 }
11937#endif // WLAN_WAKEUP_EVENTS
11938
11939 case WDI_TX_PER_HIT_IND:
11940 {
11941 vos_msg_t vosMsg;
11942 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11943 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11944 /* VOS message wrapper */
11945 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11946 vosMsg.bodyptr = NULL;
11947 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 /* Send message to SME */
11949 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11950 {
11951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11952 }
11953 break;
11954 }
11955
Leo Chang9056f462013-08-01 19:21:11 -070011956#ifdef FEATURE_WLAN_LPHB
11957 case WDI_LPHB_WAIT_TIMEOUT_IND:
11958 {
11959 vos_msg_t vosMsg;
11960 tSirLPHBTimeoutInd *lphbTimeoutInd;
11961
11962 lphbTimeoutInd =
11963 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11964 if (NULL == lphbTimeoutInd)
11965 {
11966 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11967 "%s: LPHB IND buffer alloc Fail", __func__);
11968 return ;
11969 }
11970
11971 lphbTimeoutInd->sessionIdx =
11972 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11973 lphbTimeoutInd->protocolType =
11974 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11975 lphbTimeoutInd->eventReason =
11976 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11977
11978 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11979 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11980 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11981
11982 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11983 vosMsg.bodyptr = lphbTimeoutInd;
11984 vosMsg.bodyval = 0;
11985 /* Send message to SME */
11986 if (VOS_STATUS_SUCCESS !=
11987 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11988 {
11989 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11990 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11991 vos_mem_free(lphbTimeoutInd);
11992 }
11993 break;
11994 }
11995#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070011996 case WDI_PERIODIC_TX_PTRN_FW_IND:
11997 {
11998 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11999 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12000 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12001 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12002 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12003 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12004 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12005
12006 break;
12007 }
Leo Chang9056f462013-08-01 19:21:11 -070012008
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012009 case WDI_IBSS_PEER_INACTIVITY_IND:
12010 {
12011 tSirIbssPeerInactivityInd *pIbssInd =
12012 (tSirIbssPeerInactivityInd *)
12013 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12014
12015 if (NULL == pIbssInd)
12016 {
12017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12018 "Memory allocation failure, "
12019 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12020 break;
12021 }
12022
12023 pIbssInd->bssIdx =
12024 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12025 pIbssInd->staIdx =
12026 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12027 vos_mem_copy(pIbssInd->peerAddr,
12028 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12029 sizeof(tSirMacAddr));
12030 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12031 break;
12032 }
12033
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 default:
12035 {
12036 /* TODO error */
12037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12038 "Received UNKNOWN Indication from WDI ");
12039 }
12040 }
12041 return ;
12042}
12043
Jeff Johnson295189b2012-06-20 16:38:30 -070012044/*
12045 * BA related processing in WDA.
12046 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012047void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12048 void* pUserData)
12049{
12050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12051 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012052 if(NULL == pWdaParams)
12053 {
12054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012056 VOS_ASSERT(0) ;
12057 return ;
12058 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012059 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012060 vos_mem_free(pWdaParams->wdaMsgParam) ;
12061 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12062 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12066 {
12067 tANI_U8 i = 0 ;
12068 tBaActivityInd *baActivityInd = NULL ;
12069 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12070 tANI_U8 allocSize = sizeof(tBaActivityInd)
12071 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12072 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12073 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012074 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012075 if(NULL == baActivityInd)
12076 {
12077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012079 VOS_ASSERT(0) ;
12080 return;
12081 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012082 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12083 sizeof(tSirMacAddr)) ;
12084 baActivityInd->baCandidateCnt = baCandidateCount ;
12085
12086 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12087 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12088
12089 for(i = 0 ; i < baCandidateCount ; i++)
12090 {
12091 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012092 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12093 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12095 {
12096 baCandidate->baInfo[tid].fBaEnable =
12097 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12098 baCandidate->baInfo[tid].startingSeqNum =
12099 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12100 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012101 wdiBaCandidate++ ;
12102 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012104 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12105 }
12106 else
12107 {
12108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12109 "BA Trigger RSP with Failure received ");
12110 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012111 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012112}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012113
12114
12115/*
12116 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12117 * during MCC
12118 */
12119void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12120{
12121 wpt_uint32 enabled;
12122 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12123 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12124 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12125
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012126 if (NULL == pMac )
12127 {
12128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12129 "%s: Invoked with invalid MAC context ", __func__ );
12130 VOS_ASSERT(0);
12131 return;
12132 }
12133
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012134 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12135 != eSIR_SUCCESS)
12136 {
12137 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12138 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12139 return;
12140 }
12141
12142 if(!enabled)
12143 {
12144 return;
12145 }
12146
12147 if(NULL == pWDA)
12148 {
12149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12150 "%s:WDA context is NULL", __func__);
12151 VOS_ASSERT(0);
12152 return;
12153 }
12154
12155 if(activate)
12156 {
12157 if( VOS_STATUS_SUCCESS !=
12158 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12159 {
12160 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12161 "Traffic Stats Timer Start Failed ");
12162 return;
12163 }
12164 WDI_DS_ActivateTrafficStats();
12165 }
12166 else
12167 {
12168 WDI_DS_DeactivateTrafficStats();
12169 WDI_DS_ClearTrafficStats();
12170
12171 if( VOS_STATUS_SUCCESS !=
12172 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12173 {
12174 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12175 "Traffic Stats Timer Stop Failed ");
12176 return;
12177 }
12178 }
12179}
12180
12181/*
12182 * Traffic Stats Timer handler
12183 */
12184void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12185{
12186 WDI_Status wdiStatus;
12187 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12188 WDI_TrafficStatsIndType trafficStatsIndParams;
12189 wpt_uint32 length, enabled;
12190 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12191
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012192 if (NULL == pMac )
12193 {
12194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12195 "%s: Invoked with invalid MAC context ", __func__ );
12196 VOS_ASSERT(0);
12197 return;
12198 }
12199
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012200 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12201 != eSIR_SUCCESS)
12202 {
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12204 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12205 return;
12206 }
12207
12208 if(!enabled)
12209 {
12210 WDI_DS_DeactivateTrafficStats();
12211 return;
12212 }
12213
12214 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12215
12216 if(pWdiTrafficStats != NULL)
12217 {
12218 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12219 trafficStatsIndParams.length = length;
12220 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012221 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012222 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12223 trafficStatsIndParams.pUserData = pWDA;
12224
12225 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12226
12227 if(WDI_STATUS_PENDING == wdiStatus)
12228 {
12229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12230 "Pending received for %s:%d ",__func__,__LINE__ );
12231 }
12232 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12233 {
12234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12235 "Failure in %s:%d ",__func__,__LINE__ );
12236 }
12237
12238 WDI_DS_ClearTrafficStats();
12239 }
12240 else
12241 {
12242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12243 "pWdiTrafficStats is Null");
12244 }
12245
12246 if( VOS_STATUS_SUCCESS !=
12247 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12248 {
12249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12250 "Traffic Stats Timer Start Failed ");
12251 return;
12252 }
12253}
12254
Jeff Johnson295189b2012-06-20 16:38:30 -070012255/*
12256 * BA Activity check timer handler
12257 */
12258void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12259{
12260 tANI_U8 curSta = 0 ;
12261 tANI_U8 tid = 0 ;
12262 tANI_U8 size = 0 ;
12263 tANI_U8 baCandidateCount = 0 ;
12264 tANI_U8 newBaCandidate = 0 ;
12265 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12266
12267 if(NULL == pWDA)
12268 {
12269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012270 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012271 VOS_ASSERT(0);
12272 return ;
12273 }
12274 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12275 {
12276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12277 "Inconsistent STA entries in WDA");
12278 VOS_ASSERT(0) ;
12279 }
12280 /* walk through all STA entries and find out TX packet count */
12281 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12282 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012283#ifdef WLAN_SOFTAP_VSTA_FEATURE
12284 // We can only do BA on "hard" STAs.
12285 if (!(IS_HWSTA_IDX(curSta)))
12286 {
12287 continue;
12288 }
12289#endif //WLAN_SOFTAP_VSTA_FEATURE
12290 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12291 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012292 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012293 tANI_U32 txPktCount = 0 ;
12294 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012295 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012296 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12297 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012298 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12299 curSta, tid, &txPktCount)))
12300 {
12301#if 0
12302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12303 "************* %d:%d, %d ",curSta, txPktCount,
12304 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12305#endif
12306 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012307 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012308 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12309 curSta, tid)))
12310 {
12311 /* get prepare for sending message to HAL */
12312 //baCandidate[baCandidateCount].staIdx = curSta ;
12313 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12314 newBaCandidate = WDA_ENABLE_BA ;
12315 }
12316 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12317 }
12318 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012319 /* fill the entry for all the sta with given TID's */
12320 if(WDA_ENABLE_BA == newBaCandidate)
12321 {
12322 /* move to next BA candidate */
12323 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12324 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12325 baCandidateCount++ ;
12326 newBaCandidate = WDA_DISABLE_BA ;
12327 }
12328 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012329 /* prepare and send message to hal */
12330 if( 0 < baCandidateCount)
12331 {
12332 WDI_Status status = WDI_STATUS_SUCCESS ;
12333 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12334 tWDA_ReqParams *pWdaParams =
12335 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 if(NULL == pWdaParams)
12337 {
12338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 VOS_ASSERT(0) ;
12341 return;
12342 }
12343 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12344 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12345 if(NULL == wdiTriggerBaReq)
12346 {
12347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012348 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012349 VOS_ASSERT(0) ;
12350 vos_mem_free(pWdaParams);
12351 return;
12352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012353 do
12354 {
12355 WDI_TriggerBAReqinfoType *triggerBaInfo =
12356 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12357 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12358 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12359 * for each request */
12360 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12361 triggerBaInfo->ucBASessionID = 0;
12362 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12363 } while(0) ;
12364 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012367 pWdaParams->pWdaContext = pWDA;
12368 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12369 pWdaParams->wdaMsgParam = NULL;
12370 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12371 WDA_TriggerBaReqCallback, pWdaParams) ;
12372 if(IS_WDI_STATUS_FAILURE(status))
12373 {
12374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12375 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12376 vos_mem_free(pWdaParams->wdaMsgParam) ;
12377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12378 vos_mem_free(pWdaParams) ;
12379 }
12380 }
12381 else
12382 {
12383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12384 "There is no TID for initiating BA");
12385 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012386 if( VOS_STATUS_SUCCESS !=
12387 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12388 {
12389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12390 "BA Activity Timer Stop Failed ");
12391 return ;
12392 }
12393 if( VOS_STATUS_SUCCESS !=
12394 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12395 {
12396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12397 "BA Activity Timer Start Failed ");
12398 return;
12399 }
12400 return ;
12401}
Jeff Johnson295189b2012-06-20 16:38:30 -070012402/*
12403 * WDA common routine to create timer used by WDA.
12404 */
12405static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12406{
Jeff Johnson295189b2012-06-20 16:38:30 -070012407 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12408 tANI_U32 val = 0 ;
12409 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12410
12411 if(NULL == pMac)
12412 {
12413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012414 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012415 VOS_ASSERT(0);
12416 return VOS_STATUS_E_FAILURE;
12417 }
12418 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12419 != eSIR_SUCCESS)
12420 {
12421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12422 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12423 return VOS_STATUS_E_FAILURE;
12424 }
12425 val = SYS_MS_TO_TICKS(val) ;
12426
12427 /* BA activity check timer */
12428 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12429 "BA Activity Check timer", WDA_TimerHandler,
12430 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12431 if(status != TX_SUCCESS)
12432 {
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12434 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012435 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012436 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012437 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012438 /* Tx Complete Timeout timer */
12439 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12440 "Tx Complete Check timer", WDA_TimerHandler,
12441 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012442 if(status != TX_SUCCESS)
12443 {
12444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12445 "Unable to create Tx Complete Timeout timer");
12446 /* Destroy timer of BA activity check timer */
12447 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12448 if(status != TX_SUCCESS)
12449 {
12450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12451 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012452 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012453 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012454 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012455 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012456
12457 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12458
12459 /* Traffic Stats timer */
12460 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12461 "Traffic Stats timer", WDA_TimerHandler,
12462 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12463 if(status != TX_SUCCESS)
12464 {
12465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12466 "Unable to create traffic stats timer");
12467 /* Destroy timer of BA activity check timer */
12468 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12469 if(status != TX_SUCCESS)
12470 {
12471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12472 "Unable to Destroy BA activity timer");
12473 }
12474 /* Destroy timer of tx complete timer */
12475 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12476 if(status != TX_SUCCESS)
12477 {
12478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12479 "Unable to Tx complete timer");
12480 }
12481 return VOS_STATUS_E_FAILURE ;
12482 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012483 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012484}
Jeff Johnson295189b2012-06-20 16:38:30 -070012485/*
12486 * WDA common routine to destroy timer used by WDA.
12487 */
12488static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12489{
12490 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012491 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12492 if(status != TX_SUCCESS)
12493 {
12494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12495 "Unable to Destroy Tx Complete Timeout timer");
12496 return eSIR_FAILURE ;
12497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012498 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12499 if(status != TX_SUCCESS)
12500 {
12501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12502 "Unable to Destroy BA activity timer");
12503 return eSIR_FAILURE ;
12504 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012505 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12506 if(status != TX_SUCCESS)
12507 {
12508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12509 "Unable to Destroy traffic stats timer");
12510 return eSIR_FAILURE ;
12511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012512 return eSIR_SUCCESS ;
12513}
Jeff Johnson295189b2012-06-20 16:38:30 -070012514/*
12515 * WDA timer handler.
12516 */
12517void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12518{
12519 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12520 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012521 /*
12522 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12523 */
12524 wdaMsg.type = timerInfo ;
12525 wdaMsg.bodyptr = NULL;
12526 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 /* post the message.. */
12528 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12529 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12530 {
12531 vosStatus = VOS_STATUS_E_BADMSG;
12532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012533}
Jeff Johnson295189b2012-06-20 16:38:30 -070012534/*
12535 * WDA Tx Complete timeout Indication.
12536 */
12537void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12538{
12539 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012540 if( pWDA->pAckTxCbFunc )
12541 {
12542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12543 "TxComplete timer expired\n");
12544 pWDA->pAckTxCbFunc( pMac, 0);
12545 pWDA->pAckTxCbFunc = NULL;
12546 }
12547 else
12548 {
12549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12550 "There is no request pending for TxComplete and wait timer expired\n");
12551 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012552}
Jeff Johnson295189b2012-06-20 16:38:30 -070012553/*
12554 * WDA Set REG Domain to VOS NV
12555 */
12556eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12557{
12558 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12559 {
12560 return eHAL_STATUS_INVALID_PARAMETER;
12561 }
12562 return eHAL_STATUS_SUCCESS;
12563}
Jeff Johnson295189b2012-06-20 16:38:30 -070012564
Jeff Johnson295189b2012-06-20 16:38:30 -070012565#ifdef FEATURE_WLAN_SCAN_PNO
12566/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012567 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012568 *
12569 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012570void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012571{
12572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012574 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012575 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012576 {
12577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012578 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 VOS_ASSERT(0) ;
12580 return ;
12581 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012582
Yue Ma7f44bbe2013-04-12 11:47:39 -070012583 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12584 vos_mem_free(pWdaParams->wdaMsgParam);
12585 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012586
12587 return ;
12588}
Jeff Johnson295189b2012-06-20 16:38:30 -070012589/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012590 * FUNCTION: WDA_PNOScanReqCallback
12591 * Free memory.
12592 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12593 */
12594void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012595{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012596 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12597
12598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12599 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12600
12601 if(NULL == pWdaParams)
12602 {
12603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12604 "%s: pWdaParams received NULL", __func__);
12605 VOS_ASSERT(0);
12606 return;
12607 }
12608
12609 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12610 {
12611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12612 vos_mem_free(pWdaParams->wdaMsgParam);
12613 vos_mem_free(pWdaParams);
12614 }
12615
12616 return;
12617}
12618/*
12619 * FUNCTION: WDA_UpdateScanParamsRespCallback
12620 *
12621 */
12622void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12623{
12624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012626 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012627 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012628 {
12629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012630 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012631 VOS_ASSERT(0) ;
12632 return ;
12633 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012634
12635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12636 vos_mem_free(pWdaParams->wdaMsgParam);
12637 vos_mem_free(pWdaParams);
12638
Jeff Johnson295189b2012-06-20 16:38:30 -070012639 return ;
12640}
Jeff Johnson295189b2012-06-20 16:38:30 -070012641/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012642 * FUNCTION: WDA_UpdateScanParamsReqCallback
12643 * Free memory.
12644 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12645 */
12646void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12647{
12648 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12649
12650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12651 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12652
12653 if(NULL == pWdaParams)
12654 {
12655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12656 "%s: pWdaParams received NULL", __func__);
12657 VOS_ASSERT(0);
12658 return;
12659 }
12660
12661 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12662 {
12663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12664 vos_mem_free(pWdaParams->wdaMsgParam);
12665 vos_mem_free(pWdaParams);
12666 }
12667
12668 return;
12669}
12670/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012671 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12672 * Request to WDI to set Preferred Network List.Offload
12673 */
12674VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12675 tSirPNOScanReq *pPNOScanReqParams)
12676{
Jeff Johnson43971f52012-07-17 12:26:56 -070012677 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12679 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12680 tWDA_ReqParams *pWdaParams ;
12681 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012683 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012684 if(NULL == pwdiPNOScanReqInfo)
12685 {
12686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012687 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012688 VOS_ASSERT(0);
12689 return VOS_STATUS_E_NOMEM;
12690 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012691 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12692 if(NULL == pWdaParams)
12693 {
12694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012695 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 VOS_ASSERT(0);
12697 vos_mem_free(pwdiPNOScanReqInfo);
12698 return VOS_STATUS_E_NOMEM;
12699 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 //
12701 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12702 //
12703 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12704 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12706 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12707 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012708 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12709 {
12710 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12711 &pPNOScanReqParams->aNetworks[i],
12712 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12713 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 /*Scan timer intervals*/
12715 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12716 &pPNOScanReqParams->scanTimers,
12717 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012718 /*Probe template for 2.4GHz band*/
12719 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12720 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12721 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012722 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12723 pPNOScanReqParams->p24GProbeTemplate,
12724 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012725 /*Probe template for 5GHz band*/
12726 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12727 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12728 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012729 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12730 pPNOScanReqParams->p5GProbeTemplate,
12731 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012732 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12733 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012734
Jeff Johnson295189b2012-06-20 16:38:30 -070012735 /* Store Params pass it to WDI */
12736 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12737 pWdaParams->pWdaContext = pWDA;
12738 /* Store param pointer as passed in by caller */
12739 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012740 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012741 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012742 if(IS_WDI_STATUS_FAILURE(status))
12743 {
12744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12745 "Failure in Set PNO REQ WDI API, free all the memory " );
12746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12747 vos_mem_free(pWdaParams->wdaMsgParam);
12748 pWdaParams->wdaWdiApiMsgParam = NULL;
12749 pWdaParams->wdaMsgParam = NULL;
12750 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012751 return CONVERT_WDI2VOS_STATUS(status) ;
12752}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012753
12754#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12755
12756void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12757{
12758 /*Convert the CSR Auth types to WDI Auth types */
12759 switch (csrAuthType)
12760 {
12761 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12762 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12763 break;
12764#ifdef FEATURE_WLAN_CCX
12765 case eCSR_AUTH_TYPE_CCKM_WPA:
12766 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12767 break;
12768#endif
12769 case eCSR_AUTH_TYPE_WPA:
12770 *AuthType = eWDA_AUTH_TYPE_WPA;
12771 break;
12772 case eCSR_AUTH_TYPE_WPA_PSK:
12773 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12774 break;
12775#ifdef FEATURE_WLAN_CCX
12776 case eCSR_AUTH_TYPE_CCKM_RSN:
12777 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12778 break;
12779#endif
12780 case eCSR_AUTH_TYPE_RSN:
12781 *AuthType = eWDA_AUTH_TYPE_RSN;
12782 break;
12783 case eCSR_AUTH_TYPE_RSN_PSK:
12784 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12785 break;
12786#if defined WLAN_FEATURE_VOWIFI_11R
12787 case eCSR_AUTH_TYPE_FT_RSN:
12788 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12789 break;
12790 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12791 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12792 break;
12793#endif
12794#ifdef FEATURE_WLAN_WAPI
12795 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12796 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12797 break;
12798 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12799 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12800 break;
12801#endif /* FEATURE_WLAN_WAPI */
12802 case eCSR_AUTH_TYPE_SHARED_KEY:
12803 case eCSR_AUTH_TYPE_AUTOSWITCH:
12804 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12805 break;
12806#if 0
12807 case eCSR_AUTH_TYPE_SHARED_KEY:
12808 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12809 break;
12810 case eCSR_AUTH_TYPE_AUTOSWITCH:
12811 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12812#endif
12813 default:
12814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12815 "%s: Unknown Auth Type", __func__);
12816 break;
12817 }
12818}
12819void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12820{
12821 switch (csrEncrType)
12822 {
12823 case eCSR_ENCRYPT_TYPE_NONE:
12824 *EncrType = WDI_ED_NONE;
12825 break;
12826 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12827 case eCSR_ENCRYPT_TYPE_WEP40:
12828 *EncrType = WDI_ED_WEP40;
12829 break;
12830 case eCSR_ENCRYPT_TYPE_WEP104:
12831 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12832 *EncrType = WDI_ED_WEP104;
12833 break;
12834 case eCSR_ENCRYPT_TYPE_TKIP:
12835 *EncrType = WDI_ED_TKIP;
12836 break;
12837 case eCSR_ENCRYPT_TYPE_AES:
12838 *EncrType = WDI_ED_CCMP;
12839 break;
12840#ifdef WLAN_FEATURE_11W
12841 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12842 *EncrType = WDI_ED_AES_128_CMAC;
12843 break;
12844#endif
12845#ifdef FEATURE_WLAN_WAPI
12846 case eCSR_ENCRYPT_TYPE_WPI:
12847 *EncrType = WDI_ED_WPI;
12848 break;
12849#endif
12850 case eCSR_ENCRYPT_TYPE_ANY:
12851 *EncrType = WDI_ED_ANY;
12852 break;
12853
12854 default:
12855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12856 "%s: Unknown Encryption Type", __func__);
12857 break;
12858 }
12859}
12860
12861/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012862 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012863 * Request to WDI to set Roam Offload Scan
12864 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012865VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012866 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12867{
12868 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012869 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12870 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012871 tWDA_ReqParams *pWdaParams ;
12872 v_U8_t csrAuthType;
12873 WDI_RoamNetworkType *pwdiRoamNetworkType;
12874 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12876 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012877 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012878 {
12879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12880 "%s: VOS MEM Alloc Failure", __func__);
12881 VOS_ASSERT(0);
12882 return VOS_STATUS_E_NOMEM;
12883 }
12884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12885 if (NULL == pWdaParams)
12886 {
12887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12888 "%s: VOS MEM Alloc Failure", __func__);
12889 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012890 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012891 return VOS_STATUS_E_NOMEM;
12892 }
12893
12894 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012895 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012896 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012897 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12898 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012899 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12900 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12901 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12902 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12903 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12904 sizeof(pwdiRoamNetworkType->currAPbssid));
12905 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12906 csrAuthType);
12907 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12908 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12909 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12910 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12911 pwdiRoamOffloadScanInfo->LookupThreshold =
12912 pRoamOffloadScanReqParams->LookupThreshold ;
12913 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12914 pRoamOffloadScanReqParams->RoamRssiDiff ;
12915 pwdiRoamOffloadScanInfo->Command =
12916 pRoamOffloadScanReqParams->Command ;
12917 pwdiRoamOffloadScanInfo->StartScanReason =
12918 pRoamOffloadScanReqParams->StartScanReason ;
12919 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12920 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12921 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12922 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12923 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12924 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12925 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12926 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12927 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12928 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12929 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12930 pRoamOffloadScanReqParams->IsCCXEnabled ;
12931 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12932 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12933 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12934 pwdiRoamNetworkType->ssId.ucLength =
12935 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12936 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12937 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12938 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12939 pwdiRoamNetworkType->ChannelCount =
12940 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12941 pwdiRoamOffloadScanInfo->ChannelCacheType =
12942 pRoamOffloadScanReqParams->ChannelCacheType;
12943 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12944 pRoamOffloadScanReqParams->ValidChannelList,
12945 pRoamOffloadScanReqParams->ValidChannelCount);
12946 pwdiRoamOffloadScanInfo->ValidChannelCount =
12947 pRoamOffloadScanReqParams->ValidChannelCount;
12948 pwdiRoamOffloadScanInfo->us24GProbeSize =
12949 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12950 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12951 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12952 pRoamOffloadScanReqParams->p24GProbeTemplate,
12953 pwdiRoamOffloadScanInfo->us24GProbeSize);
12954 pwdiRoamOffloadScanInfo->us5GProbeSize =
12955 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12956 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12957 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12958 pRoamOffloadScanReqParams->p5GProbeTemplate,
12959 pwdiRoamOffloadScanInfo->us5GProbeSize);
12960 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12961 pRoamOffloadScanReqParams->MDID.mdiePresent;
12962 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12963 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012964 pwdiRoamOffloadScanInfo->nProbes =
12965 pRoamOffloadScanReqParams->nProbes;
12966 pwdiRoamOffloadScanInfo->HomeAwayTime =
12967 pRoamOffloadScanReqParams->HomeAwayTime;
12968 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012969 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012970 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012971 pWdaParams->pWdaContext = pWDA;
12972 /* Store param pointer as passed in by caller */
12973 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012974 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012975 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12976 if(IS_WDI_STATUS_FAILURE(status))
12977 {
12978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12979 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12981 vos_mem_free(pWdaParams->wdaMsgParam);
12982 pWdaParams->wdaWdiApiMsgParam = NULL;
12983 pWdaParams->wdaMsgParam = NULL;
12984 }
12985 return CONVERT_WDI2VOS_STATUS(status) ;
12986}
12987#endif
12988
Jeff Johnson295189b2012-06-20 16:38:30 -070012989/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012990 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012991 *
12992 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012993void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012994{
12995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12996
12997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012999
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013000 if(NULL == pWdaParams)
13001 {
13002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013003 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013004 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013005 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013006 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013007
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 vos_mem_free(pWdaParams->wdaMsgParam) ;
13009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13010 vos_mem_free(pWdaParams) ;
13011
13012 return ;
13013}
13014/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013015 * FUNCTION: WDA_RssiFilterReqCallback
13016 * Free memory.
13017 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13018 */
13019void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13020{
13021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13022
13023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13024 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13025
13026 if(NULL == pWdaParams)
13027 {
13028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13029 "%s: pWdaParams received NULL", __func__);
13030 VOS_ASSERT(0);
13031 return;
13032 }
13033
13034 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13035 {
13036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13037 vos_mem_free(pWdaParams->wdaMsgParam);
13038 vos_mem_free(pWdaParams);
13039 }
13040
13041 return;
13042}
13043/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13045 * Request to WDI to set Preferred Network List.Offload
13046 */
13047VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13048 tSirSetRSSIFilterReq* pRssiFilterParams)
13049{
Jeff Johnson43971f52012-07-17 12:26:56 -070013050 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013051 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13052 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13053 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013055 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 if(NULL == pwdiSetRssiFilterReqInfo)
13057 {
13058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013059 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013060 VOS_ASSERT(0);
13061 return VOS_STATUS_E_NOMEM;
13062 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013063 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13064 if(NULL == pWdaParams)
13065 {
13066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013067 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013068 VOS_ASSERT(0);
13069 vos_mem_free(pwdiSetRssiFilterReqInfo);
13070 return VOS_STATUS_E_NOMEM;
13071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013072 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013073 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13074 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013075
Jeff Johnson295189b2012-06-20 16:38:30 -070013076 /* Store Params pass it to WDI */
13077 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13078 pWdaParams->pWdaContext = pWDA;
13079 /* Store param pointer as passed in by caller */
13080 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013082 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013083 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 if(IS_WDI_STATUS_FAILURE(status))
13085 {
13086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13087 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13089 vos_mem_free(pWdaParams->wdaMsgParam);
13090 pWdaParams->wdaWdiApiMsgParam = NULL;
13091 pWdaParams->wdaMsgParam = NULL;
13092 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013093 return CONVERT_WDI2VOS_STATUS(status) ;
13094}
13095
Jeff Johnson295189b2012-06-20 16:38:30 -070013096/*
13097 * FUNCTION: WDA_ProcessUpdateScanParams
13098 * Request to WDI to update Scan Parameters
13099 */
13100VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13101 tSirUpdateScanParams *pUpdateScanParams)
13102{
Jeff Johnson43971f52012-07-17 12:26:56 -070013103 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013104 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13105 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13106 sizeof(WDI_UpdateScanParamsInfoType)) ;
13107 tWDA_ReqParams *pWdaParams ;
13108 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013110 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013111 if(NULL == wdiUpdateScanParamsInfoType)
13112 {
13113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013115 VOS_ASSERT(0);
13116 return VOS_STATUS_E_NOMEM;
13117 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013118 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13119 if ( NULL == pWdaParams )
13120 {
13121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013123 VOS_ASSERT(0);
13124 vos_mem_free(wdiUpdateScanParamsInfoType);
13125 return VOS_STATUS_E_NOMEM;
13126 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013127 //
13128 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13129 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13131 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13132 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13133 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
13134 "sir struct %d wdi struct %d",
13135 pUpdateScanParams->b11dEnabled,
13136 pUpdateScanParams->b11dResolved,
13137 pUpdateScanParams->ucChannelCount,
13138 pUpdateScanParams->usPassiveMinChTime,
13139 pUpdateScanParams->usPassiveMaxChTime,
13140 pUpdateScanParams->usActiveMinChTime,
13141 pUpdateScanParams->usActiveMaxChTime,
13142 sizeof(tSirUpdateScanParams),
13143 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13144
Jeff Johnson295189b2012-06-20 16:38:30 -070013145 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13146 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013147 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13148 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013149 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13150 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013151 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13152 pUpdateScanParams->usActiveMaxChTime;
13153 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13154 pUpdateScanParams->usActiveMinChTime;
13155 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13156 pUpdateScanParams->usPassiveMaxChTime;
13157 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13158 pUpdateScanParams->usPassiveMinChTime;
13159
Jeff Johnson295189b2012-06-20 16:38:30 -070013160 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013161 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13162 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013163
Jeff Johnson295189b2012-06-20 16:38:30 -070013164 for ( i = 0; i <
13165 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13166 i++)
13167 {
13168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13169 "Update Scan Parameters channel: %d",
13170 pUpdateScanParams->aChannels[i]);
13171
13172 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13173 pUpdateScanParams->aChannels[i];
13174 }
13175
Yue Ma7f44bbe2013-04-12 11:47:39 -070013176 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13177 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013178
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 /* Store Params pass it to WDI */
13180 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13181 pWdaParams->pWdaContext = pWDA;
13182 /* Store param pointer as passed in by caller */
13183 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013184
Jeff Johnson295189b2012-06-20 16:38:30 -070013185
13186
13187 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013188 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013189 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013190 if(IS_WDI_STATUS_FAILURE(status))
13191 {
13192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13193 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13194 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13195 vos_mem_free(pWdaParams->wdaMsgParam);
13196 vos_mem_free(pWdaParams);
13197 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 return CONVERT_WDI2VOS_STATUS(status) ;
13199}
13200#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013201
13202#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13203/*
13204 * FUNCTION: WDA_RoamOffloadScanReqCallback
13205 *
13206 */
13207void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13208{
13209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013210 vos_msg_t vosMsg;
13211 wpt_uint8 reason = 0;
13212
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013214 "<------ %s " ,__func__);
13215 if (NULL == pWdaParams)
13216 {
13217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13218 "%s: pWdaParams received NULL", __func__);
13219 VOS_ASSERT(0) ;
13220 return ;
13221 }
13222 if ( pWdaParams != NULL )
13223 {
13224 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13225 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013226 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13228 }
13229 if ( pWdaParams->wdaMsgParam != NULL)
13230 {
13231 vos_mem_free(pWdaParams->wdaMsgParam);
13232 }
13233
13234 vos_mem_free(pWdaParams) ;
13235 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013236 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13237 vosMsg.bodyptr = NULL;
13238 if (WDI_STATUS_SUCCESS != status)
13239 {
13240 reason = 0;
13241 }
13242 vosMsg.bodyval = reason;
13243 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13244 {
13245 /* free the mem and return */
13246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13247 "Failed to post the rsp to UMAC" ,__func__);
13248 }
13249
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013250 return ;
13251}
13252#endif
13253
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013254/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013255 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013256 *
13257 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013258void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013259{
13260 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13261
13262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13263 "<------ %s " ,__func__);
13264
13265 if(NULL == pWdaParams)
13266 {
13267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13268 "%s: pWdaParams received NULL", __func__);
13269 VOS_ASSERT(0);
13270 return;
13271 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013272
13273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13274 vos_mem_free(pWdaParams->wdaMsgParam);
13275 vos_mem_free(pWdaParams);
13276
13277 return;
13278}
13279/*
13280 * FUNCTION: WDA_SetPowerParamsReqCallback
13281 * Free memory.
13282 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13283 */
13284void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13285{
13286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13287
13288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13289 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13290
13291 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013292 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13294 "%s: pWdaParams received NULL", __func__);
13295 VOS_ASSERT(0);
13296 return;
13297 }
13298
13299 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13300 {
13301 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13302 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013303 vos_mem_free(pWdaParams);
13304 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013305
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013306 return;
13307}
13308
Jeff Johnson295189b2012-06-20 16:38:30 -070013309#ifdef WLAN_FEATURE_PACKET_FILTERING
13310/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013311 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013312 *
13313 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013314void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013315 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13316 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013317{
13318 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013320 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 if(NULL == pWdaParams)
13322 {
13323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013324 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 VOS_ASSERT(0) ;
13326 return ;
13327 }
13328
13329 vos_mem_free(pWdaParams->wdaMsgParam) ;
13330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13331 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013332 //print a msg, nothing else to do
13333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013334 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013335 return ;
13336}
Jeff Johnson295189b2012-06-20 16:38:30 -070013337/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013338 * FUNCTION: WDA_8023MulticastListReqCallback
13339 * Free memory.
13340 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13341 */
13342void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13343{
13344 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13345
13346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13347 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13348
13349 if(NULL == pWdaParams)
13350 {
13351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13352 "%s: pWdaParams received NULL", __func__);
13353 VOS_ASSERT(0);
13354 return;
13355 }
13356
13357 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13358 {
13359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13360 vos_mem_free(pWdaParams->wdaMsgParam);
13361 vos_mem_free(pWdaParams);
13362 }
13363
13364 return;
13365}
13366/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 * FUNCTION: WDA_Process8023MulticastListReq
13368 * Request to WDI to add 8023 Multicast List
13369 */
13370VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13371 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13372{
Jeff Johnson43971f52012-07-17 12:26:56 -070013373 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013374 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13375 tWDA_ReqParams *pWdaParams ;
13376 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013378 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013379 pwdiFltPktSetMcListReqParamsType =
13380 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13381 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13382 ) ;
13383 if(NULL == pwdiFltPktSetMcListReqParamsType)
13384 {
13385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013387 return VOS_STATUS_E_NOMEM;
13388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13390 if(NULL == pWdaParams)
13391 {
13392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013394 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13395 return VOS_STATUS_E_NOMEM;
13396 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013397
Jeff Johnson295189b2012-06-20 16:38:30 -070013398 //
13399 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13400 //
13401 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013402 pRcvFltMcAddrList->ulMulticastAddrCnt;
13403
13404 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13405 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13406 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13407 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13408
Jeff Johnson295189b2012-06-20 16:38:30 -070013409 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13410 {
13411 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13412 &(pRcvFltMcAddrList->multicastAddr[i]),
13413 sizeof(tSirMacAddr));
13414 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013415 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13416 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013417
Jeff Johnson295189b2012-06-20 16:38:30 -070013418 /* Store Params pass it to WDI */
13419 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13420 pWdaParams->pWdaContext = pWDA;
13421 /* Store param pointer as passed in by caller */
13422 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013423 status = WDI_8023MulticastListReq(
13424 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013425 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013426 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013427 if(IS_WDI_STATUS_FAILURE(status))
13428 {
13429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13430 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13432 vos_mem_free(pWdaParams->wdaMsgParam);
13433 vos_mem_free(pWdaParams);
13434 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013435 return CONVERT_WDI2VOS_STATUS(status) ;
13436}
Jeff Johnson295189b2012-06-20 16:38:30 -070013437/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013438 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 *
13440 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013441void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013442 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13443 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013444{
13445 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013447 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013448 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013449 if(NULL == pWdaParams)
13450 {
13451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013452 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 VOS_ASSERT(0) ;
13454 return ;
13455 }
13456
13457 vos_mem_free(pWdaParams->wdaMsgParam) ;
13458 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13459 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 //print a msg, nothing else to do
13461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013462 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013463 return ;
13464}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013465
13466/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013467 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13468 * Free memory.
13469 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013470 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013471void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013472 void* pUserData)
13473{
13474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13475
13476 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13477 "<------ %s, wdiStatus: %d",
13478 __func__, wdiStatus);
13479
13480 if (NULL == pWdaParams)
13481 {
13482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13483 "%s: Invalid pWdaParams pointer", __func__);
13484 VOS_ASSERT(0);
13485 return;
13486 }
13487
13488 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13489 {
13490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13491 vos_mem_free(pWdaParams->wdaMsgParam);
13492 vos_mem_free(pWdaParams);
13493 }
13494
13495 return;
13496}
13497
Jeff Johnson295189b2012-06-20 16:38:30 -070013498/*
13499 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13500 * Request to WDI to set Receive Filters
13501 */
13502VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13503 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13504{
Jeff Johnson43971f52012-07-17 12:26:56 -070013505 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013506 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13507 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13508 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13509 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13510 tWDA_ReqParams *pWdaParams ;
13511 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013513 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013514 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13515 {
13516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013518 VOS_ASSERT(0);
13519 return VOS_STATUS_E_NOMEM;
13520 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13522 if(NULL == pWdaParams)
13523 {
13524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013526 VOS_ASSERT(0);
13527 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13528 return VOS_STATUS_E_NOMEM;
13529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013530 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13531 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13532 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13533 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013534 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13535 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13536
13537 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13538 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013539
13540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13541 "FID %d FT %d NParams %d CT %d",
13542 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13543 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13544 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13545 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013546 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13547 {
13548 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13549 &pRcvPktFilterCfg->paramsData[i],
13550 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13552 "Proto %d Comp Flag %d \n",
13553 pwdiSetRcvPktFilterReqParamsType->
13554 wdiPktFilterCfg.paramsData[i].protocolLayer,
13555 pwdiSetRcvPktFilterReqParamsType->
13556 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13558 "Data Offset %d Data Len %d\n",
13559 pwdiSetRcvPktFilterReqParamsType->
13560 wdiPktFilterCfg.paramsData[i].dataOffset,
13561 pwdiSetRcvPktFilterReqParamsType->
13562 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13564 "CData: %d:%d:%d:%d:%d:%d\n",
13565 pwdiSetRcvPktFilterReqParamsType->
13566 wdiPktFilterCfg.paramsData[i].compareData[0],
13567 pwdiSetRcvPktFilterReqParamsType->
13568 wdiPktFilterCfg.paramsData[i].compareData[1],
13569 pwdiSetRcvPktFilterReqParamsType->
13570 wdiPktFilterCfg.paramsData[i].compareData[2],
13571 pwdiSetRcvPktFilterReqParamsType->
13572 wdiPktFilterCfg.paramsData[i].compareData[3],
13573 pwdiSetRcvPktFilterReqParamsType->
13574 wdiPktFilterCfg.paramsData[i].compareData[4],
13575 pwdiSetRcvPktFilterReqParamsType->
13576 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13578 "MData: %d:%d:%d:%d:%d:%d\n",
13579 pwdiSetRcvPktFilterReqParamsType->
13580 wdiPktFilterCfg.paramsData[i].dataMask[0],
13581 pwdiSetRcvPktFilterReqParamsType->
13582 wdiPktFilterCfg.paramsData[i].dataMask[1],
13583 pwdiSetRcvPktFilterReqParamsType->
13584 wdiPktFilterCfg.paramsData[i].dataMask[2],
13585 pwdiSetRcvPktFilterReqParamsType->
13586 wdiPktFilterCfg.paramsData[i].dataMask[3],
13587 pwdiSetRcvPktFilterReqParamsType->
13588 wdiPktFilterCfg.paramsData[i].dataMask[4],
13589 pwdiSetRcvPktFilterReqParamsType->
13590 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013591 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013592 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013593 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013594 /* Store Params pass it to WDI */
13595 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13596 pWdaParams->pWdaContext = pWDA;
13597 /* Store param pointer as passed in by caller */
13598 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013600 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013602 if(IS_WDI_STATUS_FAILURE(status))
13603 {
13604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13605 "Failure in SetFilter(),free all the memory,status %d ",status);
13606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13607 vos_mem_free(pWdaParams->wdaMsgParam);
13608 vos_mem_free(pWdaParams);
13609 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013610 return CONVERT_WDI2VOS_STATUS(status) ;
13611}
Jeff Johnson295189b2012-06-20 16:38:30 -070013612/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013613 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013614 *
13615 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013616void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013617 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13618 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013619{
13620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13621 tWDA_CbContext *pWDA;
13622 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13623 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13624 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13625 tANI_U8 i;
13626 vos_msg_t vosMsg;
13627
13628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013629 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013630 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13631
Jeff Johnsone7245742012-09-05 17:12:55 -070013632 if(NULL == pRcvFltPktMatchCntRsp)
13633 {
13634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013635 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013636 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013637 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013638 return ;
13639 }
13640
Jeff Johnson295189b2012-06-20 16:38:30 -070013641 if(NULL == pWdaParams)
13642 {
13643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013644 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013645 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013646 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013647 return ;
13648 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013649 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13650 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013651 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13652 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13653
13654 /* Message Header */
13655 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13656 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13657
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013658 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013659
13660 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13661 {
13662 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13663 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 /* VOS message wrapper */
13666 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13667 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13668 vosMsg.bodyval = 0;
13669 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13670 {
13671 /* free the mem and return */
13672 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13673 }
13674
13675 vos_mem_free(pWdaParams->wdaMsgParam) ;
13676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13677 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013678
13679 return;
13680}
13681/*
13682 * FUNCTION: WDA_FilterMatchCountReqCallback
13683 * Free memory and send RSP back to SME.
13684 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13685 */
13686void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13687{
13688 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13689 vos_msg_t vosMsg;
13690
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13692 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13693
13694 if(NULL == pWdaParams)
13695 {
13696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13697 "%s: pWdaParams received NULL", __func__);
13698 VOS_ASSERT(0);
13699 return;
13700 }
13701
13702 /* VOS message wrapper */
13703 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13704 vosMsg.bodyptr = NULL;
13705 vosMsg.bodyval = 0;
13706
13707 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13708 {
13709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13710 vos_mem_free(pWdaParams->wdaMsgParam);
13711 vos_mem_free(pWdaParams);
13712 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13713 }
13714
13715 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013716}
Jeff Johnson295189b2012-06-20 16:38:30 -070013717/*
13718 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13719 * Request to WDI to get PC Filter Match Count
13720 */
13721VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13722{
Jeff Johnson43971f52012-07-17 12:26:56 -070013723 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013724 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13725 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13726 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013728 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13730 {
13731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013733 VOS_ASSERT(0);
13734 return VOS_STATUS_E_NOMEM;
13735 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013736 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13737 if(NULL == pWdaParams)
13738 {
13739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013740 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013741 VOS_ASSERT(0);
13742 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13743 return VOS_STATUS_E_NOMEM;
13744 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013745
Yue Ma7f44bbe2013-04-12 11:47:39 -070013746 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13747 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013748
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013749 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13750 pRcvFltPktMatchRsp->bssId,
13751 sizeof(wpt_macAddr));
13752
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 /* Store Params pass it to WDI */
13754 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13755 pWdaParams->pWdaContext = pWDA;
13756 /* Store param pointer as passed in by caller */
13757 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013758 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013759 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013760 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013761 if(IS_WDI_STATUS_FAILURE(status))
13762 {
13763 /* failure returned by WDI API */
13764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13765 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13766 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13767 vos_mem_free(pWdaParams) ;
13768 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13769 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13770 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013771 return CONVERT_WDI2VOS_STATUS(status) ;
13772}
Jeff Johnson295189b2012-06-20 16:38:30 -070013773/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013774 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013775 *
13776 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013777void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013778 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13779 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013780{
13781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013784/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13785 if(NULL == pWdaParams)
13786 {
13787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013788 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013789 VOS_ASSERT(0) ;
13790 return ;
13791 }
13792
13793 vos_mem_free(pWdaParams->wdaMsgParam) ;
13794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13795 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013796 //print a msg, nothing else to do
13797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013798 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013799 return ;
13800}
Jeff Johnson295189b2012-06-20 16:38:30 -070013801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013802 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13803 * Free memory.
13804 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13805 */
13806void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13807{
13808 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13809
13810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13811 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13812
13813 if(NULL == pWdaParams)
13814 {
13815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13816 "%s: Invalid pWdaParams pointer", __func__);
13817 VOS_ASSERT(0);
13818 return;
13819 }
13820
13821 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13822 {
13823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13824 vos_mem_free(pWdaParams->wdaMsgParam);
13825 vos_mem_free(pWdaParams);
13826 }
13827
13828 return;
13829}
13830/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013831 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13832 * Request to WDI to clear Receive Filters
13833 */
13834VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13835 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13836{
Jeff Johnson43971f52012-07-17 12:26:56 -070013837 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13839 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013843 if(NULL == pwdiRcvFltPktClearReqParamsType)
13844 {
13845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013847 VOS_ASSERT(0);
13848 return VOS_STATUS_E_NOMEM;
13849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13851 if(NULL == pWdaParams)
13852 {
13853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 VOS_ASSERT(0);
13856 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13857 return VOS_STATUS_E_NOMEM;
13858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13860 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013861 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13862 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13863 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13864 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013865
Yue Ma7f44bbe2013-04-12 11:47:39 -070013866 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013867 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013868 /* Store Params pass it to WDI */
13869 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13870 pWdaParams->pWdaContext = pWDA;
13871 /* Store param pointer as passed in by caller */
13872 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013873 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013874 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013876 if(IS_WDI_STATUS_FAILURE(status))
13877 {
13878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13879 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013881 vos_mem_free(pWdaParams->wdaMsgParam);
13882 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013883 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013884 return CONVERT_WDI2VOS_STATUS(status) ;
13885}
13886#endif // WLAN_FEATURE_PACKET_FILTERING
13887
Jeff Johnson295189b2012-06-20 16:38:30 -070013888/*
13889 * FUNCTION: WDA_ProcessSetPowerParamsReq
13890 * Request to WDI to set power params
13891 */
13892VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13893 tSirSetPowerParamsReq *pPowerParams)
13894{
Jeff Johnson43971f52012-07-17 12:26:56 -070013895 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013896 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13897 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013898 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013901 if(NULL == pwdiSetPowerParamsReqInfo)
13902 {
13903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013904 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013905 VOS_ASSERT(0);
13906 return VOS_STATUS_E_NOMEM;
13907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013908 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13909 if(NULL == pWdaParams)
13910 {
13911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013913 VOS_ASSERT(0);
13914 vos_mem_free(pwdiSetPowerParamsReqInfo);
13915 return VOS_STATUS_E_NOMEM;
13916 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013917
Jeff Johnson295189b2012-06-20 16:38:30 -070013918
13919 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13920 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013921 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13922 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013923 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13924 pPowerParams->uListenInterval;
13925 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13926 pPowerParams->uBcastMcastFilter;
13927 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13928 pPowerParams->uEnableBET;
13929 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13930 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013931 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13932 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013933 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13934 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013935
Jeff Johnson295189b2012-06-20 16:38:30 -070013936 /* Store Params pass it to WDI */
13937 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13938 pWdaParams->pWdaContext = pWDA;
13939 /* Store param pointer as passed in by caller */
13940 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013941 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013942 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013943 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013944 if(IS_WDI_STATUS_FAILURE(status))
13945 {
13946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13947 "Failure in Set power params REQ WDI API, free all the memory " );
13948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13949 vos_mem_free(pWdaParams->wdaMsgParam);
13950 pWdaParams->wdaWdiApiMsgParam = NULL;
13951 pWdaParams->wdaMsgParam = NULL;
13952 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013953 return CONVERT_WDI2VOS_STATUS(status) ;
13954}
13955
13956/*
13957 * FUNCTION: WDA_SetTmLevelRspCallback
13958 * Set TM Level response
13959 */
13960void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13961{
13962 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13963
13964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013965 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013966
13967 if(NULL == pWdaParams)
13968 {
13969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013970 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013971 VOS_ASSERT(0) ;
13972 return ;
13973 }
13974
13975 /* Dose not need to send notification to upper layer
13976 * Just free allocated resources */
13977 if( pWdaParams != NULL )
13978 {
13979 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13980 {
13981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13982 }
13983 vos_mem_free(pWdaParams->wdaMsgParam) ;
13984 vos_mem_free(pWdaParams) ;
13985 }
13986}
13987
13988/*
13989 * FUNCTION: WDA_ProcessSetTmLevelReq
13990 * Set TM Level request
13991 */
13992VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13993 tAniSetTmLevelReq *setTmLevelReq)
13994{
13995 WDI_Status status = WDI_STATUS_SUCCESS ;
13996 tWDA_ReqParams *pWdaParams ;
13997 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13998 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13999 sizeof(WDI_SetTmLevelReqType)) ;
14000 if(NULL == wdiSetTmLevelReq)
14001 {
14002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014004 VOS_ASSERT(0);
14005 return VOS_STATUS_E_NOMEM;
14006 }
14007
14008 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14009 if(NULL == pWdaParams)
14010 {
14011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014013 VOS_ASSERT(0);
14014 vos_mem_free(wdiSetTmLevelReq);
14015 return VOS_STATUS_E_NOMEM;
14016 }
14017
14018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014019 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014020
14021 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14022 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14023
14024 pWdaParams->pWdaContext = pWDA;
14025 pWdaParams->wdaMsgParam = setTmLevelReq;
14026 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14027
14028 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14029 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14030
14031 if(IS_WDI_STATUS_FAILURE(status))
14032 {
14033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014034 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014035 vos_mem_free(pWdaParams->wdaMsgParam) ;
14036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14037 vos_mem_free(pWdaParams) ;
14038 }
14039
14040 return CONVERT_WDI2VOS_STATUS(status) ;
14041}
14042
14043VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14044 tpTxControlParams pTxCtrlParam)
14045{
14046 VOS_STATUS wdaStatus;
14047
14048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014050 if( pTxCtrlParam == NULL )
14051 {
14052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014053 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 return VOS_STATUS_E_FAILURE;
14055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014056 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14057 {
14058 wdaStatus = WDA_SuspendDataTx(pWDA);
14059 }
14060 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14061 {
14062 wdaStatus = WDA_ResumeDataTx(pWDA);
14063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014064 return wdaStatus;
14065}
14066
14067 /* FUNCTION WDA_featureCapsExchange
14068 * WDA API to invoke capability exchange between host and FW.
14069 */
14070void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14071{
14072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014073 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014074 WDI_featureCapsExchangeReq( NULL, pVosContext);
14075}
14076
Yathish9f22e662012-12-10 14:21:35 -080014077/* FUNCTION WDA_disableCapablityFeature
14078 * WDA API to diable Active mode offload in host.
14079 */
14080void WDA_disableCapablityFeature(tANI_U8 feature_index)
14081{
14082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14083 "%s:enter", __func__ );
14084 WDI_disableCapablityFeature(feature_index);
14085}
14086
Jeff Johnson295189b2012-06-20 16:38:30 -070014087 /* FUNCTION WDA_getHostWlanFeatCaps
14088 * Wrapper for WDI API, that will return if the feature (enum value).passed
14089 * to this API is supported or not in Host
14090 * return value
14091 * 0 - implies feature is NOT Supported
14092 * any non zero value - implies feature is SUPPORTED
14093 */
14094tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14095{
14096 return WDI_getHostWlanFeatCaps(featEnumValue);
14097}
14098
14099 /* FUNCTION WDA_getFwWlanFeatCaps
14100 * Wrapper for WDI API, that will return if the feature (enum value).passed
14101 * to this API is supported or not in FW
14102 * return value
14103 * 0 - implies feature is NOT Supported
14104 * any non zero value - implies feature is SUPPORTED
14105 */
14106tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14107{
14108 return WDI_getFwWlanFeatCaps(featEnumValue);
14109}
14110
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014111
Jeff Johnson295189b2012-06-20 16:38:30 -070014112/*
14113 * FUNCTION: WDA_shutdown
14114 * Shutdown WDA/WDI without handshaking with Riva.
14115 * Synchronous function.
14116 */
14117VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14118{
14119 WDI_Status wdiStatus;
14120 //tANI_U8 eventIdx = 0;
14121 VOS_STATUS status = VOS_STATUS_SUCCESS;
14122 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014123 if (NULL == pWDA)
14124 {
14125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014126 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014127 VOS_ASSERT(0);
14128 return VOS_STATUS_E_FAILURE;
14129 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014130 /* FTM mode stay START_STATE */
14131 if( (WDA_READY_STATE != pWDA->wdaState) &&
14132 (WDA_INIT_STATE != pWDA->wdaState) &&
14133 (WDA_START_STATE != pWDA->wdaState) )
14134 {
14135 VOS_ASSERT(0);
14136 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014137
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014138 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14139 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014140 {
14141 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014142 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014143 }
Leo Chang9d76f622013-08-23 16:34:52 -070014144 else
14145 {
14146 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14147 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014148
Jeff Johnson295189b2012-06-20 16:38:30 -070014149 /* call WDI shutdown */
14150 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14152 {
14153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14154 "error in WDA Stop" );
14155 status = VOS_STATUS_E_FAILURE;
14156 }
14157 /* WDI stop is synchrnous, shutdown is complete when it returns */
14158 pWDA->wdaState = WDA_STOP_STATE;
14159
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 /* shutdown should perform the stop & close actions. */
14161 /* Destroy the event */
14162 status = vos_event_destroy(&pWDA->txFrameEvent);
14163 if(!VOS_IS_STATUS_SUCCESS(status))
14164 {
14165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14166 "VOS Event destroy failed - status = %d\n", status);
14167 status = VOS_STATUS_E_FAILURE;
14168 }
14169 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14170 if(!VOS_IS_STATUS_SUCCESS(status))
14171 {
14172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14173 "VOS Event destroy failed - status = %d\n", status);
14174 status = VOS_STATUS_E_FAILURE;
14175 }
14176 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14177 if(!VOS_IS_STATUS_SUCCESS(status))
14178 {
14179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14180 "VOS Event destroy failed - status = %d\n", status);
14181 status = VOS_STATUS_E_FAILURE;
14182 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014183 /* free WDA context */
14184 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14185 if ( !VOS_IS_STATUS_SUCCESS(status) )
14186 {
14187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14188 "error in WDA close " );
14189 status = VOS_STATUS_E_FAILURE;
14190 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014191 return status;
14192}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014193
Jeff Johnsone7245742012-09-05 17:12:55 -070014194/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014195 * FUNCTION: WDA_setNeedShutdown
14196 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014197 */
14198
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014199void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014200{
14201 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014202 if(pWDA == NULL)
14203 {
14204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14205 "Could not get the WDA Context pointer" );
14206 return;
14207 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014208 pWDA->needShutdown = TRUE;
14209}
14210/*
14211 * FUNCTION: WDA_needShutdown
14212 * WDA needs a shutdown
14213 */
14214
14215v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14216{
14217 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014218 if(pWDA == NULL)
14219 {
14220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14221 "Could not get the WDA Context pointer" );
14222 return 0;
14223 }
14224 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014225}
14226
Mohit Khanna4a70d262012-09-11 16:30:12 -070014227#ifdef WLAN_FEATURE_11AC
14228/*
14229 * FUNCTION: WDA_SetBeaconFilterReqCallback
14230 *
14231 */
14232void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14233{
14234 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014236 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014237 if(NULL == pWdaParams)
14238 {
14239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014240 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014241 VOS_ASSERT(0) ;
14242 return ;
14243 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014244
Mohit Khanna4a70d262012-09-11 16:30:12 -070014245 vos_mem_free(pWdaParams->wdaMsgParam) ;
14246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14247 vos_mem_free(pWdaParams) ;
14248 /*
14249 * No respone required for SetBeaconFilter req so just free the request
14250 * param here
14251 */
14252
14253 return ;
14254}
14255
14256VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14257 tUpdateVHTOpMode *pData)
14258{
14259 WDI_Status status = WDI_STATUS_SUCCESS ;
14260 tWDA_ReqParams *pWdaParams ;
14261 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14262 sizeof(WDI_UpdateVHTOpMode)) ;
14263 if(NULL == wdiTemp)
14264 {
14265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014266 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014267 VOS_ASSERT(0);
14268 return VOS_STATUS_E_NOMEM;
14269 }
14270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14271 if(NULL == pWdaParams)
14272 {
14273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014274 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014275 VOS_ASSERT(0);
14276 vos_mem_free(wdiTemp);
14277 return VOS_STATUS_E_NOMEM;
14278 }
14279
14280 wdiTemp->opMode = pData->opMode;
14281 wdiTemp->staId = pData->staId;
14282
14283 pWdaParams->pWdaContext = pWDA;
14284 /* Store Req pointer, as this will be used for response */
14285 pWdaParams->wdaMsgParam = (void *)pData;
14286 /* store Params pass it to WDI */
14287 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14288
14289 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14290
14291 if(IS_WDI_STATUS_FAILURE(status))
14292 {
14293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14294 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14296 vos_mem_free(pWdaParams->wdaMsgParam);
14297 vos_mem_free(pWdaParams);
14298 }
14299 return CONVERT_WDI2VOS_STATUS(status) ;
14300}
14301#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014302
14303/*==========================================================================
14304 FUNCTION WDA_TransportChannelDebug
14305
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014306 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014307 Display Transport Channel debugging information
14308 User may request to display DXE channel snapshot
14309 Or if host driver detects any abnormal stcuk may display
14310
14311 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014312 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014313 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014314 enableStallDetect : Enable stall detect feature
14315 This feature will take effect to data performance
14316 Not integrate till fully verification
14317
14318 RETURN VALUE
14319 NONE
14320
14321===========================================================================*/
14322void WDA_TransportChannelDebug
14323(
schang6295e542013-03-12 15:31:23 -070014324 tpAniSirGlobal pMac,
14325 v_BOOL_t displaySnapshot,
14326 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014327)
14328{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014329 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014330 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014331}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014332
14333/*==========================================================================
14334 FUNCTION WDA_SetEnableSSR
14335
14336 DESCRIPTION
14337 API to enable/disable SSR on WDI timeout
14338
14339 PARAMETERS
14340 enableSSR : enable/disable SSR
14341
14342 RETURN VALUE
14343 NONE
14344
14345===========================================================================*/
14346void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14347{
14348 WDI_SetEnableSSR(enableSSR);
14349}
Leo Chang9056f462013-08-01 19:21:11 -070014350
14351#ifdef FEATURE_WLAN_LPHB
14352/*
14353 * FUNCTION: WDA_LPHBconfRspCallback
14354 *
14355 */
14356void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14357{
14358 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14359
14360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14361 "<------ %s " ,__func__);
14362 if (NULL == pWdaParams)
14363 {
14364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14365 "%s: pWdaParams received NULL", __func__);
14366 VOS_ASSERT(0) ;
14367 return ;
14368 }
14369
14370 /* Do not need to send notification to upper layer
14371 * Just free allocated resources */
14372 if (pWdaParams != NULL)
14373 {
14374 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14375 {
14376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14377 }
14378 vos_mem_free(pWdaParams->wdaMsgParam) ;
14379 vos_mem_free(pWdaParams) ;
14380 }
14381
14382 return;
14383}
14384
14385/*
14386 * FUNCTION: WDA_ProcessLPHBConfReq
14387 *
14388 */
14389VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14390 tSirLPHBReq *pData)
14391{
14392 WDI_Status wdiStatus;
14393 tWDA_ReqParams *pWdaParams ;
14394
14395 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14396 "------> %s " , __func__);
14397
14398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14399 if (NULL == pWdaParams)
14400 {
14401 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14402 "%s: VOS MEM Alloc Failure", __func__);
14403 VOS_ASSERT(0);
14404 vos_mem_free(pData);
14405 return VOS_STATUS_E_NOMEM;
14406 }
14407
14408 pWdaParams->pWdaContext = pWDA;
14409 pWdaParams->wdaMsgParam = (void *)pData;
14410 pWdaParams->wdaWdiApiMsgParam = NULL;
14411
14412 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14413 if (WDI_STATUS_PENDING == wdiStatus)
14414 {
14415 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14416 "Pending received for %s:%d ", __func__, __LINE__);
14417 }
14418 else if (WDI_STATUS_SUCCESS != wdiStatus)
14419 {
14420 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14421 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14422 vos_mem_free(pWdaParams->wdaMsgParam);
14423 vos_mem_free(pWdaParams);
14424 }
14425
14426 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14427}
14428#endif /* FEATURE_WLAN_LPHB */
14429