blob: f5e8992d3cc6798432d2fb14f8413bc36602afda [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
263 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
271 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
278 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
285 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 return status;
506}
507
Jeff Johnson295189b2012-06-20 16:38:30 -0700508/*
509 * FUNCTION: WDA_prepareConfigTLV
510 * Function to prepare CFG for DAL(WDA)
511 */
512VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
513 WDI_StartReqParamsType *wdiStartParams )
514{
515 /* get pMac to acess CFG data base */
516 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
517 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
518 tHalCfg *tlvStruct = NULL ;
519 tANI_U8 *tlvStructStart = NULL ;
520 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
521 v_PVOID_t *configParam;
522 tANI_U32 configParamSize;
523 tANI_U32 *configDataValue;
524 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700525 if ((NULL == pMac)||(NULL == wdaContext))
526 {
527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700528 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700529 VOS_ASSERT(0);
530 return VOS_STATUS_E_FAILURE;
531 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
533 WNI_CFG_STA_ID_LEN +
534 WNI_CFG_EDCA_WME_ACBK_LEN +
535 WNI_CFG_EDCA_WME_ACBE_LEN +
536 WNI_CFG_EDCA_WME_ACVI_LEN +
537 WNI_CFG_EDCA_WME_ACVO_LEN +
538 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 /* malloc memory for all configs in one shot */
540 configParam = vos_mem_malloc(configParamSize);
541
542 if(NULL == configParam )
543 {
544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700545 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 VOS_ASSERT(0) ;
547 return VOS_STATUS_E_NOMEM;
548 }
549 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700550 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 tlvStruct = (tHalCfg *)configParam;
552 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700553 /* TODO: Remove Later */
554 /* QWLAN_HAL_CFG_STA_ID */
555 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
556 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
557 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
558 eSIR_SUCCESS)
559 {
560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
561 "Failed to get value for WNI_CFG_STA_ID");
562 goto handle_failure;
563 }
564 tlvStruct->length = strLength ;
565 /* calculate the pad bytes to have the CFG in aligned format */
566 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
567 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
569 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700570 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
571 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
572 tlvStruct->length = sizeof(tANI_U32);
573 configDataValue = (tANI_U32 *)(tlvStruct + 1);
574 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
575 != eSIR_SUCCESS)
576 {
577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
578 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
579 goto handle_failure;
580 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
582 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
584 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
585 tlvStruct->length = sizeof(tANI_U32);
586 configDataValue = (tANI_U32 *)(tlvStruct + 1);
587 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
588 eSIR_SUCCESS)
589 {
590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
591 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
592 goto handle_failure;
593 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
595 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
597 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
598 tlvStruct->length = sizeof(tANI_U32);
599 configDataValue = (tANI_U32 *)(tlvStruct + 1);
600 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
601 != eSIR_SUCCESS)
602 {
603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
604 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
605 goto handle_failure;
606 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
608 + sizeof(tHalCfg) + tlvStruct->length)) ;
609
610 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
611 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
612 tlvStruct->length = sizeof(tANI_U32);
613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
614 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
615 configDataValue ) != eSIR_SUCCESS)
616 {
617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
618 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
619 goto handle_failure;
620 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
622 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700623 /* QWLAN_HAL_CFG_CAL_PERIOD */
624 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
625 tlvStruct->length = sizeof(tANI_U32);
626 configDataValue = (tANI_U32 *)(tlvStruct + 1);
627 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
628 != eSIR_SUCCESS)
629 {
630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
631 "Failed to get value for WNI_CFG_CAL_PERIOD");
632 goto handle_failure;
633 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
635 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 /* QWLAN_HAL_CFG_CAL_CONTROL */
637 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
638 tlvStruct->length = sizeof(tANI_U32);
639 configDataValue = (tANI_U32 *)(tlvStruct + 1);
640 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
641 != eSIR_SUCCESS)
642 {
643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
644 "Failed to get value for WNI_CFG_CAL_CONTROL");
645 goto handle_failure;
646 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
648 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700649 /* QWLAN_HAL_CFG_PROXIMITY */
650 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
651 tlvStruct->length = sizeof(tANI_U32);
652 configDataValue = (tANI_U32 *)(tlvStruct + 1);
653 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
654 != eSIR_SUCCESS)
655 {
656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
657 "Failed to get value for WNI_CFG_PROXIMITY");
658 goto handle_failure;
659 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
661 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700662 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
663 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
664 tlvStruct->length = sizeof(tANI_U32);
665 configDataValue = (tANI_U32 *)(tlvStruct + 1);
666 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
667 != eSIR_SUCCESS)
668 {
669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
670 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
671 goto handle_failure;
672 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
674 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700675 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
676 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
677 tlvStruct->length = sizeof(tANI_U32);
678 configDataValue = (tANI_U32 *)(tlvStruct + 1);
679 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
680 eSIR_SUCCESS)
681 {
682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
683 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
684 goto handle_failure;
685 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
687 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700688 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
689 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
690 tlvStruct->length = sizeof(tANI_U32);
691 configDataValue = (tANI_U32 *)(tlvStruct + 1);
692 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
693 configDataValue ) != eSIR_SUCCESS)
694 {
695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
696 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
697 goto handle_failure;
698 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
700 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700701 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
702 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
703 tlvStruct->length = sizeof(tANI_U32);
704 configDataValue = (tANI_U32 *)(tlvStruct + 1);
705 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
706 eSIR_SUCCESS)
707 {
708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
709 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
710 goto handle_failure;
711 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
713 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700714 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
715 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
716 tlvStruct->length = sizeof(tANI_U32);
717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
718 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
719 eSIR_SUCCESS)
720 {
721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
722 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
723 goto handle_failure;
724 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
726 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700727 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
728 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
729 tlvStruct->length = sizeof(tANI_U32);
730 configDataValue = (tANI_U32 *)(tlvStruct + 1);
731 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
732 eSIR_SUCCESS)
733 {
734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
735 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
736 goto handle_failure;
737 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
739 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
741 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
742 tlvStruct->length = sizeof(tANI_U32);
743 configDataValue = (tANI_U32 *)(tlvStruct + 1);
744 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
745 configDataValue ) != eSIR_SUCCESS)
746 {
747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
748 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
749 goto handle_failure;
750 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
752 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
754 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
755 tlvStruct->length = sizeof(tANI_U32);
756 configDataValue = (tANI_U32 *)(tlvStruct + 1);
757 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
758 configDataValue ) != eSIR_SUCCESS)
759 {
760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
761 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
762 goto handle_failure;
763 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700764 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
765 + sizeof(tHalCfg) + tlvStruct->length));
766
767 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
768 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
769 tlvStruct->length = sizeof(tANI_U32);
770 configDataValue = (tANI_U32 *)(tlvStruct + 1);
771 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
772 configDataValue ) != eSIR_SUCCESS)
773 {
774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
775 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
776 goto handle_failure;
777 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
779 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700780 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
781 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
782 tlvStruct->length = sizeof(tANI_U32);
783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
784 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
785 configDataValue ) != eSIR_SUCCESS)
786 {
787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
788 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
789 goto handle_failure;
790 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
792 + sizeof(tHalCfg) + tlvStruct->length));
793
794 /* QWLAN_HAL_CFG_FIXED_RATE */
795 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
796 tlvStruct->length = sizeof(tANI_U32);
797 configDataValue = (tANI_U32 *)(tlvStruct + 1);
798 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
799 != eSIR_SUCCESS)
800 {
801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
802 "Failed to get value for WNI_CFG_FIXED_RATE");
803 goto handle_failure;
804 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
806 + sizeof(tHalCfg) + tlvStruct->length));
807
808 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
809 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
810 tlvStruct->length = sizeof(tANI_U32);
811 configDataValue = (tANI_U32 *)(tlvStruct + 1);
812 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
813 != eSIR_SUCCESS)
814 {
815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
816 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
817 goto handle_failure;
818 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
820 + sizeof(tHalCfg) + tlvStruct->length));
821
822 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
823 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
824 tlvStruct->length = sizeof(tANI_U32);
825 configDataValue = (tANI_U32 *)(tlvStruct + 1);
826 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
827 configDataValue ) != eSIR_SUCCESS)
828 {
829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
830 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
831 goto handle_failure;
832 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700835 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
836 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
837 tlvStruct->length = sizeof(tANI_U32);
838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
839 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
840 configDataValue ) != eSIR_SUCCESS)
841 {
842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
843 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
844 goto handle_failure;
845 }
846 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
847 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700848 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
849 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
850 tlvStruct->length = sizeof(tANI_U32);
851 configDataValue = (tANI_U32 *)(tlvStruct + 1);
852 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
853 configDataValue ) != eSIR_SUCCESS)
854 {
855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
856 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
857 goto handle_failure;
858 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
860 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700861 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700874 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
875 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
876 tlvStruct->length = sizeof(tANI_U32);
877 configDataValue = (tANI_U32 *)(tlvStruct + 1);
878 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
879 configDataValue ) != eSIR_SUCCESS)
880 {
881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
882 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
883 goto handle_failure;
884 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
886 + sizeof(tHalCfg) + tlvStruct->length);
887
888#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
889 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
890 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
891 tlvStruct->length = sizeof(tANI_U32);
892 configDataValue = (tANI_U32 *)(tlvStruct + 1);
893 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
894 configDataValue ) != eSIR_SUCCESS)
895 {
896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
897 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
898 goto handle_failure;
899 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700900 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
901 + sizeof(tHalCfg) + tlvStruct->length);
902#endif
903 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
904 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
905 tlvStruct->length = sizeof(tANI_U32);
906 configDataValue = (tANI_U32 *)(tlvStruct + 1);
907 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
908 configDataValue ) != eSIR_SUCCESS)
909 {
910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
911 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
912 goto handle_failure;
913 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
915 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
917 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
918 tlvStruct->length = sizeof(tANI_U32);
919 configDataValue = (tANI_U32 *)(tlvStruct + 1);
920 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
921 eSIR_SUCCESS)
922 {
923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
924 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
925 goto handle_failure;
926 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
928 + sizeof(tHalCfg) + tlvStruct->length);
929
930 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
931 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
932 tlvStruct->length = sizeof(tANI_U32);
933 configDataValue = (tANI_U32 *)(tlvStruct + 1);
934 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
935 configDataValue ) != eSIR_SUCCESS)
936 {
937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
938 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
939 goto handle_failure;
940 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700941 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
942 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700943 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
944 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
945 tlvStruct->length = sizeof(tANI_U32);
946 configDataValue = (tANI_U32 *)(tlvStruct + 1);
947 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
948 configDataValue ) != eSIR_SUCCESS)
949 {
950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
951 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
952 goto handle_failure;
953 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
955 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
957 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
958 tlvStruct->length = sizeof(tANI_U32);
959 configDataValue = (tANI_U32 *)(tlvStruct + 1);
960 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
961 configDataValue ) != eSIR_SUCCESS)
962 {
963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
964 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
965 goto handle_failure;
966 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
968 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
970 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
971 tlvStruct->length = sizeof(tANI_U32);
972 configDataValue = (tANI_U32 *)(tlvStruct + 1);
973 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
974 configDataValue ) != eSIR_SUCCESS)
975 {
976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
977 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
978 goto handle_failure;
979 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700980 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
981 + sizeof(tHalCfg) + tlvStruct->length);
982
983 /* QWLAN_HAL_CFG_STATS_PERIOD */
984 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
988 eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_STATS_PERIOD");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
997 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
998 tlvStruct->length = sizeof(tANI_U32);
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1001 eSIR_SUCCESS)
1002 {
1003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1004 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1005 goto handle_failure;
1006 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1008 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1010 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1011 tlvStruct->length = sizeof(tANI_U32);
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1014 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1016 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001017 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1018 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1019 tlvStruct->length = sizeof(tANI_U32);
1020 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1021 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1022 != eSIR_SUCCESS)
1023 {
1024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1025 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1026 goto handle_failure;
1027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1031 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1032 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1035 &strLength) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1039 goto handle_failure;
1040 }
1041 tlvStruct->length = strLength;
1042 /* calculate the pad bytes to have the CFG in aligned format */
1043 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1044 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1048 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1049 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1052 &strLength) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1056 goto handle_failure;
1057 }
1058 tlvStruct->length = strLength;
1059 /* calculate the pad bytes to have the CFG in aligned format */
1060 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1061 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001062 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1063 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1065 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1066 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1067 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1068 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1069 &strLength) != eSIR_SUCCESS)
1070 {
1071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1072 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1073 goto handle_failure;
1074 }
1075 tlvStruct->length = strLength;
1076 /* calculate the pad bytes to have the CFG in aligned format */
1077 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1078 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001079 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1080 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001081 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1082 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1083 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1084 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1085 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1086 &strLength) != eSIR_SUCCESS)
1087 {
1088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1089 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1090 goto handle_failure;
1091 }
1092 tlvStruct->length = strLength;
1093 /* calculate the pad bytes to have the CFG in aligned format */
1094 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1095 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001096 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1097 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001098 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1099 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1100 tlvStruct->length = sizeof(tANI_U32);
1101 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1102 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1103 != eSIR_SUCCESS)
1104 {
1105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1106 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1107 goto handle_failure;
1108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001109 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1110 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001111 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1112 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1113 tlvStruct->length = sizeof(tANI_U32);
1114 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1115 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1116 != eSIR_SUCCESS)
1117 {
1118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1119 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1120 goto handle_failure;
1121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001122 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1123 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001124 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1125 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1126 tlvStruct->length = sizeof(tANI_U32);
1127 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1128 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1129 != eSIR_SUCCESS)
1130 {
1131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1132 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1133 goto handle_failure;
1134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001135 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1136 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001137 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1138 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1139 tlvStruct->length = sizeof(tANI_U32);
1140 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1141 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1142 != eSIR_SUCCESS)
1143 {
1144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1145 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1146 goto handle_failure;
1147 }
1148 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1149 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001150 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1151 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1152 tlvStruct->length = sizeof(tANI_U32);
1153 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1154 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1155 != eSIR_SUCCESS)
1156 {
1157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1158 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1159 goto handle_failure;
1160 }
1161 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1162 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001163 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1164 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1165 tlvStruct->length = sizeof(tANI_U32);
1166 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1167 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1168 != eSIR_SUCCESS)
1169 {
1170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1171 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1172 goto handle_failure;
1173 }
1174 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1175 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001176 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1177 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1178 tlvStruct->length = sizeof(tANI_U32);
1179 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1180 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1181 != eSIR_SUCCESS)
1182 {
1183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1184 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1185 goto handle_failure;
1186 }
1187 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1188 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001189 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1190 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1191 tlvStruct->length = sizeof(tANI_U32);
1192 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1193 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1194 != eSIR_SUCCESS)
1195 {
1196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1197 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1198 goto handle_failure;
1199 }
1200 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1201 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001202 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1203 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1204 tlvStruct->length = sizeof(tANI_U32);
1205 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1206 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1207 != eSIR_SUCCESS)
1208 {
1209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1210 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1211 goto handle_failure;
1212 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001213 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1214 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001215 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1216 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1217 tlvStruct->length = sizeof(tANI_U32);
1218 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1219 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1220 != eSIR_SUCCESS)
1221 {
1222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1223 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1224 goto handle_failure;
1225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001228 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1229 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1233 != eSIR_SUCCESS)
1234 {
1235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1236 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1237 goto handle_failure;
1238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001239 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1240 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1242 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1243 * into FW, so the parameters are added here.
1244 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1246 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1247 tlvStruct->length = sizeof(tANI_U32);
1248 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1249 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1250 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1251 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001252 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001259 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1260 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1261 tlvStruct->length = sizeof(tANI_U32);
1262 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1263 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1264 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1265 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001266 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1267 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1268 tlvStruct->length = sizeof(tANI_U32);
1269 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1270 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1271 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1272 + sizeof(tHalCfg) + tlvStruct->length) ;
1273
1274 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1275 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1276 tlvStruct->length = sizeof(tANI_U32);
1277 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1278 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1279 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1280 + sizeof(tHalCfg) + tlvStruct->length) ;
1281
1282 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1283 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1284 tlvStruct->length = sizeof(tANI_U32);
1285 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1286 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1287 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1288 + sizeof(tHalCfg) + tlvStruct->length) ;
1289
1290 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1291 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1292 tlvStruct->length = sizeof(tANI_U32);
1293 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1294 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1295 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1296 + sizeof(tHalCfg) + tlvStruct->length) ;
1297
1298 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1299 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1300 tlvStruct->length = sizeof(tANI_U32);
1301 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1302 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1303 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1304 + sizeof(tHalCfg) + tlvStruct->length) ;
1305
1306 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1307 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1308 tlvStruct->length = sizeof(tANI_U32);
1309 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1310 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1311 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1312 + sizeof(tHalCfg) + tlvStruct->length) ;
1313
1314 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1315 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1316 tlvStruct->length = sizeof(tANI_U32);
1317 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1318 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1319 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1320 + sizeof(tHalCfg) + tlvStruct->length) ;
1321
1322 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1323 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1324 tlvStruct->length = sizeof(tANI_U32);
1325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1326 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1327 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1328 + sizeof(tHalCfg) + tlvStruct->length) ;
1329
1330 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1331 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1332 tlvStruct->length = sizeof(tANI_U32);
1333 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1334 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1335 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1336 + sizeof(tHalCfg) + tlvStruct->length) ;
1337
1338 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1339 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1340 tlvStruct->length = sizeof(tANI_U32);
1341 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1342 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1343 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1344 + sizeof(tHalCfg) + tlvStruct->length) ;
1345
1346 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1347 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1348 tlvStruct->length = sizeof(tANI_U32);
1349 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1350 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1351 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1352 + sizeof(tHalCfg) + tlvStruct->length) ;
1353
1354 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1355 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1359 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1360 + sizeof(tHalCfg) + tlvStruct->length) ;
1361
1362 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1363 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1364 tlvStruct->length = sizeof(tANI_U32);
1365 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1366 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1367 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1368 + sizeof(tHalCfg) + tlvStruct->length) ;
1369
1370 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001371 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1372 tlvStruct->length = sizeof(tANI_U32);
1373 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1374 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1375 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1376 wcnssCompiledApiVersion.minor,
1377 wcnssCompiledApiVersion.version,
1378 wcnssCompiledApiVersion.revision);
1379 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1380 + sizeof(tHalCfg) + tlvStruct->length) ;
1381
Jeff Johnsond13512a2012-07-17 11:42:19 -07001382 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1383 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1384 tlvStruct->length = sizeof(tANI_U32);
1385 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1386 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1387 configDataValue ) != eSIR_SUCCESS)
1388 {
1389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1390 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1391 goto handle_failure;
1392 }
1393
1394 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1395 + sizeof(tHalCfg) + tlvStruct->length) ;
1396 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1397 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1398 tlvStruct->length = sizeof(tANI_U32);
1399 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1400 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1401 configDataValue ) != eSIR_SUCCESS)
1402 {
1403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1404 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1405 goto handle_failure;
1406 }
1407
1408 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1409 + sizeof(tHalCfg) + tlvStruct->length) ;
1410
1411 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1412 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1416 != eSIR_SUCCESS)
1417 {
1418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1419 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1420 goto handle_failure;
1421 }
1422
1423 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1424 + sizeof(tHalCfg) + tlvStruct->length) ;
1425
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001426 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1427 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1428 tlvStruct->length = sizeof(tANI_U32);
1429 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1430 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1431 != eSIR_SUCCESS)
1432 {
1433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1434 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1435 goto handle_failure;
1436 }
1437
1438 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1439 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001440#ifdef WLAN_SOFTAP_VSTA_FEATURE
1441 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1445 != eSIR_SUCCESS)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1448 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1449 goto handle_failure;
1450 }
1451
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454#endif
1455
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001456 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1457 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1458 tlvStruct->length = sizeof(tANI_U32);
1459 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1460
1461 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1462 != eSIR_SUCCESS)
1463 {
1464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1465 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1466 goto handle_failure;
1467 }
1468
1469 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1470 + sizeof(tHalCfg) + tlvStruct->length) ;
1471
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301472/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1473 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1474 tlvStruct->length = sizeof(tANI_U32);
1475 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1476 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1477 configDataValue ) != eSIR_SUCCESS)
1478 {
1479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1480 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1481 goto handle_failure;
1482 }
1483
1484 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1485 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301486#ifdef FEATURE_WLAN_TDLS
1487 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1488 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1489 tlvStruct->length = sizeof(tANI_U32);
1490 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1491 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1492 configDataValue ) != eSIR_SUCCESS)
1493 {
1494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1495 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1496 goto handle_failure;
1497 }
1498 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1499 + sizeof(tHalCfg) + tlvStruct->length) ;
1500
1501 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1502 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1503 tlvStruct->length = sizeof(tANI_U32);
1504 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1505 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1506 configDataValue ) != eSIR_SUCCESS)
1507 {
1508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1509 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1510 goto handle_failure;
1511 }
1512 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1513 + sizeof(tHalCfg) + tlvStruct->length) ;
1514 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1515 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1519 configDataValue ) != eSIR_SUCCESS)
1520 {
1521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1522 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1523 goto handle_failure;
1524 }
1525 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1526 + sizeof(tHalCfg) + tlvStruct->length) ;
1527 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1528 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1529 tlvStruct->length = sizeof(tANI_U32);
1530 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1531 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1532 configDataValue ) != eSIR_SUCCESS)
1533 {
1534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1535 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1536 goto handle_failure;
1537 }
1538 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1539 + sizeof(tHalCfg) + tlvStruct->length) ;
1540#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301541
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001542 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1543 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1544 tlvStruct->length = sizeof(tANI_U32);
1545 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1546 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1547 configDataValue ) != eSIR_SUCCESS)
1548 {
1549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1550 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1551 goto handle_failure;
1552 }
1553
1554 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1555 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001556
1557 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1558 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1559 tlvStruct->length = sizeof(tANI_U32);
1560 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1561 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1562 != eSIR_SUCCESS)
1563 {
1564 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1565 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1566 goto handle_failure;
1567 }
1568 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1569 + sizeof(tHalCfg) + tlvStruct->length));
1570
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301571 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1572 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1573 tlvStruct->length = sizeof(tANI_U32);
1574 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1575 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1576 configDataValue ) != eSIR_SUCCESS)
1577 {
1578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1579 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1580 goto handle_failure;
1581 }
1582
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585
Jeff Johnson295189b2012-06-20 16:38:30 -07001586 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001587#ifdef WLAN_DEBUG
1588 {
1589 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1591 "****** Dumping CFG TLV ***** ");
1592 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1593 {
1594 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1595 "%02x %02x %02x %02x %02x %02x %02x %02x",
1596 tlvStructStart[i],
1597 tlvStructStart[i+1],
1598 tlvStructStart[i+2],
1599 tlvStructStart[i+3],
1600 tlvStructStart[i+4],
1601 tlvStructStart[i+5],
1602 tlvStructStart[i+6],
1603 tlvStructStart[i+7]);
1604 }
1605 /* Dump the bytes in the last line*/
1606 for (; i < wdiStartParams->usConfigBufferLen; i++)
1607 {
1608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1609 "%02x ",tlvStructStart[i]);
1610 }
1611 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1612 "**************************** ");
1613 }
1614#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001616handle_failure:
1617 vos_mem_free(configParam);
1618 return VOS_STATUS_E_FAILURE;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_wdiCompleteCB
1622 * call the voss call back function
1623 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001624void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001625{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1627 tWDA_CbContext *wdaContext;
1628
1629 if(NULL == pWdaParams)
1630 {
1631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001632 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001633 VOS_ASSERT(0) ;
1634 return ;
1635 }
1636
1637 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1638
Jeff Johnson295189b2012-06-20 16:38:30 -07001639 if (NULL == wdaContext)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001642 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001643 return ;
1644 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001647 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001651 vos_mem_free(pWdaParams);
1652
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 if(WDI_STATUS_SUCCESS != status)
1654 {
1655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1656 "WDI stop callback returned failure" );
1657 VOS_ASSERT(0) ;
1658 }
1659 else
1660 {
1661 wdaContext->wdaState = WDA_STOP_STATE;
1662 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001663
Jeff Johnson295189b2012-06-20 16:38:30 -07001664 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665 vos_WDAComplete_cback(wdaContext->pVosContext);
1666
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 return ;
1668}
Jeff Johnson295189b2012-06-20 16:38:30 -07001669/*
1670 * FUNCTION: WDA_stop
1671 * call WDI_stop
1672 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001673VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1674{
1675 WDI_Status wdiStatus;
1676 VOS_STATUS status = VOS_STATUS_SUCCESS;
1677 WDI_StopReqParamsType *wdiStopReq;
1678 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001679 tWDA_ReqParams *pWdaParams ;
1680
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 if (NULL == pWDA)
1682 {
1683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001684 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001685 VOS_ASSERT(0);
1686 return VOS_STATUS_E_FAILURE;
1687 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001688 if (pWDA->wdiFailed == true)
1689 {
1690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001691 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001692 return VOS_STATUS_E_ALREADY;
1693 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001694
Jeff Johnson295189b2012-06-20 16:38:30 -07001695 /* FTM mode stay START_STATE */
1696 if( (WDA_READY_STATE != pWDA->wdaState) &&
1697 (WDA_INIT_STATE != pWDA->wdaState) &&
1698 (WDA_START_STATE != pWDA->wdaState) )
1699 {
1700 VOS_ASSERT(0);
1701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 wdiStopReq = (WDI_StopReqParamsType *)
1703 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1704 if(NULL == wdiStopReq)
1705 {
1706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001707 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 VOS_ASSERT(0);
1709 return VOS_STATUS_E_NOMEM;
1710 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001711
Jeff Johnson295189b2012-06-20 16:38:30 -07001712 wdiStopReq->wdiStopReason = reason;
1713 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001714
1715 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1716 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 {
1718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001720 VOS_ASSERT(0);
1721 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001722 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001724
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001725 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1726 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001727 {
1728 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001729 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001731
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001732 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1733 pWdaParams->wdaMsgParam = NULL;
1734 pWdaParams->pWdaContext = pWDA;
1735
Jeff Johnson295189b2012-06-20 16:38:30 -07001736 /* call WDI stop */
1737 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001738 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1739
Jeff Johnson295189b2012-06-20 16:38:30 -07001740 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1741 {
1742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1743 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1745 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 status = VOS_STATUS_E_FAILURE;
1747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001748 return status;
1749}
Jeff Johnson295189b2012-06-20 16:38:30 -07001750/*
1751 * FUNCTION: WDA_close
1752 * call WDI_close and free the WDA context
1753 */
1754VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1755{
Jeff Johnson43971f52012-07-17 12:26:56 -07001756 VOS_STATUS status = VOS_STATUS_SUCCESS;
1757 WDI_Status wstatus;
1758 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 if (NULL == wdaContext)
1761 {
1762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001763 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001764 return VOS_STATUS_E_FAILURE;
1765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1767 (WDA_STOP_STATE != wdaContext->wdaState))
1768 {
1769 VOS_ASSERT(0);
1770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001772 wstatus = WDI_Close();
1773 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 {
1775 status = VOS_STATUS_E_FAILURE;
1776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001777 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001778 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001779 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1780 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001781 {
1782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1783 "WDI Sync Event destroy failed - status = %d\n", status);
1784 status = VOS_STATUS_E_FAILURE;
1785 }
1786
Jeff Johnson43971f52012-07-17 12:26:56 -07001787 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001788 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001789 {
1790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1791 "VOS Event destroy failed - status = %d\n", status);
1792 status = VOS_STATUS_E_FAILURE;
1793 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001794 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001795 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001796 {
1797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1798 "VOS Event destroy failed - status = %d\n", status);
1799 status = VOS_STATUS_E_FAILURE;
1800 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001801 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001802 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 {
1804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1805 "VOS Event destroy failed - status = %d\n", status);
1806 status = VOS_STATUS_E_FAILURE;
1807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001808 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001809 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001810 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001811 {
1812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1813 "error in WDA close " );
1814 status = VOS_STATUS_E_FAILURE;
1815 }
1816 return status;
1817}
Jeff Johnson295189b2012-06-20 16:38:30 -07001818/*
1819 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1820 * returns 1 if the compiled version is greater than or equal to the input version
1821 */
1822
1823uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1824{
1825 VOS_STATUS status = VOS_STATUS_SUCCESS;
1826 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1827 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1830 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1831 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1832 (compiledVersion.revision >= revision)))
1833 return 1;
1834 else
1835 return 0;
1836}
Jeff Johnson295189b2012-06-20 16:38:30 -07001837/*
1838 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1839 * returns 1 if the compiled version is greater than or equal to the input version
1840 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001841uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1842{
1843 VOS_STATUS status = VOS_STATUS_SUCCESS;
1844 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1845 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1848 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1849 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1850 (reportedVersion.revision >= revision)))
1851 return 1;
1852 else
1853 return 0;
1854}
Jeff Johnson295189b2012-06-20 16:38:30 -07001855/*
1856 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1857 * Returns the version of the WCNSS WLAN API with which the HOST
1858 * device driver was compiled
1859 */
1860VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1861 tSirVersionType *pVersion)
1862{
1863 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001865 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001866 if ((NULL == pvosGCtx) || (NULL == pVersion))
1867 {
1868 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001869 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 VOS_ASSERT(0);
1871 return VOS_STATUS_E_FAILURE;
1872 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1874 if (NULL == pWDA )
1875 {
1876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001877 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 VOS_ASSERT(0);
1879 return VOS_STATUS_E_FAILURE;
1880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001881 *pVersion = pWDA->wcnssWlanCompiledVersion;
1882 return VOS_STATUS_SUCCESS;
1883}
Jeff Johnson295189b2012-06-20 16:38:30 -07001884/*
1885 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1886 * Returns the version of the WCNSS WLAN API with which the WCNSS
1887 * device driver was compiled
1888 */
1889VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1890 tSirVersionType *pVersion)
1891{
1892 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001893 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001894 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001895 if ((NULL == pvosGCtx) || (NULL == pVersion))
1896 {
1897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001898 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001899 VOS_ASSERT(0);
1900 return VOS_STATUS_E_FAILURE;
1901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1903 if (NULL == pWDA )
1904 {
1905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001906 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001907 VOS_ASSERT(0);
1908 return VOS_STATUS_E_FAILURE;
1909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001910 *pVersion = pWDA->wcnssWlanReportedVersion;
1911 return VOS_STATUS_SUCCESS;
1912}
Jeff Johnson295189b2012-06-20 16:38:30 -07001913/*
1914 * FUNCTION: WDA_GetWcnssSoftwareVersion
1915 * Returns the WCNSS Software version string
1916 */
1917VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1918 tANI_U8 *pVersion,
1919 tANI_U32 versionBufferSize)
1920{
1921 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001923 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 if ((NULL == pvosGCtx) || (NULL == pVersion))
1925 {
1926 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001927 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001928 VOS_ASSERT(0);
1929 return VOS_STATUS_E_FAILURE;
1930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1932 if (NULL == pWDA )
1933 {
1934 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001935 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 VOS_ASSERT(0);
1937 return VOS_STATUS_E_FAILURE;
1938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1940 return VOS_STATUS_SUCCESS;
1941}
Jeff Johnson295189b2012-06-20 16:38:30 -07001942/*
1943 * FUNCTION: WDA_GetWcnssHardwareVersion
1944 * Returns the WCNSS Hardware version string
1945 */
1946VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1947 tANI_U8 *pVersion,
1948 tANI_U32 versionBufferSize)
1949{
1950 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001952 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 if ((NULL == pvosGCtx) || (NULL == pVersion))
1954 {
1955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001956 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 VOS_ASSERT(0);
1958 return VOS_STATUS_E_FAILURE;
1959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001960 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1961 if (NULL == pWDA )
1962 {
1963 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001964 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001965 VOS_ASSERT(0);
1966 return VOS_STATUS_E_FAILURE;
1967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1969 return VOS_STATUS_SUCCESS;
1970}
Jeff Johnson295189b2012-06-20 16:38:30 -07001971/*
1972 * FUNCTION: WDA_WniCfgDnld
1973 * Trigger CFG Download
1974 */
1975VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1976{
1977 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 v_VOID_t *pFileImage = NULL;
1980 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 v_VOID_t *pCfgBinary = NULL;
1982 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001983 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001984
Jeff Johnson295189b2012-06-20 16:38:30 -07001985 if (NULL == pMac )
1986 {
1987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001988 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 VOS_ASSERT(0);
1990 return VOS_STATUS_E_FAILURE;
1991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001992 /* get the number of bytes in the CFG Binary... */
1993 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1994 &cbFileImageSize );
1995 if ( VOS_STATUS_E_NOMEM != vosStatus )
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1998 "Error obtaining binary size" );
1999 goto fail;
2000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 // malloc a buffer to read in the Configuration binary file.
2002 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002003 if ( NULL == pFileImage )
2004 {
2005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2006 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2007 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 vosStatus = VOS_STATUS_E_NOMEM;
2009 goto fail;
2010 }
2011
2012 /* Get the entire CFG file image... */
2013 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2014 &cbFileImageSize );
2015 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2018 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2019 cbFileImageSize );
2020 goto fail;
2021 }
2022
2023 /*
2024 * Validate the binary image. This function will return a pointer
2025 * and length where the CFG binary is located within the binary image file.
2026 */
2027 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2028 &pCfgBinary, &cbCfgBinarySize );
2029 if ( VOS_FALSE == bStatus )
2030 {
2031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2032 "Error: Cannot find STA CFG in binary image file" );
2033 vosStatus = VOS_STATUS_E_FAILURE;
2034 goto fail;
2035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 /*
2037 * TODO: call the config download function
2038 * for now calling the existing cfg download API
2039 */
2040 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002041 vosStatus = VOS_STATUS_SUCCESS;
2042
2043 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002044
2045fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002046 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 return vosStatus;
2048}
Jeff Johnson295189b2012-06-20 16:38:30 -07002049/* -----------------------------------------------------------------
2050 * WDI interface
2051 * -----------------------------------------------------------------
2052 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002053/*
2054 * FUNCTION: WDA_suspendDataTxCallback
2055 * call back function called from TL after suspend Transmission
2056 */
2057VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2058 v_U8_t* ucSTAId,
2059 VOS_STATUS vosStatus)
2060{
2061 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002063 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 if (NULL == pWDA )
2065 {
2066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002067 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 VOS_ASSERT(0);
2069 return VOS_STATUS_E_FAILURE;
2070 }
2071 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2072 {
2073 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2074 }
2075 else
2076 {
2077 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2078 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 /* Trigger the event to bring the WDA TL suspend function to come
2080 * out of wait*/
2081 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2082 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2083 {
2084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2085 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002087 /* If TL suspended had timedout before this callback was called, resume back
2088 * TL.*/
2089 if (pWDA->txSuspendTimedOut)
2090 {
2091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2092 "Late TLSuspendCallback, resuming TL back again\n");
2093 WDA_ResumeDataTx(pWDA);
2094 pWDA->txSuspendTimedOut = FALSE;
2095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 return VOS_STATUS_SUCCESS;
2097}
Jeff Johnson295189b2012-06-20 16:38:30 -07002098/*
2099 * FUNCTION: WDA_suspendDataTx
2100 * Update TL to suspend the data Transmission
2101 */
2102VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2103{
2104 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2105 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106
2107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002108 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002109 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 if (pWDA->txSuspendTimedOut)
2111 {
2112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2113 "TL suspend timedout previously, CB not called yet\n");
2114 return status;
2115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 /* Reset the event to be not signalled */
2117 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2118 if(!VOS_IS_STATUS_SUCCESS(status))
2119 {
2120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2121 "VOS Event reset failed - status = %d\n",status);
2122 return VOS_STATUS_E_FAILURE;
2123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002125 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 WDA_SuspendDataTxCallback);
2127 if(status != VOS_STATUS_SUCCESS)
2128 {
2129 return status;
2130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 /* Wait for the event to be set by the TL, to get the response of
2132 * suspending the TX queues, this event should be set by the Callback
2133 * function called by TL*/
2134 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2135 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2136 if(!VOS_IS_STATUS_SUCCESS(status))
2137 {
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2139 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002140 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 /* Set this flag to true when TL suspend times out, so that when TL
2142 * suspend eventually happens and calls the callback, TL can be resumed
2143 * right away by looking at this flag when true.*/
2144 pWDA->txSuspendTimedOut = TRUE;
2145 }
2146 else
2147 {
2148 pWDA->txSuspendTimedOut = FALSE;
2149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2151 {
2152 status = VOS_STATUS_SUCCESS;
2153 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 return status;
2155}
Jeff Johnson295189b2012-06-20 16:38:30 -07002156/*
2157 * FUNCTION: WDA_resumeDataTx
2158 * Update TL to resume the data Transmission
2159 */
2160VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2161{
2162 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002163
2164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002165 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002166
2167 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 return status;
2169}
Jeff Johnson295189b2012-06-20 16:38:30 -07002170/*
2171 * FUNCTION: WDA_InitScanReqCallback
2172 * Trigger Init SCAN callback
2173 */
2174void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2175{
2176 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2177 tWDA_CbContext *pWDA;
2178 tInitScanParams *pWDA_ScanParam ;
2179 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 if(NULL == pWdaParams)
2183 {
2184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002186 VOS_ASSERT(0) ;
2187 return ;
2188 }
2189 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2190 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 if(NULL == pWDA_ScanParam)
2192 {
2193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002194 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002195 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2197 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 return ;
2199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 if(WDI_STATUS_SUCCESS != wdiStatus)
2201 {
2202 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 if(VOS_STATUS_SUCCESS != status)
2204 {
2205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002206 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 }
2208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 /* free WDI command buffer */
2210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002212
Jeff Johnson295189b2012-06-20 16:38:30 -07002213
2214 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002215 /* without converting the Status to Failure or Success Just
2216 pass the same status to lim */
2217 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 /* send SCAN RSP message back to PE */
2219 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 return ;
2221}
2222
2223/*
2224 * FUNCTION: WDA_ProcessInitScanReq
2225 * Trigger Init SCAN in DAL
2226 */
2227VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2228 tInitScanParams *initScanParams)
2229{
2230 WDI_Status status = WDI_STATUS_SUCCESS ;
2231 WDI_InitScanReqParamsType *wdiInitScanParam =
2232 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2233 sizeof(WDI_InitScanReqParamsType)) ;
2234 tWDA_ReqParams *pWdaParams;
2235 tANI_U8 i = 0;
2236
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 if(NULL == wdiInitScanParam)
2240 {
2241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002242 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002243 VOS_ASSERT(0);
2244 return VOS_STATUS_E_NOMEM;
2245 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2247 if(NULL == pWdaParams)
2248 {
2249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 VOS_ASSERT(0);
2252 vos_mem_free(wdiInitScanParam);
2253 return VOS_STATUS_E_NOMEM;
2254 }
2255
2256 /* Copy init Scan params to WDI structure */
2257 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2258 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2259 sizeof(tSirMacAddr)) ;
2260 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2261 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2262 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002263 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2264 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2266 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002267 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2268 {
2269 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2270 initScanParams->scanEntry.bssIdx[i] ;
2271 }
2272
2273 /* if Frame length, copy macMgmtHdr or WDI structure */
2274 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2275 {
2276 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2277 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2278 }
2279 wdiInitScanParam->wdiReqStatusCB = NULL ;
2280
Jeff Johnson295189b2012-06-20 16:38:30 -07002281 /* Store Init Req pointer, as this will be used for response */
2282 pWdaParams->pWdaContext = pWDA;
2283 pWdaParams->wdaMsgParam = initScanParams;
2284 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /* first try to suspend TX */
2286 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 if(WDI_STATUS_SUCCESS != status)
2288 {
2289 goto handleWdiFailure;
2290 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 /* call DAL API to pass init scan request to DAL */
2292 status = WDI_InitScanReq(wdiInitScanParam,
2293 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 if(IS_WDI_STATUS_FAILURE(status))
2295 {
2296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2297 "error in WDA Init Scan, Resume Tx " );
2298 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002299 VOS_ASSERT(0) ;
2300
2301 goto handleWdiFailure;
2302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304handleWdiFailure:
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2306 "Failure in WDI Api, free all the memory " );
2307 /* free WDI command buffer */
2308 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2309 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* send Failure to PE */
2311 initScanParams->status = eSIR_FAILURE ;
2312 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 return CONVERT_WDI2VOS_STATUS(status) ;
2314}
2315
Jeff Johnson295189b2012-06-20 16:38:30 -07002316/*
2317 * FUNCTION: WDA_StartScanReqCallback
2318 * send Start SCAN RSP back to PE
2319 */
2320void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2321 void* pUserData)
2322{
2323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2324 tWDA_CbContext *pWDA;
2325 tStartScanParams *pWDA_ScanParam;
2326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002327 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 if(NULL == pWdaParams)
2329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002331 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 VOS_ASSERT(0) ;
2333 return ;
2334 }
2335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2336 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002337 if(NULL == pWDA_ScanParam)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002342 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 return ;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2346 {
2347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002348 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002350 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002351 return ;
2352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2354 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002355
Jeff Johnson295189b2012-06-20 16:38:30 -07002356
2357 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002358 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 /* send SCAN RSP message back to PE */
2360 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 return ;
2362}
2363
Jeff Johnson295189b2012-06-20 16:38:30 -07002364/*
2365 * FUNCTION: WDA_ProcessStartScanReq
2366 * Trigger start SCAN in WDI
2367 */
2368VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2369 tStartScanParams *startScanParams)
2370{
2371 WDI_Status status = WDI_STATUS_SUCCESS;
2372 WDI_StartScanReqParamsType *wdiStartScanParams =
2373 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2374 sizeof(WDI_StartScanReqParamsType)) ;
2375 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002378 if(NULL == wdiStartScanParams)
2379 {
2380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002382 VOS_ASSERT(0);
2383 return VOS_STATUS_E_NOMEM;
2384 }
2385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2386 if(NULL == pWdaParams)
2387 {
2388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 VOS_ASSERT(0);
2391 vos_mem_free(wdiStartScanParams);
2392 return VOS_STATUS_E_NOMEM;
2393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 /* Copy init Scan params to WDI structure */
2395 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2396 wdiStartScanParams->wdiReqStatusCB = NULL ;
2397
Jeff Johnson295189b2012-06-20 16:38:30 -07002398 /* Store Init Req pointer, as this will be used for response */
2399 /* store Params pass it to WDI */
2400 pWdaParams->pWdaContext = pWDA;
2401 pWdaParams->wdaMsgParam = startScanParams;
2402 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* call DAL API to pass init scan request to DAL */
2404 status = WDI_StartScanReq(wdiStartScanParams,
2405 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 /* failure returned by WDI API */
2407 if(IS_WDI_STATUS_FAILURE(status))
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2410 "Failure in Start Scan WDI API, free all the memory "
2411 "It should be due to previous abort scan." );
2412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2413 vos_mem_free(pWdaParams) ;
2414 startScanParams->status = eSIR_FAILURE ;
2415 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 return CONVERT_WDI2VOS_STATUS(status) ;
2418}
Jeff Johnson295189b2012-06-20 16:38:30 -07002419/*
2420 * FUNCTION: WDA_EndScanReqCallback
2421 * END SCAN callback
2422 */
2423void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2424{
2425 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2426 tWDA_CbContext *pWDA;
2427 tEndScanParams *endScanParam;
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002429 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002430 if(NULL == pWdaParams)
2431 {
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 VOS_ASSERT(0) ;
2435 return ;
2436 }
2437 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2438 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 if(NULL == endScanParam)
2440 {
2441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002442 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2445 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 return ;
2447 }
2448
2449 /* Free WDI command buffer */
2450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2451 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002452 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002453 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /* send response back to PE */
2455 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2456 return ;
2457}
2458
Jeff Johnson295189b2012-06-20 16:38:30 -07002459/*
2460 * FUNCTION: WDA_ProcessEndScanReq
2461 * Trigger END SCAN in WDI
2462 */
2463VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2464 tEndScanParams *endScanParams)
2465{
2466 WDI_Status status = WDI_STATUS_SUCCESS;
2467 WDI_EndScanReqParamsType *wdiEndScanParams =
2468 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2469 sizeof(WDI_EndScanReqParamsType)) ;
2470 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002472 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 if(NULL == wdiEndScanParams)
2474 {
2475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002476 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002477 VOS_ASSERT(0);
2478 return VOS_STATUS_E_NOMEM;
2479 }
2480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2481 if(NULL == pWdaParams)
2482 {
2483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002484 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 VOS_ASSERT(0);
2486 vos_mem_free(wdiEndScanParams);
2487 return VOS_STATUS_E_NOMEM;
2488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 /* Copy init Scan params to WDI structure */
2490 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2491 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 /* Store Init Req pointer, as this will be used for response */
2493 /* store Params pass it to WDI */
2494 pWdaParams->pWdaContext = pWDA;
2495 pWdaParams->wdaMsgParam = endScanParams;
2496 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 /* call DAL API to pass init scan request to DAL */
2498 status = WDI_EndScanReq(wdiEndScanParams,
2499 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 if(IS_WDI_STATUS_FAILURE(status))
2501 {
2502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2503 "Failure in End Scan WDI API, free all the memory "
2504 "It should be due to previous abort scan." );
2505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2506 vos_mem_free(pWdaParams) ;
2507 endScanParams->status = eSIR_FAILURE ;
2508 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002510 return CONVERT_WDI2VOS_STATUS(status) ;
2511}
Jeff Johnson295189b2012-06-20 16:38:30 -07002512/*
2513 * FUNCTION: WDA_FinishScanReqCallback
2514 * Trigger Finish SCAN callback
2515 */
2516void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2517{
2518 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2519 tWDA_CbContext *pWDA;
2520 tFinishScanParams *finishScanParam;
2521 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002524 if(NULL == pWdaParams)
2525 {
2526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 VOS_ASSERT(0) ;
2529 return ;
2530 }
2531
2532 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2533 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 if(NULL == finishScanParam)
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2540 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002541 return ;
2542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2544 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 /*
2546 * Now Resume TX, if we reached here means, TX is already suspended, we
2547 * have to resume it unconditionaly
2548 */
2549 status = WDA_ResumeDataTx(pWDA) ;
2550
2551 if(VOS_STATUS_SUCCESS != status)
2552 {
2553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002554 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002556 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2558 return ;
2559}
Jeff Johnson295189b2012-06-20 16:38:30 -07002560/*
2561 * FUNCTION: WDA_ProcessFinshScanReq
2562 * Trigger Finish SCAN in WDI
2563 */
2564VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2565 tFinishScanParams *finishScanParams)
2566{
2567 WDI_Status status = WDI_STATUS_SUCCESS;
2568 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2569 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2570 sizeof(WDI_FinishScanReqParamsType)) ;
2571 tWDA_ReqParams *pWdaParams ;
2572 tANI_U8 i = 0;
2573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 if(NULL == wdiFinishScanParams)
2576 {
2577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 VOS_ASSERT(0);
2580 return VOS_STATUS_E_NOMEM;
2581 }
2582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2583 if(NULL == pWdaParams)
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002587 VOS_ASSERT(0);
2588 vos_mem_free(wdiFinishScanParams);
2589 return VOS_STATUS_E_NOMEM;
2590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002591 /* Copy init Scan params to WDI structure */
2592 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2593 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2594 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002595 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2596 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2597 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2598 finishScanParams->frameLength ;
2599 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2600 finishScanParams->currentOperChannel ;
2601 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2602 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2603 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2605 {
2606 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2607 finishScanParams->scanEntry.bssIdx[i] ;
2608 }
2609
2610
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 /* if Frame length, copy macMgmtHdr ro WDI structure */
2612 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2613 {
2614 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2615 &finishScanParams->macMgmtHdr,
2616 sizeof(WDI_MacMgmtHdr)) ;
2617 }
2618 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 /* Store Init Req pointer, as this will be used for response */
2620 /* store Params pass it to WDI */
2621 pWdaParams->pWdaContext = pWDA;
2622 pWdaParams->wdaMsgParam = finishScanParams;
2623 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 /* call DAL API to pass init scan request to DAL */
2625 status = WDI_FinishScanReq(wdiFinishScanParams,
2626 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002627
Jeff Johnson295189b2012-06-20 16:38:30 -07002628
2629 /*
2630 * WDI API returns failure..
2631 */
2632 if(IS_WDI_STATUS_FAILURE( status))
2633 {
2634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2635 "Failure in Finish Scan WDI API, free all the memory " );
2636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2637 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 finishScanParams->status = eSIR_FAILURE ;
2639 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2640 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 return CONVERT_WDI2VOS_STATUS(status) ;
2642}
Jeff Johnson295189b2012-06-20 16:38:30 -07002643/*---------------------------------------------------------------------
2644 * ASSOC API's
2645 *---------------------------------------------------------------------
2646 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002647/*
2648 * FUNCTION: WDA_JoinReqCallback
2649 * Trigger Init SCAN callback
2650 */
2651void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2652{
2653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2654 tWDA_CbContext *pWDA;
2655 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002657 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 if(NULL == pWdaParams)
2659 {
2660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002661 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 VOS_ASSERT(0) ;
2663 return ;
2664 }
2665 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2666 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2668 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669 /* reset macBSSID */
2670 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002671 /* reset macSTASelf */
2672 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002673 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002675 return ;
2676}
Jeff Johnson295189b2012-06-20 16:38:30 -07002677/*
2678 * FUNCTION: WDA_ProcessJoinReq
2679 * Trigger Join REQ in WDI
2680 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002681VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2682 tSwitchChannelParams* joinReqParam)
2683{
2684 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 WDI_JoinReqParamsType *wdiJoinReqParam =
2686 (WDI_JoinReqParamsType *)vos_mem_malloc(
2687 sizeof(WDI_JoinReqParamsType)) ;
2688 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002690 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 if(NULL == wdiJoinReqParam)
2692 {
2693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002695 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002696 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 return VOS_STATUS_E_NOMEM;
2698 }
2699 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2700 if(NULL == pWdaParams)
2701 {
2702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002703 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_ASSERT(0);
2705 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002706 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 return VOS_STATUS_E_NOMEM;
2708 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002709
2710 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2711 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2712 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2713 {
2714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2715 "%s: received join request when BSSID or self-STA is NULL "
2716 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002717 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002718 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2719 VOS_ASSERT(0);
2720 vos_mem_free(wdiJoinReqParam);
2721 vos_mem_free(pWdaParams);
2722 joinReqParam->status = eSIR_FAILURE ;
2723 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2724 return VOS_STATUS_E_INVAL;
2725 }
2726
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 /* copy the BSSID for pWDA */
2728 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2729 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002730 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2731 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002732 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2733 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002734#ifdef WLAN_FEATURE_VOWIFI
2735 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2736 joinReqParam->maxTxPower ;
2737#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002738 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2739 joinReqParam->localPowerConstraint ;
2740#endif
2741 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2742 joinReqParam->secondaryChannelOffset ;
2743 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2744
2745 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002746 /* Store Init Req pointer, as this will be used for response */
2747 /* store Params pass it to WDI */
2748 pWdaParams->pWdaContext = pWDA;
2749 pWdaParams->wdaMsgParam = joinReqParam;
2750 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 status = WDI_JoinReq(wdiJoinReqParam,
2752 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 if(IS_WDI_STATUS_FAILURE(status))
2754 {
2755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2756 "Failure in Join WDI API, free all the memory " );
2757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2758 vos_mem_free(pWdaParams) ;
2759 joinReqParam->status = eSIR_FAILURE ;
2760 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 return CONVERT_WDI2VOS_STATUS(status) ;
2763}
Jeff Johnson295189b2012-06-20 16:38:30 -07002764/*
2765 * FUNCTION: WDA_SwitchChannelReqCallback
2766 * send Switch channel RSP back to PE
2767 */
2768void WDA_SwitchChannelReqCallback(
2769 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2770{
2771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2772 tWDA_CbContext *pWDA;
2773 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002775 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(NULL == pWdaParams)
2777 {
2778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002779 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 VOS_ASSERT(0) ;
2781 return ;
2782 }
2783 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2784 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2785
2786#ifdef WLAN_FEATURE_VOWIFI
2787 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2788#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2790 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002792 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 return ;
2795}
Jeff Johnson295189b2012-06-20 16:38:30 -07002796/*
2797 * FUNCTION: WDA_ProcessChannelSwitchReq
2798 * Request to WDI to switch channel REQ params.
2799 */
2800VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2801 tSwitchChannelParams *pSwitchChanParams)
2802{
2803 WDI_Status status = WDI_STATUS_SUCCESS ;
2804 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2805 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2806 sizeof(WDI_SwitchChReqParamsType)) ;
2807 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 if(NULL == wdiSwitchChanParam)
2811 {
2812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 VOS_ASSERT(0);
2815 return VOS_STATUS_E_NOMEM;
2816 }
2817 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2818 if(NULL == pWdaParams)
2819 {
2820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_ASSERT(0);
2823 vos_mem_free(wdiSwitchChanParam);
2824 return VOS_STATUS_E_NOMEM;
2825 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2827#ifndef WLAN_FEATURE_VOWIFI
2828 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2829 pSwitchChanParams->localPowerConstraint;
2830#endif
2831 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2832 pSwitchChanParams->secondaryChannelOffset;
2833 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 /* Store req pointer, as this will be used for response */
2835 /* store Params pass it to WDI */
2836 pWdaParams->pWdaContext = pWDA;
2837 pWdaParams->wdaMsgParam = pSwitchChanParams;
2838 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839#ifdef WLAN_FEATURE_VOWIFI
2840 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2841 = pSwitchChanParams->maxTxPower;
2842 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2843 pSwitchChanParams ->selfStaMacAddr,
2844 sizeof(tSirMacAddr));
2845#endif
2846 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2847 pSwitchChanParams->bssId,
2848 sizeof(tSirMacAddr));
2849
2850 status = WDI_SwitchChReq(wdiSwitchChanParam,
2851 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 if(IS_WDI_STATUS_FAILURE(status))
2853 {
2854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2855 "Failure in process channel switch Req WDI API, free all the memory " );
2856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2857 vos_mem_free(pWdaParams) ;
2858 pSwitchChanParams->status = eSIR_FAILURE ;
2859 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 return CONVERT_WDI2VOS_STATUS(status) ;
2862}
Jeff Johnson295189b2012-06-20 16:38:30 -07002863/*
2864 * FUNCTION: WDA_ConfigBssReqCallback
2865 * config BSS Req Callback, called by WDI
2866 */
2867void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2868 ,void* pUserData)
2869{
2870 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2871 tWDA_CbContext *pWDA;
2872 tAddBssParams *configBssReqParam;
2873 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002875 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 if(NULL == pWdaParams)
2877 {
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 VOS_ASSERT(0) ;
2881 return ;
2882 }
2883 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2884 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2885 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002887 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2889 {
2890 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2891 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002892 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2893 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2894 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2895
2896 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2897 {
2898 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2899 {
2900 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2901 staConfigBssParam->staType = STA_ENTRY_BSSID;
2902 }
2903 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2904 (staConfigBssParam->staType == STA_ENTRY_SELF))
2905 {
2906 /* This is the 1st add BSS Req for the BTAMP STA */
2907 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2908 staConfigBssParam->staType = STA_ENTRY_BSSID;
2909 }
2910 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2911 (staConfigBssParam->staType == STA_ENTRY_PEER))
2912 {
2913 /* This is the 2nd ADD BSS Request that is sent
2914 * on the BTAMP STA side. The Sta type is
2915 * set to STA_ENTRY_PEER here.*/
2916 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2917 }
2918 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2919 (staConfigBssParam->staType == STA_ENTRY_SELF))
2920 {
2921 /* statype is already set by PE.
2922 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2923 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2924 staConfigBssParam->staType = STA_ENTRY_BSSID;
2925 }
2926 else
2927 {
2928 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2929 staConfigBssParam->staType = STA_ENTRY_PEER;
2930 }
2931 }
2932 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2933 {
2934 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2935 staConfigBssParam->staType = STA_ENTRY_SELF;
2936 }
2937 else
2938 {
2939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2940 "Invalid operation mode specified");
2941 VOS_ASSERT(0);
2942 }
2943
2944 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002946 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2949 sizeof(tSirMacAddr));
2950 staConfigBssParam->txChannelWidthSet =
2951 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2953 staConfigBssParam->htCapable)
2954 {
2955 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2956 wdiConfigBssRsp->ucBSSIdx;
2957 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2958 WDA_VALID_STA_INDEX ;
2959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2961 wdiConfigBssRsp->ucBSSIdx,
2962 wdiConfigBssRsp->ucSTAIdx))
2963 {
2964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002965 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 VOS_ASSERT(0) ;
2967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2969 {
2970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002971 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_ASSERT(0) ;
2973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002974#ifdef WLAN_FEATURE_VOWIFI
2975 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2976#endif
2977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2979 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002980 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 return ;
2982}
Jeff Johnson295189b2012-06-20 16:38:30 -07002983/*
2984 * FUNCTION: WDA_UpdateEdcaParamsForAC
2985 * Update WDI EDCA params with PE edca params
2986 */
2987void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2988 WDI_EdcaParamRecord *wdiEdcaParam,
2989 tSirMacEdcaParamRecord *macEdcaParam)
2990{
2991 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2992 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2993 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2994 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2995 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2996 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2997}
Jeff Johnson295189b2012-06-20 16:38:30 -07002998/*
2999 * FUNCTION: WDA_ProcessConfigBssReq
3000 * Configure BSS before starting Assoc with AP
3001 */
3002VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3003 tAddBssParams* configBssReqParam)
3004{
3005 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303006 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003009 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303010 if (NULL == configBssReqParam)
3011 {
3012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3013 "%s: configBssReqParam is NULL", __func__);
3014 return VOS_STATUS_E_INVAL;
3015 }
3016
3017 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3018 sizeof(WDI_ConfigBSSReqParamsType)) ;
3019
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 if(NULL == wdiConfigBssReqParam)
3021 {
3022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 VOS_ASSERT(0);
3025 return VOS_STATUS_E_NOMEM;
3026 }
3027 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3028 if(NULL == pWdaParams)
3029 {
3030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 VOS_ASSERT(0);
3033 vos_mem_free(wdiConfigBssReqParam);
3034 return VOS_STATUS_E_NOMEM;
3035 }
Kiran4a17ebe2013-01-31 10:43:43 -08003036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3037 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3040 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 /* Store Init Req pointer, as this will be used for response */
3042 /* store Params pass it to WDI */
3043 pWdaParams->pWdaContext = pWDA;
3044 pWdaParams->wdaMsgParam = configBssReqParam;
3045 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3047 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 if(IS_WDI_STATUS_FAILURE(status))
3049 {
3050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3051 "Failure in Config BSS WDI API, free all the memory " );
3052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3053 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 return CONVERT_WDI2VOS_STATUS(status) ;
3058}
Jeff Johnson295189b2012-06-20 16:38:30 -07003059#ifdef ENABLE_HAL_COMBINED_MESSAGES
3060/*
3061 * FUNCTION: WDA_PostAssocReqCallback
3062 * Post ASSOC req callback, send RSP back to PE
3063 */
3064void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3065 void* pUserData)
3066{
3067 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3068 tPostAssocParams *postAssocReqParam =
3069 (tPostAssocParams *)pWDA->wdaMsgParam ;
3070 /*STA context within the BSS Params*/
3071 tAddStaParams *staPostAssocParam =
3072 &postAssocReqParam->addBssParams.staContext ;
3073 /*STA Params for self STA*/
3074 tAddStaParams *selfStaPostAssocParam =
3075 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003079 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3081 {
3082 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3083 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3084 sizeof(tSirMacAddr)) ;
3085 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3086 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3087 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3089 }
3090 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3091 pWDA->wdaWdiApiMsgParam = NULL;
3092 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 return ;
3095}
Jeff Johnson295189b2012-06-20 16:38:30 -07003096/*
3097 * FUNCTION: WDA_ProcessPostAssocReq
3098 * Trigger POST ASSOC processing in WDI
3099 */
3100VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3101 tPostAssocParams *postAssocReqParam)
3102{
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 WDI_Status status = WDI_STATUS_SUCCESS ;
3104
3105 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3106 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3107 sizeof(WDI_PostAssocReqParamsType)) ;
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(NULL == wdiPostAssocReqParam)
3112 {
3113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 VOS_ASSERT(0);
3116 return VOS_STATUS_E_NOMEM;
3117 }
3118
3119 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3120 {
3121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003122 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 VOS_ASSERT(0);
3124 return VOS_STATUS_E_FAILURE;
3125 }
3126
Jeff Johnson295189b2012-06-20 16:38:30 -07003127 /* update BSS params into WDI structure */
3128 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3129 &postAssocReqParam->addBssParams) ;
3130 /* update STA params into WDI structure */
3131 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3132 &postAssocReqParam->addStaParams) ;
3133
3134 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3135 postAssocReqParam->addBssParams.highPerformance;
3136 WDA_UpdateEdcaParamsForAC(pWDA,
3137 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3138 &postAssocReqParam->addBssParams.acbe);
3139 WDA_UpdateEdcaParamsForAC(pWDA,
3140 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3141 &postAssocReqParam->addBssParams.acbk);
3142 WDA_UpdateEdcaParamsForAC(pWDA,
3143 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3144 &postAssocReqParam->addBssParams.acvi);
3145 WDA_UpdateEdcaParamsForAC(pWDA,
3146 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3147 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 /* Store Init Req pointer, as this will be used for response */
3149 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 /* store Params pass it to WDI */
3151 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003152 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3153 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 if(IS_WDI_STATUS_FAILURE(status))
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3157 "Failure in Post Assoc WDI API, free all the memory " );
3158 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3159 pWDA->wdaWdiApiMsgParam = NULL;
3160 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3163 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 return CONVERT_WDI2VOS_STATUS(status) ;
3165}
3166#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003167/*
3168 * FUNCTION: WDA_AddStaReqCallback
3169 * ADD STA req callback, send RSP back to PE
3170 */
3171void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3172 void* pUserData)
3173{
3174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3175 tWDA_CbContext *pWDA;
3176 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003178 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(NULL == pWdaParams)
3180 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 VOS_ASSERT(0) ;
3183 return ;
3184 }
3185 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3186 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003187 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003188 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3190 {
3191 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3192 /*TODO: UMAC structure doesn't have these fields*/
3193 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3194 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3195 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3196 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3197 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3198 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003199#ifdef FEATURE_WLAN_TDLS
3200 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3201 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3202#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003204#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 {
3206 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3207 wdiConfigStaRsp->ucBssIdx;
3208 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3209 WDA_VALID_STA_INDEX ;
3210 }
3211 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3212 {
3213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003214 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 VOS_ASSERT(0) ;
3216 return ;
3217 }
3218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003222 return ;
3223}
Jeff Johnson295189b2012-06-20 16:38:30 -07003224/*
3225 * FUNCTION: WDA_ConfigStaReq
3226 * Trigger Config STA processing in WDI
3227 */
3228VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3229 tAddStaParams *addStaReqParam)
3230{
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3233 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3234 sizeof(WDI_ConfigSTAReqParamsType)) ;
3235 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003237 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 if(NULL == wdiConfigStaReqParam)
3239 {
3240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 VOS_ASSERT(0);
3243 return VOS_STATUS_E_NOMEM;
3244 }
3245 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3246 if(NULL == pWdaParams)
3247 {
3248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003249 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 VOS_ASSERT(0);
3251 vos_mem_free(wdiConfigStaReqParam);
3252 return VOS_STATUS_E_NOMEM;
3253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003255 /* update STA params into WDI structure */
3256 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3257 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 /* Store Init Req pointer, as this will be used for response */
3259 /* store Params pass it to WDI */
3260 pWdaParams->pWdaContext = pWDA;
3261 pWdaParams->wdaMsgParam = addStaReqParam;
3262 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3264 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 if(IS_WDI_STATUS_FAILURE(status))
3266 {
3267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3268 "Failure in Config STA WDI API, free all the memory " );
3269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3270 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 return CONVERT_WDI2VOS_STATUS(status) ;
3275}
Jeff Johnson295189b2012-06-20 16:38:30 -07003276/*
3277 * FUNCTION: WDA_DelBSSReqCallback
3278 * Dens DEL BSS RSP back to PE
3279 */
3280void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3281 void* pUserData)
3282{
3283 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3284 tWDA_CbContext *pWDA;
3285 tDeleteBssParams *delBssReqParam;
3286 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003288 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 if(NULL == pWdaParams)
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 VOS_ASSERT(0) ;
3294 return ;
3295 }
3296 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3297 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003298 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003299 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3300 {
3301 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3302 sizeof(tSirMacAddr)) ;
3303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3305 {
3306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003307 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 VOS_ASSERT(0) ;
3309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0) ;
3315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0) ;
3321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3323 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003324 /* reset the the system role*/
3325 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3326
3327 /* Reset the BA related information */
3328 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3329 {
3330 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3331 {
3332 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3333 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3334 /* Reset framesTxed counters here */
3335 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3336 {
3337 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3338 }
3339 }
3340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 return ;
3343}
3344
Jeff Johnson295189b2012-06-20 16:38:30 -07003345/*
3346 * FUNCTION: WDA_ProcessDelBssReq
3347 * Init DEL BSS req with WDI
3348 */
3349VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3350 tDeleteBssParams *delBssParam)
3351{
3352 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3354 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3355 sizeof(WDI_DelBSSReqParamsType)) ;
3356 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003358 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 if(NULL == wdiDelBssReqParam)
3360 {
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003362 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003363 VOS_ASSERT(0);
3364 return VOS_STATUS_E_NOMEM;
3365 }
3366 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3367 if(NULL == pWdaParams)
3368 {
3369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003371 VOS_ASSERT(0);
3372 vos_mem_free(wdiDelBssReqParam);
3373 return VOS_STATUS_E_NOMEM;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3376 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3377
3378 /* Store Init Req pointer, as this will be used for response */
3379 /* store Params pass it to WDI */
3380 pWdaParams->pWdaContext = pWDA;
3381 pWdaParams->wdaMsgParam = delBssParam;
3382 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 status = WDI_DelBSSReq(wdiDelBssReqParam,
3384 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 if(IS_WDI_STATUS_FAILURE(status))
3386 {
3387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3388 "Failure in Del BSS WDI API, free all the memory " );
3389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3390 vos_mem_free(pWdaParams) ;
3391 delBssParam->status = eSIR_FAILURE ;
3392 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 return CONVERT_WDI2VOS_STATUS(status) ;
3395}
Jeff Johnson295189b2012-06-20 16:38:30 -07003396/*
3397 * FUNCTION: WDA_DelSTAReqCallback
3398 * Dens DEL STA RSP back to PE
3399 */
3400void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3401 void* pUserData)
3402{
3403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3404 tWDA_CbContext *pWDA;
3405 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003407 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(NULL == pWdaParams)
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0) ;
3413 return ;
3414 }
3415 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3416 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003417 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3419 {
3420 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003423 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003424 VOS_ASSERT(0) ;
3425 }
3426 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3427 }
3428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3429 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 /*Reset the BA information corresponding to this STAIdx */
3431 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3432 WDA_INVALID_STA_INDEX;
3433 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3434
3435 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 return ;
3437}
Jeff Johnson295189b2012-06-20 16:38:30 -07003438/*
3439 * FUNCTION: WDA_ProcessDelStaReq
3440 * Init DEL STA req with WDI
3441 */
3442VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3443 tDeleteStaParams *delStaParam)
3444{
3445 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3447 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3448 sizeof(WDI_DelSTAReqParamsType)) ;
3449 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 if(NULL == wdiDelStaReqParam)
3453 {
3454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003455 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003456 VOS_ASSERT(0);
3457 return VOS_STATUS_E_NOMEM;
3458 }
3459 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3460 if(NULL == pWdaParams)
3461 {
3462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_ASSERT(0);
3465 vos_mem_free(wdiDelStaReqParam);
3466 return VOS_STATUS_E_NOMEM;
3467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003468 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3469 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 /* Store Init Req pointer, as this will be used for response */
3471 /* store Params pass it to WDI */
3472 pWdaParams->pWdaContext = pWDA;
3473 pWdaParams->wdaMsgParam = delStaParam;
3474 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003475 status = WDI_DelSTAReq(wdiDelStaReqParam,
3476 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 if(IS_WDI_STATUS_FAILURE(status))
3478 {
3479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3480 "Failure in Del STA WDI API, free all the memory status = %d",
3481 status );
3482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3483 vos_mem_free(pWdaParams) ;
3484 delStaParam->status = eSIR_FAILURE ;
3485 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 return CONVERT_WDI2VOS_STATUS(status) ;
3488}
Jeff Johnson295189b2012-06-20 16:38:30 -07003489void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3490{
3491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3492 tWDA_CbContext *pWDA;
3493 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003495 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 if(NULL == pWdaParams)
3497 {
3498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003499 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 VOS_ASSERT(0) ;
3501 return ;
3502 }
3503 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3504 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3506 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3508 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3509 pwdiAddSTASelfRsp->macSelfSta,
3510 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 return ;
3513}
Jeff Johnson295189b2012-06-20 16:38:30 -07003514/*
3515 * FUNCTION: WDA_ProcessAddStaSelfReq
3516 *
3517 */
3518VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3519{
3520 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003521 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003522 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3523 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3524 sizeof(WDI_AddSTASelfReqParamsType)) ;
3525 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 if( NULL == wdiAddStaSelfReq )
3529 {
3530 VOS_ASSERT( 0 );
3531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003532 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 return( VOS_STATUS_E_NOMEM );
3534 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 if( NULL == pWdaParams )
3537 {
3538 VOS_ASSERT( 0 );
3539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003540 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 vos_mem_free(wdiAddStaSelfReq) ;
3542 return( VOS_STATUS_E_NOMEM );
3543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003544 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003546 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 /* Store Init Req pointer, as this will be used for response */
3548 /* store Params pass it to WDI */
3549 pWdaParams->pWdaContext = pWDA;
3550 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3551 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003552 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003553
Jeff Johnson43971f52012-07-17 12:26:56 -07003554 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 {
3556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3557 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003558 wstatus );
3559 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3561 vos_mem_free(pWdaParams) ;
3562 pAddStaSelfReq->status = eSIR_FAILURE ;
3563 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3564 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003565 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566}
Jeff Johnson295189b2012-06-20 16:38:30 -07003567/*
3568 * FUNCTION: WDA_DelSTASelfRespCallback
3569 *
3570 */
3571void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3572 wdiDelStaSelfRspParams , void* pUserData)
3573{
3574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3575 tWDA_CbContext *pWDA;
3576 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 if (NULL == pWdaParams)
3580 {
3581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003582 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 VOS_ASSERT(0);
3584 return;
3585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003586 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3587 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003589 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590
3591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3592 vos_mem_free(pWdaParams) ;
3593
3594 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003595 return ;
3596}
Jeff Johnson295189b2012-06-20 16:38:30 -07003597/*
3598 * FUNCTION: WDA_DelSTASelfReqCallback
3599 *
3600 */
3601void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3602 void* pUserData)
3603{
3604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3605 tWDA_CbContext *pWDA;
3606 tDelStaSelfParams *delStaSelfParams;
3607
3608 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303609 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003610 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003611
3612 if (NULL == pWdaParams)
3613 {
3614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003615 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 VOS_ASSERT(0);
3617 return;
3618 }
3619
3620 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3621 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3622
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003623 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003624
3625 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3626 {
3627 VOS_ASSERT(0);
3628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3629 vos_mem_free(pWdaParams) ;
3630 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3631 }
3632
3633 return ;
3634}
3635
3636/*
3637 * FUNCTION: WDA_DelSTASelfReq
3638 * Trigger Config STA processing in WDI
3639 */
3640VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3641 tDelStaSelfParams* pDelStaSelfReqParam)
3642{
3643 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003644 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 tWDA_ReqParams *pWdaParams = NULL;
3646 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3647 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3648 sizeof(WDI_DelSTASelfReqParamsType)) ;
3649
Jeff Johnson295189b2012-06-20 16:38:30 -07003650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 if( NULL == wdiDelStaSelfReq )
3653 {
3654 VOS_ASSERT( 0 );
3655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003656 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003657 return( VOS_STATUS_E_NOMEM );
3658 }
3659
3660 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3661 if( NULL == pWdaParams )
3662 {
3663 VOS_ASSERT( 0 );
3664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003665 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003666 vos_mem_free(wdiDelStaSelfReq) ;
3667 return( VOS_STATUS_E_NOMEM );
3668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003669 pWdaParams->pWdaContext = pWDA;
3670 /* Store param pointer as passed in by caller */
3671 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3672 /* store Params pass it to WDI */
3673 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3675 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3676
3677 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3678 wdiDelStaSelfReq->pUserData = pWdaParams;
3679
Jeff Johnson43971f52012-07-17 12:26:56 -07003680 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003681 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3682
Jeff Johnson43971f52012-07-17 12:26:56 -07003683 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 {
3685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3686 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3687 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003688 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3690 vos_mem_free(pWdaParams) ;
3691 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3692 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3693 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003694 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695}
3696
Jeff Johnson295189b2012-06-20 16:38:30 -07003697/*
3698 * FUNCTION: WDA_SendMsg
3699 * Send Message back to PE
3700 */
3701void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3702 void *pBodyptr, tANI_U32 bodyVal)
3703{
3704 tSirMsgQ msg = {0} ;
3705 tANI_U32 status = VOS_STATUS_SUCCESS ;
3706 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 msg.type = msgType;
3708 msg.bodyval = bodyVal;
3709 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 if (VOS_STATUS_SUCCESS != status)
3712 {
3713 if(NULL != pBodyptr)
3714 {
3715 vos_mem_free(pBodyptr);
3716 }
3717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003718 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003719 VOS_ASSERT(0) ;
3720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003721 return ;
3722}
Jeff Johnson295189b2012-06-20 16:38:30 -07003723/*
3724 * FUNCTION: WDA_UpdateBSSParams
3725 * Translated WDA/PE BSS info into WDI BSS info..
3726 */
3727void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3728 WDI_ConfigBSSReqInfoType *wdiBssParams,
3729 tAddBssParams *wdaBssParams)
3730{
3731 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003732 /* copy bssReq Params to WDI structure */
3733 vos_mem_copy(wdiBssParams->macBSSID,
3734 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3735 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3736 sizeof(tSirMacAddr)) ;
3737 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3738 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3739 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003740 wdiBssParams->ucShortSlotTimeSupported =
3741 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003742 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3743 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3744 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3745 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3746 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3747
3748 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3749 wdiBssParams->ucTXOPProtectionFullSupport =
3750 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003751 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3752 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003753 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3755 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3756 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3757 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3758
Chet Lanctot186b5732013-03-18 10:26:30 -07003759 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3760
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 /* copy SSID into WDI structure */
3762 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3763 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3764 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003765 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3766 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003767 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768#ifdef WLAN_FEATURE_VOWIFI
3769 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3770#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003771 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003772 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003773#ifdef WLAN_FEATURE_VOWIFI_11R
3774 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 if(wdiBssParams->bExtSetStaKeyParamValid)
3776 {
3777 /* copy set STA key params to WDI structure */
3778 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3779 wdaBssParams->extSetStaKeyParam.staIdx;
3780 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3781 wdaBssParams->extSetStaKeyParam.encType;
3782 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3783 wdaBssParams->extSetStaKeyParam.wepType;
3784 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3785 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003786 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3787 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003788 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003789 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3790 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3791 {
3792 WDA_GetWepKeysFromCfg( pWDA,
3793 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3794 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3795 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3796 }
3797 else
3798 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3800 keyIndex++)
3801 {
3802 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3803 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3804 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3805 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3806 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3807 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003808 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3809 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3810 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3811 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3812 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3813 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3814 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3815 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003817 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3818 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003819 }
3820 }
3821 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3822 }
3823 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3824 {
3825 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3826 sizeof(wdaBssParams->extSetStaKeyParam) );
3827 }
3828#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003829#ifdef WLAN_FEATURE_11AC
3830 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3831 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3832#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003833
3834 return ;
3835}
Jeff Johnson295189b2012-06-20 16:38:30 -07003836/*
3837 * FUNCTION: WDA_UpdateSTAParams
3838 * Translated WDA/PE BSS info into WDI BSS info..
3839 */
3840void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3841 WDI_ConfigStaReqInfoType *wdiStaParams,
3842 tAddStaParams *wdaStaParams)
3843{
3844 tANI_U8 i = 0;
3845 /* Update STA params */
3846 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3847 sizeof(tSirMacAddr)) ;
3848 wdiStaParams->usAssocId = wdaStaParams->assocId;
3849 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003850 wdiStaParams->staIdx = wdaStaParams->staIdx;
3851
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 wdiStaParams->ucShortPreambleSupported =
3853 wdaStaParams->shortPreambleSupported;
3854 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3855 sizeof(tSirMacAddr)) ;
3856 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3857
3858 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3859
3860 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3861 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3862 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3863 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3864 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3865 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3866 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3867
3868 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3869 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 wdiStaParams->wdiSupportedRates.opRateMode =
3871 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3873 {
3874 wdiStaParams->wdiSupportedRates.llbRates[i] =
3875 wdaStaParams->supportedRates.llbRates[i];
3876 }
3877 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3878 {
3879 wdiStaParams->wdiSupportedRates.llaRates[i] =
3880 wdaStaParams->supportedRates.llaRates[i];
3881 }
3882 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3883 {
3884 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3885 wdaStaParams->supportedRates.aniLegacyRates[i];
3886 }
3887 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3888 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003889#ifdef WLAN_FEATURE_11AC
3890 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3891 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3892 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3893 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3894#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3896 {
3897 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3898 wdaStaParams->supportedRates.supportedMCSSet[i];
3899 }
3900 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3901 wdaStaParams->supportedRates.rxHighestDataRate;
3902
3903 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3904
3905 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3906
3907 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3908 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3909 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3910
3911 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3912 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3913 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3914 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003916#ifdef WLAN_FEATURE_11AC
3917 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3918 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003919 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003920#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003921 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3922 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 return ;
3924}
Jeff Johnson295189b2012-06-20 16:38:30 -07003925/*
3926 * -------------------------------------------------------------------------
3927 * CFG update to WDI
3928 * -------------------------------------------------------------------------
3929 */
3930
3931 /*
3932 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3933 * Convert the WNI CFG ID to HAL CFG ID
3934 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003935static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003936{
3937 switch(wniCfgId)
3938 {
3939 case WNI_CFG_STA_ID:
3940 return QWLAN_HAL_CFG_STA_ID;
3941 case WNI_CFG_CURRENT_TX_ANTENNA:
3942 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3943 case WNI_CFG_CURRENT_RX_ANTENNA:
3944 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3945 case WNI_CFG_LOW_GAIN_OVERRIDE:
3946 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3947 case WNI_CFG_POWER_STATE_PER_CHAIN:
3948 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3949 case WNI_CFG_CAL_PERIOD:
3950 return QWLAN_HAL_CFG_CAL_PERIOD;
3951 case WNI_CFG_CAL_CONTROL:
3952 return QWLAN_HAL_CFG_CAL_CONTROL;
3953 case WNI_CFG_PROXIMITY:
3954 return QWLAN_HAL_CFG_PROXIMITY;
3955 case WNI_CFG_NETWORK_DENSITY:
3956 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3957 case WNI_CFG_MAX_MEDIUM_TIME:
3958 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3959 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3960 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3961 case WNI_CFG_RTS_THRESHOLD:
3962 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3963 case WNI_CFG_SHORT_RETRY_LIMIT:
3964 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3965 case WNI_CFG_LONG_RETRY_LIMIT:
3966 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3967 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3968 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3969 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3970 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3971 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3972 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3973 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3974 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3975 case WNI_CFG_FIXED_RATE:
3976 return QWLAN_HAL_CFG_FIXED_RATE;
3977 case WNI_CFG_RETRYRATE_POLICY:
3978 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3979 case WNI_CFG_RETRYRATE_SECONDARY:
3980 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3981 case WNI_CFG_RETRYRATE_TERTIARY:
3982 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3983 case WNI_CFG_FORCE_POLICY_PROTECTION:
3984 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3985 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3986 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3987 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3988 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3989 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3990 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3991 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3992 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3993 case WNI_CFG_MAX_BA_SESSIONS:
3994 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3995 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3996 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3997 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3998 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3999 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4000 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4001 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4002 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4003 case WNI_CFG_STATS_PERIOD:
4004 return QWLAN_HAL_CFG_STATS_PERIOD;
4005 case WNI_CFG_CFP_MAX_DURATION:
4006 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4007#if 0 /*This is not part of CFG*/
4008 case WNI_CFG_FRAME_TRANS_ENABLED:
4009 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4010#endif
4011 case WNI_CFG_DTIM_PERIOD:
4012 return QWLAN_HAL_CFG_DTIM_PERIOD;
4013 case WNI_CFG_EDCA_WME_ACBK:
4014 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4015 case WNI_CFG_EDCA_WME_ACBE:
4016 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4017 case WNI_CFG_EDCA_WME_ACVI:
4018 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4019 case WNI_CFG_EDCA_WME_ACVO:
4020 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4021#if 0
4022 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4023 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4024 case WNI_CFG_TELE_BCN_TRANS_LI:
4025 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4026 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4027 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4028 case WNI_CFG_TELE_BCN_MAX_LI:
4029 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4030 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4031 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4032#endif
4033 case WNI_CFG_ENABLE_CLOSE_LOOP:
4034 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004035 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4036 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004037 default:
4038 {
4039 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4040 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
4041 wniCfgId);
4042 return VOS_STATUS_E_INVAL;
4043 }
4044 }
4045}
Jeff Johnson295189b2012-06-20 16:38:30 -07004046/*
4047 * FUNCTION: WDA_UpdateCfgCallback
4048 *
4049 */
4050void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4051{
4052 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4053 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4054 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004056 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004057 /*
4058 * currently there is no response message is expected between PE and
4059 * WDA, Failure return from WDI is a ASSERT condition
4060 */
4061 if(WDI_STATUS_SUCCESS != wdiStatus)
4062 {
4063 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004064 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4066 }
4067
4068 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4069 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4070 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 return ;
4072}
Jeff Johnson295189b2012-06-20 16:38:30 -07004073/*
4074 * FUNCTION: WDA_UpdateCfg
4075 *
4076 */
4077VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4078{
4079
4080 WDI_Status status = WDI_STATUS_SUCCESS ;
4081 tANI_U32 val =0;
4082 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4083 tHalCfg *configData;
4084 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4085 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004087 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 if (NULL == pMac )
4089 {
4090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004091 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 return VOS_STATUS_E_FAILURE;
4093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(WDA_START_STATE != pWDA->wdaState)
4095 {
4096 return VOS_STATUS_E_FAILURE;
4097 }
4098
4099 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4100 {
4101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004102 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 VOS_ASSERT(0);
4104 return VOS_STATUS_E_FAILURE;
4105 }
4106
4107 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4108 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 if(NULL == wdiCfgReqParam)
4110 {
4111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004113 VOS_ASSERT(0);
4114 return VOS_STATUS_E_NOMEM;
4115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4117 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004118 if(NULL == wdiCfgReqParam->pConfigBuffer)
4119 {
4120 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004121 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004122 vos_mem_free(wdiCfgReqParam);
4123 VOS_ASSERT(0);
4124 return VOS_STATUS_E_NOMEM;
4125 }
4126
4127 /*convert the WNI CFG Id to HAL CFG Id*/
4128 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4129 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4130
4131 /*TODO: revisit this for handling string parameters */
4132 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4133 &val) != eSIR_SUCCESS)
4134 {
4135 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4136 "Failed to cfg get id %d\n", cfgParam->bodyval);
4137 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4138 vos_mem_free(wdiCfgReqParam);
4139 return eSIR_FAILURE;
4140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4142 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4143 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4144 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4145 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4146
4147 /* store Params pass it to WDI */
4148 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4150 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4151 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 if(IS_WDI_STATUS_FAILURE(status))
4153 {
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4155 "Failure in Update CFG WDI API, free all the memory " );
4156 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4157 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4158 pWDA->wdaWdiCfgApiMsgParam = NULL;
4159 /* Failure is not expected */
4160 VOS_ASSERT(0) ;
4161 }
4162#else
4163 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4164 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4165 pWDA->wdaWdiCfgApiMsgParam = NULL;
4166#endif
4167 return CONVERT_WDI2VOS_STATUS(status) ;
4168}
4169
Jeff Johnson295189b2012-06-20 16:38:30 -07004170VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4171 v_U8_t *pDefaultKeyId,
4172 v_U8_t *pNumKeys,
4173 WDI_KeysType *pWdiKeys )
4174{
4175 v_U32_t i, j, defKeyId = 0;
4176 v_U32_t val = SIR_MAC_KEY_LENGTH;
4177 VOS_STATUS status = WDI_STATUS_SUCCESS;
4178 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 if (NULL == pMac )
4180 {
4181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004182 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 return VOS_STATUS_E_FAILURE;
4184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004185 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4186 &defKeyId ))
4187 {
4188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4189 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4190 }
4191
4192 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 /* Need to extract ALL of the configured WEP Keys */
4194 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4195 {
4196 val = SIR_MAC_KEY_LENGTH;
4197 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4198 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4199 pWdiKeys[j].key,
4200 &val ))
4201 {
4202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4203 "WEP Key index [%d] may not configured in CFG\n",i);
4204 }
4205 else
4206 {
4207 pWdiKeys[j].keyId = (tANI_U8) i;
4208 /*
4209 * Actually, a DC (Don't Care) because
4210 * this is determined (and set) by PE/MLME
4211 */
4212 pWdiKeys[j].unicast = 0;
4213 /*
4214 * Another DC (Don't Care)
4215 */
4216 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4217 /* Another DC (Don't Care). Unused for WEP */
4218 pWdiKeys[j].paeRole = 0;
4219 /* Determined from wlan_cfgGetStr() above.*/
4220 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 j++;
4222 *pNumKeys = (tANI_U8) j;
4223 }
4224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 return status;
4226}
Jeff Johnson295189b2012-06-20 16:38:30 -07004227/*
4228 * FUNCTION: WDA_SetBssKeyReqCallback
4229 * send SET BSS key RSP back to PE
4230 */
4231void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4232{
4233 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4234 tWDA_CbContext *pWDA;
4235 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 if(NULL == pWdaParams)
4239 {
4240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004242 VOS_ASSERT(0) ;
4243 return ;
4244 }
4245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4246 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4248 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004249 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 return ;
4252}
Jeff Johnson295189b2012-06-20 16:38:30 -07004253/*
4254 * FUNCTION: WDA_ProcessSetBssKeyReq
4255 * Request to WDI for programming the BSS key( key for
4256 * broadcast/multicast frames Encryption)
4257 */
4258VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4259 tSetBssKeyParams *setBssKeyParams )
4260{
4261 WDI_Status status = WDI_STATUS_SUCCESS ;
4262 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4263 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4264 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4265 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004266 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004268 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 if(NULL == wdiSetBssKeyParam)
4270 {
4271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 VOS_ASSERT(0);
4274 return VOS_STATUS_E_NOMEM;
4275 }
4276 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4277 if(NULL == pWdaParams)
4278 {
4279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004280 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 VOS_ASSERT(0);
4282 vos_mem_free(wdiSetBssKeyParam);
4283 return VOS_STATUS_E_NOMEM;
4284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 /* copy set BSS params to WDI structure */
4287 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4288 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4289 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 if(setBssKeyParams->encType != eSIR_ED_NONE)
4291 {
4292 if( setBssKeyParams->numKeys == 0 &&
4293 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4294 setBssKeyParams->encType == eSIR_ED_WEP104))
4295 {
4296 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4298 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4299 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4300 }
4301 else
4302 {
4303 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4304 {
4305 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4306 setBssKeyParams->key[keyIndex].keyId;
4307 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4308 setBssKeyParams->key[keyIndex].unicast;
4309 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4310 setBssKeyParams->key[keyIndex].keyDirection;
4311 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4312 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4313 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4314 setBssKeyParams->key[keyIndex].paeRole;
4315 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4316 setBssKeyParams->key[keyIndex].keyLength;
4317 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4318 setBssKeyParams->key[keyIndex].key,
4319 SIR_MAC_MAX_KEY_LENGTH);
4320 }
4321 }
4322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004323 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4324 setBssKeyParams->singleTidRc;
4325 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 /* Store set key pointer, as this will be used for response */
4327 /* store Params pass it to WDI */
4328 pWdaParams->pWdaContext = pWDA;
4329 pWdaParams->wdaMsgParam = setBssKeyParams;
4330 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4332 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4333
4334 if(IS_WDI_STATUS_FAILURE(status))
4335 {
4336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4337 "Failure in Set BSS Key Req WDI API, free all the memory " );
4338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4339 vos_mem_free(pWdaParams) ;
4340 setBssKeyParams->status = eSIR_FAILURE ;
4341 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004343 return CONVERT_WDI2VOS_STATUS(status) ;
4344}
Jeff Johnson295189b2012-06-20 16:38:30 -07004345/*
4346 * FUNCTION: WDA_RemoveBssKeyReqCallback
4347 * send SET BSS key RSP back to PE
4348 */
4349void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4350{
4351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4352 tWDA_CbContext *pWDA;
4353 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004355 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 if(NULL == pWdaParams)
4357 {
4358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004359 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 VOS_ASSERT(0) ;
4361 return ;
4362 }
4363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4364 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4366 vos_mem_free(pWdaParams) ;
4367
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004368 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 return ;
4371}
Jeff Johnson295189b2012-06-20 16:38:30 -07004372/*
4373 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4374 * Request to WDI to remove the BSS key( key for broadcast/multicast
4375 * frames Encryption)
4376 */
4377VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4378 tRemoveBssKeyParams *removeBssKeyParams )
4379{
4380 WDI_Status status = WDI_STATUS_SUCCESS ;
4381 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4382 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4383 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4384 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 if(NULL == wdiRemoveBssKeyParam)
4388 {
4389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 VOS_ASSERT(0);
4392 return VOS_STATUS_E_NOMEM;
4393 }
4394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4395 if(NULL == pWdaParams)
4396 {
4397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 VOS_ASSERT(0);
4400 vos_mem_free(wdiRemoveBssKeyParam);
4401 return VOS_STATUS_E_NOMEM;
4402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 /* copy Remove BSS key params to WDI structure*/
4404 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4405 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4406 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4407 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4408 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 /* Store remove key pointer, as this will be used for response */
4410 /* store Params pass it to WDI */
4411 pWdaParams->pWdaContext = pWDA;
4412 pWdaParams->wdaMsgParam = removeBssKeyParams;
4413 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4415 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 if(IS_WDI_STATUS_FAILURE(status))
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4419 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4420 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4421 vos_mem_free(pWdaParams) ;
4422 removeBssKeyParams->status = eSIR_FAILURE ;
4423 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 return CONVERT_WDI2VOS_STATUS(status) ;
4426}
Jeff Johnson295189b2012-06-20 16:38:30 -07004427/*
4428 * FUNCTION: WDA_SetBssKeyReqCallback
4429 * send SET BSS key RSP back to PE
4430 */
4431void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4432{
4433 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4434 tWDA_CbContext *pWDA;
4435 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004437 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004438 if(NULL == pWdaParams)
4439 {
4440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004441 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004442 VOS_ASSERT(0) ;
4443 return ;
4444 }
4445 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4446 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4448 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004449 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 return ;
4452}
Jeff Johnson295189b2012-06-20 16:38:30 -07004453/*
4454 * FUNCTION: WDA_ProcessSetStaKeyReq
4455 * Request to WDI for programming the STA key( key for Unicast frames
4456 * Encryption)
4457 */
4458VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4459 tSetStaKeyParams *setStaKeyParams )
4460{
4461 WDI_Status status = WDI_STATUS_SUCCESS ;
4462 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4463 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4464 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4465 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004468 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004469 if(NULL == wdiSetStaKeyParam)
4470 {
4471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004473 VOS_ASSERT(0);
4474 return VOS_STATUS_E_NOMEM;
4475 }
4476 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4477 if(NULL == pWdaParams)
4478 {
4479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004480 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 VOS_ASSERT(0);
4482 vos_mem_free(wdiSetStaKeyParam);
4483 return VOS_STATUS_E_NOMEM;
4484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004485 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004486 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 /* copy set STA key params to WDI structure */
4488 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4489 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4490 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4491 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 if(setStaKeyParams->encType != eSIR_ED_NONE)
4493 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004494 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4496 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4497 {
4498 WDA_GetWepKeysFromCfg( pWDA,
4499 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4500 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4501 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4502 }
4503 else
4504 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4506 keyIndex++)
4507 {
4508 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4509 setStaKeyParams->key[keyIndex].keyId;
4510 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4511 setStaKeyParams->key[keyIndex].unicast;
4512 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4513 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4515 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4516 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4517 setStaKeyParams->key[keyIndex].paeRole;
4518 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4519 setStaKeyParams->key[keyIndex].keyLength;
4520 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4521 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4522 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4523 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4524 {
4525 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4526 }
4527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4529 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 }
4531 }
4532 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4533 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 /* Store set key pointer, as this will be used for response */
4535 /* store Params pass it to WDI */
4536 pWdaParams->pWdaContext = pWDA;
4537 pWdaParams->wdaMsgParam = setStaKeyParams;
4538 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4540 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 if(IS_WDI_STATUS_FAILURE(status))
4542 {
4543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4544 "Failure in set STA Key Req WDI API, free all the memory " );
4545 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4546 vos_mem_free(pWdaParams) ;
4547 setStaKeyParams->status = eSIR_FAILURE ;
4548 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 return CONVERT_WDI2VOS_STATUS(status) ;
4551}
Jeff Johnson295189b2012-06-20 16:38:30 -07004552/*
4553 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4554 * send SET Bcast STA key RSP back to PE
4555 */
4556void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4557{
4558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4559 tWDA_CbContext *pWDA;
4560 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 if(NULL == pWdaParams)
4564 {
4565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004567 VOS_ASSERT(0) ;
4568 return ;
4569 }
4570 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4571 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4573 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004574 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004576 return ;
4577}
4578
Jeff Johnson295189b2012-06-20 16:38:30 -07004579/*
4580 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4581 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4582 * Encryption)
4583 */
4584VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4585 tSetStaKeyParams *setStaKeyParams )
4586{
4587 WDI_Status status = WDI_STATUS_SUCCESS ;
4588 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4589 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4590 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4591 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004594 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 if(NULL == wdiSetStaKeyParam)
4596 {
4597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004598 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004599 VOS_ASSERT(0);
4600 return VOS_STATUS_E_NOMEM;
4601 }
4602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4603 if(NULL == pWdaParams)
4604 {
4605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004606 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004607 VOS_ASSERT(0);
4608 vos_mem_free(wdiSetStaKeyParam);
4609 return VOS_STATUS_E_NOMEM;
4610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 /* copy set STA key params to WDI structure */
4614 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4615 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4616 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4617 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 if(setStaKeyParams->encType != eSIR_ED_NONE)
4619 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004620 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4621 keyIndex++)
4622 {
4623 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4624 setStaKeyParams->key[keyIndex].keyId;
4625 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4626 setStaKeyParams->key[keyIndex].unicast;
4627 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4628 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004629 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4630 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4631 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4632 setStaKeyParams->key[keyIndex].paeRole;
4633 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4634 setStaKeyParams->key[keyIndex].keyLength;
4635 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4636 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004638 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4639 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 }
4641 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004642 /* Store set key pointer, as this will be used for response */
4643 /* store Params pass it to WDI */
4644 pWdaParams->pWdaContext = pWDA;
4645 pWdaParams->wdaMsgParam = setStaKeyParams;
4646 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4648 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004649 if(IS_WDI_STATUS_FAILURE(status))
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4652 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4653 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4654 vos_mem_free(pWdaParams) ;
4655 setStaKeyParams->status = eSIR_FAILURE ;
4656 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004658 return CONVERT_WDI2VOS_STATUS(status) ;
4659}
Jeff Johnson295189b2012-06-20 16:38:30 -07004660/*
4661 * FUNCTION: WDA_RemoveStaKeyReqCallback
4662 * send SET BSS key RSP back to PE
4663 */
4664void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4665{
4666 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4667 tWDA_CbContext *pWDA;
4668 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004670 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004671 if(NULL == pWdaParams)
4672 {
4673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 VOS_ASSERT(0) ;
4676 return ;
4677 }
4678 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4679 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4681 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004682 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 return ;
4685}
4686
Jeff Johnson295189b2012-06-20 16:38:30 -07004687/*
4688 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4689 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4690 */
4691VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4692 tRemoveStaKeyParams *removeStaKeyParams )
4693{
4694 WDI_Status status = WDI_STATUS_SUCCESS ;
4695 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4696 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4697 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4698 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004700 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 if(NULL == wdiRemoveStaKeyParam)
4702 {
4703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004704 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 VOS_ASSERT(0);
4706 return VOS_STATUS_E_NOMEM;
4707 }
4708 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4709 if(NULL == pWdaParams)
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 VOS_ASSERT(0);
4714 vos_mem_free(wdiRemoveStaKeyParam);
4715 return VOS_STATUS_E_NOMEM;
4716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 /* copy remove STA key params to WDI structure*/
4718 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4719 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4720 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4721 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4722 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004723 /* Store remove key pointer, as this will be used for response */
4724 /* store Params pass it to WDI */
4725 pWdaParams->pWdaContext = pWDA;
4726 pWdaParams->wdaMsgParam = removeStaKeyParams;
4727 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4729 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if(IS_WDI_STATUS_FAILURE(status))
4731 {
4732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4733 "Failure in remove STA Key Req WDI API, free all the memory " );
4734 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4735 vos_mem_free(pWdaParams) ;
4736 removeStaKeyParams->status = eSIR_FAILURE ;
4737 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 return CONVERT_WDI2VOS_STATUS(status) ;
4740}
Jeff Johnson295189b2012-06-20 16:38:30 -07004741/*
4742 * FUNCTION: WDA_IsHandleSetLinkStateReq
4743 * Update the WDA state and return the status to handle this message or not
4744 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004745WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4746 tWDA_CbContext *pWDA,
4747 tLinkStateParams *linkStateParams)
4748{
4749 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 switch(linkStateParams->state)
4751 {
4752 case eSIR_LINK_PREASSOC_STATE:
4753 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4754 /*
4755 * set the WDA state to PRE ASSOC
4756 * copy the BSSID into pWDA to use it in join request and return,
4757 * No need to handle these messages.
4758 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004759 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4760 {
4761 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004763 }
4764 else
4765 {
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004768 VOS_ASSERT(0);
4769 }
4770
4771 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4772 {
4773 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004775 }
4776 else
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004780 VOS_ASSERT(0);
4781 }
4782
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4784 *channel and after ) so reset the WDA state to ready when the second
4785 * time UMAC issue the link state with PREASSOC
4786 */
4787 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4788 {
4789 /* RESET WDA state back to WDA_READY_STATE */
4790 pWDA->wdaState = WDA_READY_STATE;
4791 }
4792 else
4793 {
4794 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4795 }
4796 //populate linkState info in WDACbCtxt
4797 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 default:
4800 if(pWDA->wdaState != WDA_READY_STATE)
4801 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004802 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4803 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4804 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4805 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4806 *the ASSERT in WDA_Stop during module unload.*/
4807 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4808 {
4809 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004810 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004811 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004812 else
4813 {
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004815 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004816 status = WDA_IGNORE_SET_LINK_STATE;
4817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004818 }
4819 break;
4820 }
4821
4822 return status;
4823}
Jeff Johnson295189b2012-06-20 16:38:30 -07004824/*
4825 * FUNCTION: WDA_SetLinkStateCallback
4826 * call back function for set link state from WDI
4827 */
4828void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4829{
4830 tWDA_CbContext *pWDA;
4831 tLinkStateParams *linkStateParams;
4832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004834 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 if(NULL == pWdaParams)
4836 {
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 VOS_ASSERT(0) ;
4840 return ;
4841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 /*
4845 * In STA mode start the BA activity check timer after association
4846 * and in AP mode start BA activity check timer after BSS start */
4847 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4848 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004849 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4850 ((status == WDI_STATUS_SUCCESS) &&
4851 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004852 {
4853 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4854 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004855 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 /*
4857 * No respone required for WDA_SET_LINK_STATE so free the request
4858 * param here
4859 */
4860 if( pWdaParams != NULL )
4861 {
4862 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4863 {
4864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4865 }
4866 vos_mem_free(pWdaParams);
4867 }
4868 return ;
4869}
Jeff Johnson295189b2012-06-20 16:38:30 -07004870/*
4871 * FUNCTION: WDA_ProcessSetLinkState
4872 * Request to WDI to set the link status.
4873 */
4874VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4875 tLinkStateParams *linkStateParams)
4876{
4877 WDI_Status status = WDI_STATUS_SUCCESS ;
4878 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4879 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4880 sizeof(WDI_SetLinkReqParamsType)) ;
4881 tWDA_ReqParams *pWdaParams ;
4882 tpAniSirGlobal pMac;
4883 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4884
4885 if(NULL == pMac)
4886 {
4887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004888 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004890 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return VOS_STATUS_E_FAILURE;
4892 }
4893
4894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 if(NULL == wdiSetLinkStateParam)
4897 {
4898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 VOS_ASSERT(0);
4901 return VOS_STATUS_E_NOMEM;
4902 }
4903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4904 if(NULL == pWdaParams)
4905 {
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 VOS_ASSERT(0);
4909 vos_mem_free(wdiSetLinkStateParam);
4910 return VOS_STATUS_E_NOMEM;
4911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 if(WDA_IGNORE_SET_LINK_STATE ==
4913 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4914 {
4915 status = WDI_STATUS_E_FAILURE;
4916 }
4917 else
4918 {
4919 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4920 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4922 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4924 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 pWdaParams->pWdaContext = pWDA;
4926 /* Store remove key pointer, as this will be used for response */
4927 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 /* store Params pass it to WDI */
4929 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4930 /* Stop Timer only other than GO role and concurrent session */
4931 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004932 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4934 {
4935 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4938 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 if(IS_WDI_STATUS_FAILURE(status))
4940 {
4941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4942 "Failure in set link state Req WDI API, free all the memory " );
4943 }
4944 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 if(IS_WDI_STATUS_FAILURE(status))
4946 {
4947 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004948 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 vos_mem_free(pWdaParams);
4950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 return CONVERT_WDI2VOS_STATUS(status) ;
4952}
Jeff Johnson295189b2012-06-20 16:38:30 -07004953/*
4954 * FUNCTION: WDA_GetStatsReqParamsCallback
4955 * send the response to PE with Stats received from WDI
4956 */
4957void WDA_GetStatsReqParamsCallback(
4958 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4959 void* pUserData)
4960{
4961 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4962 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4963
4964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004965 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 pGetPEStatsRspParams =
4967 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4968 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4969
4970 if(NULL == pGetPEStatsRspParams)
4971 {
4972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 VOS_ASSERT(0);
4975 return;
4976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4978 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4979 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4980 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004981
4982 //Fill the Session Id Properly in PE
4983 pGetPEStatsRspParams->sessionId = 0;
4984 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004985 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4987 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 vos_mem_copy( pGetPEStatsRspParams + 1,
4989 wdiGetStatsRsp + 1,
4990 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 /* send response to UMAC*/
4992 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4993
4994 return;
4995}
4996
Jeff Johnson295189b2012-06-20 16:38:30 -07004997/*
4998 * FUNCTION: WDA_ProcessGetStatsReq
4999 * Request to WDI to get the statistics
5000 */
5001VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5002 tAniGetPEStatsReq *pGetStatsParams)
5003{
5004 WDI_Status status = WDI_STATUS_SUCCESS ;
5005 WDI_GetStatsReqParamsType wdiGetStatsParam;
5006 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5010 pGetStatsParams->staId;
5011 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5012 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 status = WDI_GetStatsReq(&wdiGetStatsParam,
5015 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 if(IS_WDI_STATUS_FAILURE(status))
5017 {
5018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5019 "Failure in Get Stats Req WDI API, free all the memory " );
5020 pGetPEStatsRspParams =
5021 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5022 if(NULL == pGetPEStatsRspParams)
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005027 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005028 return VOS_STATUS_E_NOMEM;
5029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5031 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5032 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5033 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5034 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5035 (void *)pGetPEStatsRspParams, 0) ;
5036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 /* Free the request message */
5038 vos_mem_free(pGetStatsParams);
5039 return CONVERT_WDI2VOS_STATUS(status);
5040}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005041
5042#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5043/*
5044 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5045 * send the response to PE with roam Rssi received from WDI
5046 */
5047void WDA_GetRoamRssiReqParamsCallback(
5048 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5049 void* pUserData)
5050{
5051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5052 tWDA_CbContext *pWDA = NULL;
5053 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5054 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5056 "<------ %s " ,__func__);
5057 if(NULL == pWdaParams)
5058 {
5059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5060 "%s: pWdaParams received NULL", __func__);
5061 VOS_ASSERT(0) ;
5062 return ;
5063 }
5064 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5065 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5066
5067 if(NULL == pGetRoamRssiReqParams)
5068 {
5069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5070 "%s: pGetRoamRssiReqParams received NULL", __func__);
5071 VOS_ASSERT(0);
5072 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5073 vos_mem_free(pWdaParams);
5074 return ;
5075 }
5076 pGetRoamRssiRspParams =
5077 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5078
5079 if(NULL == pGetRoamRssiRspParams)
5080 {
5081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5082 "%s: VOS MEM Alloc Failure", __func__);
5083 VOS_ASSERT(0);
5084 return;
5085 }
5086 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5087 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005088 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005089 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5090 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5091
5092 /* Assign get roam rssi req (backup) in to the response */
5093 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5094
5095 /* free WDI command buffer */
5096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5097 vos_mem_free(pWdaParams) ;
5098
5099 /* send response to UMAC*/
5100 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5101
5102 return;
5103}
5104
5105
5106
5107/*
5108 * FUNCTION: WDA_ProcessGetRoamRssiReq
5109 * Request to WDI to get the statistics
5110 */
5111VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5112 tAniGetRssiReq *pGetRoamRssiParams)
5113{
5114 WDI_Status status = WDI_STATUS_SUCCESS ;
5115 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5116 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5117 tWDA_ReqParams *pWdaParams = NULL;
5118
5119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5120 "------> %s " ,__func__);
5121 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5122 pGetRoamRssiParams->staId;
5123 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5124
5125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5126 if(NULL == pWdaParams)
5127 {
5128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5129 "%s: VOS MEM Alloc Failure", __func__);
5130 VOS_ASSERT(0);
5131 return VOS_STATUS_E_NOMEM;
5132 }
5133
5134 /* Store Init Req pointer, as this will be used for response */
5135 pWdaParams->pWdaContext = pWDA;
5136
5137 /* Take Get roam Rssi req backup as it stores the callback to be called after
5138 receiving the response */
5139 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5140 pWdaParams->wdaWdiApiMsgParam = NULL;
5141
5142 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5143 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5144 if(IS_WDI_STATUS_FAILURE(status))
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5147 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5148 pGetRoamRssiRspParams =
5149 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5150 if(NULL == pGetRoamRssiRspParams)
5151 {
5152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5153 "%s: VOS MEM Alloc Failure", __func__);
5154 VOS_ASSERT(0);
5155 vos_mem_free(pGetRoamRssiParams);
5156 vos_mem_free(pWdaParams);
5157 return VOS_STATUS_E_NOMEM;
5158 }
5159 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5160 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5161 pGetRoamRssiRspParams->rssi = 0;
5162 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5163 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5164 (void *)pGetRoamRssiRspParams, 0) ;
5165 }
5166 return CONVERT_WDI2VOS_STATUS(status);
5167}
5168#endif
5169
5170
Jeff Johnson295189b2012-06-20 16:38:30 -07005171/*
5172 * FUNCTION: WDA_UpdateEDCAParamCallback
5173 * call back function for Update EDCA params from WDI
5174 */
5175void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5176{
5177 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5178 tEdcaParams *pEdcaParams;
5179
5180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005182 if(NULL == pWdaParams)
5183 {
5184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005186 VOS_ASSERT(0) ;
5187 return ;
5188 }
5189 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5191 vos_mem_free(pWdaParams);
5192 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005193 return ;
5194}
Jeff Johnson295189b2012-06-20 16:38:30 -07005195/*
5196 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5197 * Request to WDI to Update the EDCA params.
5198 */
5199VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5200 tEdcaParams *pEdcaParams)
5201{
5202 WDI_Status status = WDI_STATUS_SUCCESS ;
5203 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5204 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5205 sizeof(WDI_UpdateEDCAParamsType)) ;
5206 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005209 if(NULL == wdiEdcaParam)
5210 {
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005214 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 return VOS_STATUS_E_NOMEM;
5216 }
5217 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5218 if(NULL == pWdaParams)
5219 {
5220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005221 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 VOS_ASSERT(0);
5223 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005224 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005225 return VOS_STATUS_E_NOMEM;
5226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005228 /*
5229 Since firmware is not using highperformance flag, we have removed
5230 this flag from wdiEDCAInfo structure to match sizeof the structure
5231 between host and firmware.In future if we are planning to use
5232 highperformance flag then Please define this flag in wdiEDCAInfo
5233 structure, update it here and send it to firmware. i.e.
5234 Following is the original line which we removed as part of the fix
5235 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5236 pEdcaParams->highPerformance;
5237 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5239 &pEdcaParams->acbe);
5240 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5241 &pEdcaParams->acbk);
5242 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5243 &pEdcaParams->acvi);
5244 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5245 &pEdcaParams->acvo);
5246 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 pWdaParams->pWdaContext = pWDA;
5248 /* Store remove key pointer, as this will be used for response */
5249 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005250 /* store Params pass it to WDI */
5251 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005252 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5253 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 if(IS_WDI_STATUS_FAILURE(status))
5255 {
5256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5257 "Failure in Update EDCA Params WDI API, free all the memory " );
5258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5259 vos_mem_free(pWdaParams);
5260 vos_mem_free(pEdcaParams);
5261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 return CONVERT_WDI2VOS_STATUS(status) ;
5263}
Jeff Johnson295189b2012-06-20 16:38:30 -07005264/*
5265 * FUNCTION: WDA_AddBAReqCallback
5266 * send ADD BA RSP back to PE
5267 */
5268void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5269 void* pUserData)
5270{
5271 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5272 tWDA_CbContext *pWDA;
5273 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 if(NULL == pWdaParams)
5277 {
5278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005279 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005280 VOS_ASSERT(0) ;
5281 return ;
5282 }
5283 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5284 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5286 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005287 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005289 return ;
5290}
5291
Jeff Johnson295189b2012-06-20 16:38:30 -07005292/*
5293 * FUNCTION: WDA_ProcessAddBAReq
5294 * Request to WDI to Update the ADDBA REQ params.
5295 */
5296VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5297 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5298{
Jeff Johnson43971f52012-07-17 12:26:56 -07005299 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5301 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5302 sizeof(WDI_AddBAReqParamsType)) ;
5303 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 if(NULL == wdiAddBAReqParam)
5307 {
5308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005310 VOS_ASSERT(0);
5311 return VOS_STATUS_E_NOMEM;
5312 }
5313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5314 if(NULL == pWdaParams)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_ASSERT(0);
5319 vos_mem_free(wdiAddBAReqParam);
5320 return VOS_STATUS_E_NOMEM;
5321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 do
5323 {
5324 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 wdiAddBaInfo->ucSTAIdx = staIdx ;
5326 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5327 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 } while(0) ;
5329 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 pWdaParams->pWdaContext = pWDA;
5331 /* store Params pass it to WDI */
5332 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5333 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005334 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5335 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336
Jeff Johnson43971f52012-07-17 12:26:56 -07005337 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 {
5339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005340 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5341 status = CONVERT_WDI2VOS_STATUS(wstatus);
5342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 vos_mem_free(pWdaParams);
5344 pAddBAReqParams->status = eSIR_FAILURE;
5345 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5346 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005347 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005348}
Jeff Johnson295189b2012-06-20 16:38:30 -07005349/*
5350 * FUNCTION: WDA_AddBASessionReqCallback
5351 * send ADD BA SESSION RSP back to PE/(or TL)
5352 */
5353void WDA_AddBASessionReqCallback(
5354 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5355{
5356 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5357 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5358 tWDA_CbContext *pWDA;
5359 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005361 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005362 if(NULL == pWdaParams)
5363 {
5364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005365 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 VOS_ASSERT(0) ;
5367 return ;
5368 }
5369 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5370 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 if( NULL == pAddBAReqParams )
5372 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005374 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5377 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 return ;
5379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 /*
5383 * if WDA in update TL state, update TL with BA session parama and send
5384 * another request to HAL(/WDI) (ADD_BA_REQ)
5385 */
5386
5387 if((VOS_STATUS_SUCCESS ==
5388 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5389 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5390 {
5391 /* Update TL with BA info received from HAL/WDI */
5392 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5393 wdiAddBaSession->usBaSessionID,
5394 wdiAddBaSession->ucSTAIdx,
5395 wdiAddBaSession->ucBaTID,
5396 wdiAddBaSession->ucBaBufferSize,
5397 wdiAddBaSession->ucWinSize,
5398 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5400 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5401 }
5402 else
5403 {
5404 pAddBAReqParams->status =
5405 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5406
5407 /* Setting Flag to indicate that Set BA is success */
5408 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5409 {
5410 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5411 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5412 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 /*Reset the WDA state to READY */
5417 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 return ;
5419}
5420
Jeff Johnson295189b2012-06-20 16:38:30 -07005421/*
5422 * FUNCTION: WDA_ProcessAddBASessionReq
5423 * Request to WDI to Update the ADDBA REQ params.
5424 */
5425VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5426 tAddBAParams *pAddBAReqParams)
5427{
5428 WDI_Status status = WDI_STATUS_SUCCESS ;
5429 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5430 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5431 sizeof(WDI_AddBASessionReqParamsType)) ;
5432 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005433 WLANTL_STAStateType tlSTAState = 0;
5434
Jeff Johnson295189b2012-06-20 16:38:30 -07005435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005437 if(NULL == wdiAddBASessionReqParam)
5438 {
5439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 VOS_ASSERT(0);
5442 return VOS_STATUS_E_NOMEM;
5443 }
5444 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5445 if(NULL == pWdaParams)
5446 {
5447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 VOS_ASSERT(0);
5450 vos_mem_free(wdiAddBASessionReqParam);
5451 return VOS_STATUS_E_NOMEM;
5452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 /*
5454 * Populate ADD BA parameters and pass these paarmeters to WDI.
5455 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5456 * the state to track if these is BA recipient case or BA initiator
5457 * case.
5458 */
5459 do
5460 {
5461 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5462 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5463 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5464 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5465 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5466 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5467 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5470 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5471 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5472 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5473 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 /* check the BA direction and update state accordingly */
5475 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5476 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5477 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5478
5479 }while(0) ;
5480 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 pWdaParams->pWdaContext = pWDA;
5482 /* Store ADD BA pointer, as this will be used for response */
5483 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5484 /* store Params pass it to WDI */
5485 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005486
5487 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5488 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5489 */
5490 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5491 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5492 {
5493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5494 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5495 status = WDI_STATUS_E_NOT_ALLOWED;
5496 pAddBAReqParams->status =
5497 CONVERT_WDI2SIR_STATUS(status) ;
5498 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5499 /*Reset the WDA state to READY */
5500 pWDA->wdaState = WDA_READY_STATE;
5501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5502 vos_mem_free(pWdaParams);
5503
5504 return CONVERT_WDI2VOS_STATUS(status) ;
5505 }
5506
Jeff Johnson295189b2012-06-20 16:38:30 -07005507 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5508 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 if(IS_WDI_STATUS_FAILURE(status))
5510 {
5511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005512 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5514 "Send ADD BA failure response to PE\n");
5515 pAddBAReqParams->status =
5516 CONVERT_WDI2SIR_STATUS(status) ;
5517 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005518 /*Reset the WDA state to READY */
5519 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 vos_mem_free(pWdaParams);
5522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005523 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005524}
Jeff Johnson295189b2012-06-20 16:38:30 -07005525/*
5526 * FUNCTION: WDA_DelBANotifyTL
5527 * send DEL BA IND to TL
5528 */
5529void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5530 tDelBAParams *pDelBAReqParams)
5531{
5532 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5533 //tSirMsgQ msg;
5534 vos_msg_t vosMsg;
5535 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 if(NULL == pDelBAInd)
5537 {
5538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_ASSERT(0) ;
5541 return;
5542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005543 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5544 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5545 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5546 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005547
Jeff Johnson295189b2012-06-20 16:38:30 -07005548
5549 vosMsg.type = WDA_DELETEBA_IND;
5550 vosMsg.bodyptr = pDelBAInd;
5551 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5552 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5553 {
5554 vosStatus = VOS_STATUS_E_BADMSG;
5555 }
5556}
Jeff Johnson295189b2012-06-20 16:38:30 -07005557/*
5558 * FUNCTION: WDA_DelBAReqCallback
5559 * send DEL BA RSP back to PE
5560 */
5561void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5562{
5563 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5564 tWDA_CbContext *pWDA;
5565 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 if(NULL == pWdaParams)
5569 {
5570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 VOS_ASSERT(0) ;
5573 return ;
5574 }
5575 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5576 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 /* Notify TL about DEL BA in case of recipinet */
5578 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5579 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5580 {
5581 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 /*
5584 * No respone required for WDA_DELBA_IND so just free the request
5585 * param here
5586 */
5587 vos_mem_free(pDelBAReqParams);
5588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5589 vos_mem_free(pWdaParams);
5590 return ;
5591}
5592
Jeff Johnson295189b2012-06-20 16:38:30 -07005593/*
5594 * FUNCTION: WDA_ProcessDelBAReq
5595 * Request to WDI to Update the DELBA REQ params.
5596 */
5597VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5598 tDelBAParams *pDelBAReqParams)
5599{
5600 WDI_Status status = WDI_STATUS_SUCCESS ;
5601 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5602 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5603 sizeof(WDI_DelBAReqParamsType)) ;
5604 tWDA_ReqParams *pWdaParams ;
5605 tANI_U16 staIdx = 0;
5606 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005608 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 if(NULL == wdiDelBAReqParam)
5610 {
5611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005612 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 VOS_ASSERT(0);
5614 return VOS_STATUS_E_NOMEM;
5615 }
5616 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5617 if(NULL == pWdaParams)
5618 {
5619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005620 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005621 VOS_ASSERT(0);
5622 vos_mem_free(wdiDelBAReqParam);
5623 return VOS_STATUS_E_NOMEM;
5624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005625 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5626 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5627 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5628 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 pWdaParams->pWdaContext = pWDA;
5630 /* Store DEL BA pointer, as this will be used for response */
5631 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 /* store Params pass it to WDI */
5633 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5635 * maintained in WDA, so that WDA can retry for another BA session
5636 */
5637 staIdx = pDelBAReqParams->staIdx;
5638 tid = pDelBAReqParams->baTID;
5639 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 status = WDI_DelBAReq(wdiDelBAReqParam,
5641 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005642 if(IS_WDI_STATUS_FAILURE(status))
5643 {
5644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5645 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5647 vos_mem_free(pWdaParams->wdaMsgParam);
5648 vos_mem_free(pWdaParams);
5649 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005650 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005651}
Jeff Johnson295189b2012-06-20 16:38:30 -07005652/*
5653 * FUNCTION: WDA_AddTSReqCallback
5654 * send ADD TS RSP back to PE
5655 */
5656void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5657{
5658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5659 tWDA_CbContext *pWDA;
5660 tAddTsParams *pAddTsReqParams;
5661
5662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005663 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if(NULL == pWdaParams)
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005667 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 VOS_ASSERT(0) ;
5669 return ;
5670 }
5671 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5672 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5674 vos_mem_free(pWdaParams);
5675
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005676 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005677 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 return ;
5679}
5680
Jeff Johnson295189b2012-06-20 16:38:30 -07005681/*
5682 * FUNCTION: WDA_ProcessAddTSReq
5683 * Request to WDI to Update the ADD TS REQ params.
5684 */
5685VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5686 tAddTsParams *pAddTsReqParams)
5687{
5688 WDI_Status status = WDI_STATUS_SUCCESS ;
5689 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5690 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5691 sizeof(WDI_AddTSReqParamsType)) ;
5692 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 if(NULL == wdiAddTSReqParam)
5696 {
5697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005698 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 VOS_ASSERT(0);
5700 return VOS_STATUS_E_NOMEM;
5701 }
5702 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5703 if(NULL == pWdaParams)
5704 {
5705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005707 VOS_ASSERT(0);
5708 vos_mem_free(wdiAddTSReqParam);
5709 return VOS_STATUS_E_NOMEM;
5710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005711 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5712 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005713 //TS IE
5714 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5715 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5716 pAddTsReqParams->tspec.length;
5717
5718 //TS IE : TS INFO : TRAFFIC
5719 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5720 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5721 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5722 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5723 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5724 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5725 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5726 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5727 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5728 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5729 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5730 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5731 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5732 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5733 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5734 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5735
5736 //TS IE : TS INFO : SCHEDULE
5737 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5738 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5739 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5740 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 //TS IE
5742 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5743 pAddTsReqParams->tspec.nomMsduSz;
5744 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5745 pAddTsReqParams->tspec.maxMsduSz;
5746 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5747 pAddTsReqParams->tspec.minSvcInterval;
5748 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5749 pAddTsReqParams->tspec.maxSvcInterval;
5750 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5751 pAddTsReqParams->tspec.inactInterval;
5752 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5753 pAddTsReqParams->tspec.suspendInterval;
5754 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5755 pAddTsReqParams->tspec.svcStartTime;
5756 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5757 pAddTsReqParams->tspec.minDataRate;
5758 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5759 pAddTsReqParams->tspec.meanDataRate;
5760 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5761 pAddTsReqParams->tspec.peakDataRate;
5762 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5763 pAddTsReqParams->tspec.maxBurstSz;
5764 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5765 pAddTsReqParams->tspec.delayBound;
5766 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5767 pAddTsReqParams->tspec.minPhyRate;
5768 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5769 pAddTsReqParams->tspec.surplusBw;
5770 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5771 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 /* TODO: tAddTsParams doesn't have the following fields */
5773#if 0
5774 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5775 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5776 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5777 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5778#endif
5779 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5780
5781 pWdaParams->pWdaContext = pWDA;
5782 /* Store ADD TS pointer, as this will be used for response */
5783 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 /* store Params pass it to WDI */
5785 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005786 status = WDI_AddTSReq(wdiAddTSReqParam,
5787 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005788 if(IS_WDI_STATUS_FAILURE(status))
5789 {
5790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5791 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5793 vos_mem_free(pWdaParams);
5794 pAddTsReqParams->status = eSIR_FAILURE ;
5795 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005798}
5799
Jeff Johnson295189b2012-06-20 16:38:30 -07005800/*
5801 * FUNCTION: WDA_DelTSReqCallback
5802 * send DEL TS RSP back to PE
5803 */
5804void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5805{
5806 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005808 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5810 vos_mem_free(pWdaParams->wdaMsgParam) ;
5811 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 /*
5813 * No respone required for WDA_DEL_TS_REQ so just free the request
5814 * param here
5815 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 return ;
5817}
5818
Jeff Johnson295189b2012-06-20 16:38:30 -07005819/*
5820 * FUNCTION: WDA_ProcessDelTSReq
5821 * Request to WDI to Update the DELTS REQ params.
5822 */
5823VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5824 tDelTsParams *pDelTSReqParams)
5825{
5826 WDI_Status status = WDI_STATUS_SUCCESS ;
5827 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5828 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5829 sizeof(WDI_DelTSReqParamsType)) ;
5830 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 if(NULL == wdiDelTSReqParam)
5834 {
5835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005836 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 VOS_ASSERT(0);
5838 return VOS_STATUS_E_NOMEM;
5839 }
5840 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5841 if(NULL == pWdaParams)
5842 {
5843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 VOS_ASSERT(0);
5846 vos_mem_free(wdiDelTSReqParam);
5847 return VOS_STATUS_E_NOMEM;
5848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5850 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5851 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5852 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5853 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 pWdaParams->pWdaContext = pWDA;
5855 /* Store DEL TS pointer, as this will be used for response */
5856 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 /* store Params pass it to WDI */
5858 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 status = WDI_DelTSReq(wdiDelTSReqParam,
5860 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 if(IS_WDI_STATUS_FAILURE(status))
5862 {
5863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5864 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5865 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5866 vos_mem_free(pWdaParams->wdaMsgParam);
5867 vos_mem_free(pWdaParams);
5868 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870}
Jeff Johnson295189b2012-06-20 16:38:30 -07005871/*
5872 * FUNCTION: WDA_UpdateBeaconParamsCallback
5873 * Free the memory. No need to send any response to PE in this case
5874 */
5875void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5876{
5877 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 if(NULL == pWdaParams)
5881 {
5882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005883 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005884 VOS_ASSERT(0) ;
5885 return ;
5886 }
5887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5888 vos_mem_free(pWdaParams->wdaMsgParam) ;
5889 vos_mem_free(pWdaParams);
5890 /*
5891 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5892 * param here
5893 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 return ;
5895}
Jeff Johnson295189b2012-06-20 16:38:30 -07005896/*
5897 * FUNCTION: WDA_ProcessUpdateBeaconParams
5898 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5899 */
5900VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5901 tUpdateBeaconParams *pUpdateBeaconParams)
5902{
5903 WDI_Status status = WDI_STATUS_SUCCESS ;
5904 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5905 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5906 sizeof(WDI_UpdateBeaconParamsType)) ;
5907 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005909 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005910 if(NULL == wdiUpdateBeaconParams)
5911 {
5912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 VOS_ASSERT(0);
5915 return VOS_STATUS_E_NOMEM;
5916 }
5917 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5918 if(NULL == pWdaParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 vos_mem_free(wdiUpdateBeaconParams);
5924 return VOS_STATUS_E_NOMEM;
5925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5927 pUpdateBeaconParams->bssIdx;
5928 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5929 pUpdateBeaconParams->fShortPreamble;
5930 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5931 pUpdateBeaconParams->fShortSlotTime;
5932 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5933 pUpdateBeaconParams->beaconInterval;
5934 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5935 pUpdateBeaconParams->llaCoexist;
5936 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5937 pUpdateBeaconParams->llbCoexist;
5938 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5939 pUpdateBeaconParams->llgCoexist;
5940 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5941 pUpdateBeaconParams->ht20MhzCoexist;
5942 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5943 pUpdateBeaconParams->llnNonGFCoexist;
5944 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5945 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5946 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5947 pUpdateBeaconParams->fRIFSMode;
5948 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5949 pUpdateBeaconParams->paramChangeBitmap;
5950 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5951
5952 pWdaParams->pWdaContext = pWDA;
5953 /* Store UpdateBeacon Req pointer, as this will be used for response */
5954 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 /* store Params pass it to WDI */
5956 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5958 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5959 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 if(IS_WDI_STATUS_FAILURE(status))
5961 {
5962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5963 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5965 vos_mem_free(pWdaParams->wdaMsgParam);
5966 vos_mem_free(pWdaParams);
5967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969}
Jeff Johnson295189b2012-06-20 16:38:30 -07005970#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005971/*
5972 * FUNCTION: WDA_TSMStatsReqCallback
5973 * send TSM Stats RSP back to PE
5974 */
5975void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5976{
5977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5978 tWDA_CbContext *pWDA = NULL;
5979 tTSMStats *pTsmRspParams = NULL;
5980
5981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 if(NULL == pWdaParams)
5984 {
5985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 VOS_ASSERT(0) ;
5988 return ;
5989 }
5990 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5991 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 if( NULL == pTsmRspParams )
5993 {
5994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005995 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 VOS_ASSERT( 0 );
5997 return ;
5998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005999 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6000 vos_mem_free(pWdaParams);
6001
6002 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6003 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6004 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6005 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6006 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6007 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6008 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6009 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6010 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6011 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 return ;
6014}
6015
6016
Jeff Johnson295189b2012-06-20 16:38:30 -07006017/*
6018 * FUNCTION: WDA_ProcessTsmStatsReq
6019 * Request to WDI to get the TSM Stats params.
6020 */
6021VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
6022 tTSMStats *pTsmStats)
6023{
6024 WDI_Status status = WDI_STATUS_SUCCESS ;
6025 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
6026 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006028 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006029 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6030 sizeof(WDI_TSMStatsReqParamsType));
6031 if(NULL == wdiTSMReqParam)
6032 {
6033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 VOS_ASSERT(0);
6036 return VOS_STATUS_E_NOMEM;
6037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6039 if(NULL == pWdaParams)
6040 {
6041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 VOS_ASSERT(0);
6044 vos_mem_free(wdiTSMReqParam);
6045 return VOS_STATUS_E_NOMEM;
6046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6048 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6049 pTsmStats->bssId,
6050 sizeof(wpt_macAddr));
6051 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6052
6053 pWdaParams->pWdaContext = pWDA;
6054 /* Store TSM Stats pointer, as this will be used for response */
6055 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 /* store Params pass it to WDI */
6057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 status = WDI_TSMStatsReq(wdiTSMReqParam,
6059 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 if(IS_WDI_STATUS_FAILURE(status))
6061 {
6062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6063 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
6064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6065 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08006066 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 return CONVERT_WDI2VOS_STATUS(status) ;
6069}
6070#endif
6071/*
6072 * FUNCTION: WDA_SendBeaconParamsCallback
6073 * No need to send any response to PE in this case
6074 */
6075void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6076{
6077
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006079 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 return ;
6081}
Jeff Johnson295189b2012-06-20 16:38:30 -07006082/*
6083 * FUNCTION: WDA_ProcessSendBeacon
6084 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6085 * start beacon trasmission
6086 */
6087VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6088 tSendbeaconParams *pSendbeaconParams)
6089{
6090 WDI_Status status = WDI_STATUS_SUCCESS ;
6091 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006093 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6095 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6096 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6097 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6099 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306100 /* p2pIeOffset should be atleast greater than timIeOffset */
6101 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6102 (pSendbeaconParams->p2pIeOffset <
6103 pSendbeaconParams->timIeOffset))
6104 {
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6106 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6107 VOS_ASSERT( 0 );
6108 return WDI_STATUS_E_FAILURE;
6109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006110 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6111 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 /* Copy the beacon template to local buffer */
6113 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6114 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6115 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6116
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6118 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 if(IS_WDI_STATUS_FAILURE(status))
6120 {
6121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6122 "Failure in SEND BEACON REQ Params WDI API" );
6123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 vos_mem_free(pSendbeaconParams);
6125 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006126}
Jeff Johnson295189b2012-06-20 16:38:30 -07006127/*
6128 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6129 * No need to send any response to PE in this case
6130 */
6131void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6132{
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006134 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 return ;
6136}
6137
Jeff Johnson295189b2012-06-20 16:38:30 -07006138/*
6139 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6140 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6141 * send probe response
6142 */
6143VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6144 tSendProbeRespParams *pSendProbeRspParams)
6145{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006146 WDI_Status status = WDI_STATUS_SUCCESS;
6147 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6148 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006150 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006151
6152 if (!wdiSendProbeRspParam)
6153 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6154
Jeff Johnson295189b2012-06-20 16:38:30 -07006155 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006156 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006157 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006158 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 /* Copy the Probe Response template to local buffer */
6161 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006162 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006163 pSendProbeRspParams->pProbeRespTemplate,
6164 pSendProbeRspParams->probeRespTemplateLen);
6165 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006166 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006167 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6168 WDI_PROBE_REQ_BITMAP_IE_LEN);
6169
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006170 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006172 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006174 if(IS_WDI_STATUS_FAILURE(status))
6175 {
6176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6177 "Failure in SEND Probe RSP Params WDI API" );
6178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006179 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006180 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006181 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182}
Jeff Johnson295189b2012-06-20 16:38:30 -07006183#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6184/*
6185 * FUNCTION: WDA_SetMaxTxPowerCallBack
6186 * send the response to PE with power value received from WDI
6187 */
6188void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6189 void* pUserData)
6190{
6191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6192 tWDA_CbContext *pWDA = NULL;
6193 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6194
6195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006196 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006197 if(NULL == pWdaParams)
6198 {
6199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006200 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 VOS_ASSERT(0) ;
6202 return ;
6203 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6205 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 if( NULL == pMaxTxPowerParams )
6207 {
6208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006209 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006210 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6212 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 return ;
6214 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006215
Jeff Johnson295189b2012-06-20 16:38:30 -07006216
6217 /*need to free memory for the pointers used in the
6218 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6220 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006221 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006222
Jeff Johnson295189b2012-06-20 16:38:30 -07006223
6224 /* send response to UMAC*/
6225 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6226
6227 return;
6228}
Jeff Johnson295189b2012-06-20 16:38:30 -07006229/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006230 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 * Request to WDI to send set Max Tx Power Request
6232 */
6233 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6234 tMaxTxPowerParams *MaxTxPowerParams)
6235{
6236 WDI_Status status = WDI_STATUS_SUCCESS;
6237 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6238 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006239
Jeff Johnson295189b2012-06-20 16:38:30 -07006240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006241 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006242
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6244 sizeof(WDI_SetMaxTxPowerParamsType));
6245 if(NULL == wdiSetMaxTxPowerParams)
6246 {
6247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006249 VOS_ASSERT(0);
6250 return VOS_STATUS_E_NOMEM;
6251 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6253 if(NULL == pWdaParams)
6254 {
6255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 vos_mem_free(wdiSetMaxTxPowerParams);
6258 VOS_ASSERT(0);
6259 return VOS_STATUS_E_NOMEM;
6260 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006261 /* Copy.Max.Tx.Power Params to WDI structure */
6262 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6263 MaxTxPowerParams->bssId,
6264 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6266 MaxTxPowerParams->selfStaMacAddr,
6267 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6269 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 pWdaParams->pWdaContext = pWDA;
6272 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 /* store Params pass it to WDI */
6274 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6276 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 if(IS_WDI_STATUS_FAILURE(status))
6278 {
6279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6280 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6282 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006283 /* send response to UMAC*/
6284 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 }
6286 return CONVERT_WDI2VOS_STATUS(status);
6287
6288}
Jeff Johnson295189b2012-06-20 16:38:30 -07006289#endif
schang86c22c42013-03-13 18:41:24 -07006290
6291/*
6292 * FUNCTION: WDA_SetTxPowerCallBack
6293 * send the response to PE with power value received from WDI
6294 */
6295void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6296 void* pUserData)
6297{
6298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6299 tWDA_CbContext *pWDA = NULL;
6300 tSirSetTxPowerReq *pTxPowerParams = NULL;
6301
6302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6303 "<------ %s ", __func__);
6304 if(NULL == pWdaParams)
6305 {
6306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6307 "%s: pWdaParams received NULL", __func__);
6308 VOS_ASSERT(0) ;
6309 return ;
6310 }
6311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6312 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6313 if(NULL == pTxPowerParams)
6314 {
6315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6316 "%s: pTxPowerParams received NULL " ,__func__);
6317 VOS_ASSERT(0);
6318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6319 vos_mem_free(pWdaParams);
6320 return ;
6321 }
6322
6323 /*need to free memory for the pointers used in the
6324 WDA Process.Set Max Tx Power Req function*/
6325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6326 vos_mem_free(pWdaParams);
6327
6328 /* send response to UMAC*/
6329 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6330 return;
6331}
6332
6333/*
6334 * FUNCTION: WDA_ProcessSetTxPowerReq
6335 * Request to WDI to send set Tx Power Request
6336 */
6337 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6338 tSirSetTxPowerReq *txPowerParams)
6339{
6340 WDI_Status status = WDI_STATUS_SUCCESS;
6341 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6342 tWDA_ReqParams *pWdaParams = NULL;
6343
6344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6345 "------> %s ", __func__);
6346
6347 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6348 sizeof(WDI_SetTxPowerParamsType));
6349 if(NULL == wdiSetTxPowerParams)
6350 {
6351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6352 "%s: VOS MEM Alloc Failure", __func__);
6353 VOS_ASSERT(0);
6354 return VOS_STATUS_E_NOMEM;
6355 }
6356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6357 if(NULL == pWdaParams)
6358 {
6359 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6360 "%s: VOS MEM Alloc Failure", __func__);
6361 vos_mem_free(wdiSetTxPowerParams);
6362 VOS_ASSERT(0);
6363 return VOS_STATUS_E_NOMEM;
6364 }
6365 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6366 txPowerParams->bssIdx;
6367 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6368 txPowerParams->mwPower;
6369 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6370 pWdaParams->pWdaContext = pWDA;
6371 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6372 /* store Params pass it to WDI */
6373 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6374 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6375 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6376 if(IS_WDI_STATUS_FAILURE(status))
6377 {
6378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6379 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6381 vos_mem_free(pWdaParams);
6382 /* send response to UMAC*/
6383 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6384 }
6385 return CONVERT_WDI2VOS_STATUS(status);
6386}
6387
Jeff Johnson295189b2012-06-20 16:38:30 -07006388/*
6389 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6390 * Free the memory. No need to send any response to PE in this case
6391 */
6392void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6393{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6395
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006397 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006398
6399 if(NULL == pWdaParams)
6400 {
6401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006402 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006403 VOS_ASSERT(0) ;
6404 return ;
6405 }
6406
6407 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6408 vos_mem_free(pWdaParams->wdaMsgParam) ;
6409 vos_mem_free(pWdaParams);
6410
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 /*
6412 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6413 * so just free the request param here
6414 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 return ;
6416}
6417
Jeff Johnson295189b2012-06-20 16:38:30 -07006418/*
6419 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6420 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6421 */
6422VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6423 tP2pPsParams *pP2pPsConfigParams)
6424{
6425 WDI_Status status = WDI_STATUS_SUCCESS ;
6426 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6427 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6428 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006429 tWDA_ReqParams *pWdaParams = NULL;
6430
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006432 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 if(NULL == wdiSetP2PGONOAReqParam)
6434 {
6435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 VOS_ASSERT(0);
6438 return VOS_STATUS_E_NOMEM;
6439 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006440
6441 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6442 if(NULL == pWdaParams)
6443 {
6444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006445 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006446 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006447 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006448 VOS_ASSERT(0);
6449 return VOS_STATUS_E_NOMEM;
6450 }
6451
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6453 pP2pPsConfigParams->opp_ps;
6454 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6455 pP2pPsConfigParams->ctWindow;
6456 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6457 pP2pPsConfigParams->count;
6458 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6459 pP2pPsConfigParams->duration;
6460 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6461 pP2pPsConfigParams->interval;
6462 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6463 pP2pPsConfigParams->single_noa_duration;
6464 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6465 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006466
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6468 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006469 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6470
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006472 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6473 pWdaParams->pWdaContext = pWDA;
6474
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006476 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6477
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 if(IS_WDI_STATUS_FAILURE(status))
6479 {
6480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6481 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006482 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6483 vos_mem_free(pWdaParams->wdaMsgParam);
6484 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006485 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 return CONVERT_WDI2VOS_STATUS(status);
6487
Jeff Johnson295189b2012-06-20 16:38:30 -07006488}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306489
6490#ifdef FEATURE_WLAN_TDLS
6491/*
6492 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6493 * Free the memory. No need to send any response to PE in this case
6494 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306495void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6496 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306497{
6498 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6499 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306500 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306501
6502
6503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6504 "<------ %s " ,__func__);
6505 if(NULL == pWdaParams)
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6508 "%s: pWdaParams received NULL", __func__);
6509 VOS_ASSERT(0) ;
6510 return ;
6511 }
6512 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6513
6514 if(NULL == pWdaParams)
6515 {
6516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6517 "%s: pWdaParams received NULL", __func__);
6518 VOS_ASSERT(0) ;
6519 return ;
6520 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306521 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6522 if( NULL == pTdlsLinkEstablishParams )
6523 {
6524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6525 "%s: pTdlsLinkEstablishParams "
6526 "received NULL " ,__func__);
6527 VOS_ASSERT(0);
6528 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6529 vos_mem_free(pWdaParams);
6530 return ;
6531 }
6532 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6533 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306535 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306536 /* send response to UMAC*/
6537 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6538
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306539 return ;
6540}
6541
6542VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6543 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6544{
6545 WDI_Status status = WDI_STATUS_SUCCESS ;
6546 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6547 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6548 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6549 tWDA_ReqParams *pWdaParams = NULL;
6550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6551 "------> %s " ,__func__);
6552 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6553 {
6554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6555 "%s: VOS MEM Alloc Failure", __func__);
6556 VOS_ASSERT(0);
6557 return VOS_STATUS_E_NOMEM;
6558 }
6559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6560 if(NULL == pWdaParams)
6561 {
6562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6563 "%s: VOS MEM Alloc Failure", __func__);
6564 vos_mem_free(pTdlsLinkEstablishParams);
6565 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6566 VOS_ASSERT(0);
6567 return VOS_STATUS_E_NOMEM;
6568 }
6569 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306570 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306571 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306572 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306573 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306574 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306575 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306576 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306577 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306578 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306579
6580 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6581 /* Store msg pointer from PE, as this will be used for response */
6582 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6583 /* store Params pass it to WDI */
6584 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6585 pWdaParams->pWdaContext = pWDA;
6586
6587 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6588 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6589 WDA_SetTDLSLinkEstablishReqParamsCallback,
6590 pWdaParams);
6591 if(IS_WDI_STATUS_FAILURE(status))
6592 {
6593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6594 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6596 vos_mem_free(pWdaParams->wdaMsgParam);
6597 vos_mem_free(pWdaParams);
6598 }
6599 return CONVERT_WDI2VOS_STATUS(status);
6600}
6601#endif
6602
6603
Jeff Johnson295189b2012-06-20 16:38:30 -07006604#ifdef WLAN_FEATURE_VOWIFI_11R
6605/*
6606 * FUNCTION: WDA_AggrAddTSReqCallback
6607 * send ADD AGGREGATED TS RSP back to PE
6608 */
6609void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6610{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006611 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6612 tWDA_CbContext *pWDA;
6613 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006614 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006616 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006617 if(NULL == pWdaParams)
6618 {
6619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006620 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006621 VOS_ASSERT(0) ;
6622 return ;
6623 }
6624
6625 pWDA = pWdaParams->pWdaContext;
6626 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006627
6628 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6629 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006630 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006631 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006633
6634 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6635 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006636 return ;
6637}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006638/*
6639 * FUNCTION: WDA_ProcessAddTSReq
6640 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6641 */
6642VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6643 tAggrAddTsParams *pAggrAddTsReqParams)
6644{
6645 WDI_Status status = WDI_STATUS_SUCCESS ;
6646 int i;
6647 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006648 tWDA_ReqParams *pWdaParams = NULL;
6649
6650
Jeff Johnson295189b2012-06-20 16:38:30 -07006651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006652 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006653 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6654 sizeof(WDI_AggrAddTSReqParamsType)) ;
6655 if(NULL == wdiAggrAddTSReqParam)
6656 {
6657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 VOS_ASSERT(0);
6660 return VOS_STATUS_E_NOMEM;
6661 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006662
6663
6664 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6665 if(NULL == pWdaParams)
6666 {
6667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006668 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006669 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006670 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006671 VOS_ASSERT(0);
6672 return VOS_STATUS_E_NOMEM;
6673 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6675 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6676 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006677 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6678 {
6679 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6680 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6681 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6683 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6684 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6685 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6686 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6687 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6688 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6689 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6690 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6691 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6692 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6693 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6694 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6695 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6696 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6697 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6699 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6701 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6702 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6703 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6704 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6705 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6706 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6707 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6708 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6709 pAggrAddTsReqParams->tspec[i].inactInterval;
6710 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6711 pAggrAddTsReqParams->tspec[i].suspendInterval;
6712 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6713 pAggrAddTsReqParams->tspec[i].svcStartTime;
6714 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6715 pAggrAddTsReqParams->tspec[i].minDataRate;
6716 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6717 pAggrAddTsReqParams->tspec[i].meanDataRate;
6718 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6719 pAggrAddTsReqParams->tspec[i].peakDataRate;
6720 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6721 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6722 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6723 pAggrAddTsReqParams->tspec[i].delayBound;
6724 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6725 pAggrAddTsReqParams->tspec[i].minPhyRate;
6726 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6727 pAggrAddTsReqParams->tspec[i].surplusBw;
6728 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6729 pAggrAddTsReqParams->tspec[i].mediumTime;
6730 }
6731
6732 /* TODO: tAggrAddTsParams doesn't have the following fields */
6733#if 0
6734 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6735 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6736 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6737 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6738#endif
6739 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6740
6741 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006742 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006744 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6745
6746 pWdaParams->pWdaContext = pWDA;
6747
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006749 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6750
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 if(IS_WDI_STATUS_FAILURE(status))
6752 {
6753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6754 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006755 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6756 vos_mem_free(pWdaParams);
6757
6758 /* send the failure response back to PE*/
6759 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6760 {
6761 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6762 }
6763
6764 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6765 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006767 return CONVERT_WDI2VOS_STATUS(status) ;
6768}
6769#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006770/*
6771 * FUNCTION: WDA_EnterImpsReqCallback
6772 * send Enter IMPS RSP back to PE
6773 */
6774void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6775{
6776 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006779 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006780 return ;
6781}
Jeff Johnson295189b2012-06-20 16:38:30 -07006782/*
6783 * FUNCTION: WDA_ProcessEnterImpsReq
6784 * Request to WDI to Enter IMPS power state.
6785 */
6786VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6787{
6788 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006790 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 if(IS_WDI_STATUS_FAILURE(status))
6793 {
6794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6795 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006796 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 return CONVERT_WDI2VOS_STATUS(status) ;
6799}
Jeff Johnson295189b2012-06-20 16:38:30 -07006800/*
6801 * FUNCTION: WDA_ExitImpsReqCallback
6802 * send Exit IMPS RSP back to PE
6803 */
6804void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6805{
6806 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006808 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006809 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 return ;
6811}
Jeff Johnson295189b2012-06-20 16:38:30 -07006812/*
6813 * FUNCTION: WDA_ProcessExitImpsReq
6814 * Request to WDI to Exit IMPS power state.
6815 */
6816VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6817{
6818 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006820 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006822 if(IS_WDI_STATUS_FAILURE(status))
6823 {
6824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6825 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006826 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 return CONVERT_WDI2VOS_STATUS(status) ;
6829}
Jeff Johnson295189b2012-06-20 16:38:30 -07006830/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006831 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 * send Enter BMPS RSP back to PE
6833 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006834void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006835{
6836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6837 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006838 tEnterBmpsParams *pEnterBmpsRspParams;
6839
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006841 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 if(NULL == pWdaParams)
6843 {
6844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006845 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 VOS_ASSERT(0) ;
6847 return ;
6848 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006849
6850 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6851 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6852
6853 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006854 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006855
6856 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006858 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6859
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 return ;
6861}
Jeff Johnson295189b2012-06-20 16:38:30 -07006862/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006863 * FUNCTION: WDA_EnterBmpsReqCallback
6864 * Free memory and send Enter BMPS RSP back to PE.
6865 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6866 */
6867void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6868{
6869 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6870 tWDA_CbContext *pWDA;
6871 tEnterBmpsParams *pEnterBmpsRspParams;
6872
6873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6874 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6875
6876 if(NULL == pWdaParams)
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "%s: pWdaParams received NULL", __func__);
6880 VOS_ASSERT(0);
6881 return;
6882 }
6883
6884 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6885 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6886 pEnterBmpsRspParams->status = wdiStatus;
6887
6888 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6889 {
6890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6891 vos_mem_free(pWdaParams);
6892 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6893 }
6894
6895 return;
6896}
6897/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 * FUNCTION: WDA_ProcessEnterBmpsReq
6899 * Request to WDI to Enter BMPS power state.
6900 */
6901VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6902 tEnterBmpsParams *pEnterBmpsReqParams)
6903{
6904 WDI_Status status = WDI_STATUS_SUCCESS;
6905 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6906 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_ASSERT(0);
6914 return VOS_STATUS_E_FAILURE;
6915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6917 if (NULL == wdiEnterBmpsReqParams)
6918 {
6919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006922 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6923 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006924 return VOS_STATUS_E_NOMEM;
6925 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6927 if (NULL == pWdaParams)
6928 {
6929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 VOS_ASSERT(0);
6932 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006933 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6934 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006935 return VOS_STATUS_E_NOMEM;
6936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6938 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6939 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6940 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006941 // For CCX and 11R Roaming
6942 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6943 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6944 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006945 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6946 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006947
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 /* Store param pointer as passed in by caller */
6949 /* store Params pass it to WDI */
6950 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006951 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006952 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006953 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006954 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 if (IS_WDI_STATUS_FAILURE(status))
6956 {
6957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6958 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006960 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006961 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006962 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006963 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006964 return CONVERT_WDI2VOS_STATUS(status);
6965}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006966
6967
6968static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6969 WDI_Status wdiStatus,
6970 tExitBmpsParams *pExitBmpsReqParams)
6971{
6972 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6973
6974 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6975}
6976
6977
Jeff Johnson295189b2012-06-20 16:38:30 -07006978/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006979 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 * send Exit BMPS RSP back to PE
6981 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006982void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006983{
6984 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6985 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006986 tExitBmpsParams *pExitBmpsRspParams;
6987
Jeff Johnson295189b2012-06-20 16:38:30 -07006988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006989 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 if(NULL == pWdaParams)
6991 {
6992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006993 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_ASSERT(0) ;
6995 return ;
6996 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006997
6998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6999 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7000
7001 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007002 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007003
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7005 vos_mem_free(pWdaParams) ;
7006
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007007 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 return ;
7009}
Jeff Johnson295189b2012-06-20 16:38:30 -07007010/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007011 * FUNCTION: WDA_ExitBmpsReqCallback
7012 * Free memory and send Exit BMPS RSP back to PE.
7013 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7014 */
7015void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7016{
7017 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7018 tWDA_CbContext *pWDA;
7019 tExitBmpsParams *pExitBmpsRspParams;
7020
7021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7022 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7023
7024 if(NULL == pWdaParams)
7025 {
7026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7027 "%s: pWdaParams received NULL", __func__);
7028 VOS_ASSERT(0);
7029 return;
7030 }
7031
7032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7033 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7034 pExitBmpsRspParams->status = wdiStatus;
7035
7036 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7037 {
7038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7039 vos_mem_free(pWdaParams);
7040 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7041 }
7042
7043 return;
7044}
7045/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 * FUNCTION: WDA_ProcessExitBmpsReq
7047 * Request to WDI to Exit BMPS power state.
7048 */
7049VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7050 tExitBmpsParams *pExitBmpsReqParams)
7051{
7052 WDI_Status status = WDI_STATUS_SUCCESS ;
7053 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7054 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7055 sizeof(WDI_ExitBmpsReqParamsType)) ;
7056 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 if(NULL == wdiExitBmpsReqParams)
7060 {
7061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007063 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007064 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007065 return VOS_STATUS_E_NOMEM;
7066 }
7067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7068 if(NULL == pWdaParams)
7069 {
7070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 VOS_ASSERT(0);
7073 vos_mem_free(wdiExitBmpsReqParams);
7074 return VOS_STATUS_E_NOMEM;
7075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007077
7078 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7079
Yue Ma7f44bbe2013-04-12 11:47:39 -07007080 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7081 wdiExitBmpsReqParams->pUserData = pWdaParams;
7082
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 /* Store param pointer as passed in by caller */
7084 /* store Params pass it to WDI */
7085 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7086 pWdaParams->pWdaContext = pWDA;
7087 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007089 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 if(IS_WDI_STATUS_FAILURE(status))
7091 {
7092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7093 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7095 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007096 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 return CONVERT_WDI2VOS_STATUS(status) ;
7099}
Jeff Johnson295189b2012-06-20 16:38:30 -07007100/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007101 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 * send Enter UAPSD RSP back to PE
7103 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007104void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007105{
7106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7107 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007108 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 if(NULL == pWdaParams)
7112 {
7113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 VOS_ASSERT(0) ;
7116 return ;
7117 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007118
7119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7120 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7121
7122 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007123 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007124
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7126 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007127 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 return ;
7129}
Jeff Johnson295189b2012-06-20 16:38:30 -07007130/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007131 * FUNCTION: WDA_EnterUapsdReqCallback
7132 * Free memory and send Enter UAPSD RSP back to PE.
7133 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7134 */
7135void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7136{
7137 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7138 tWDA_CbContext *pWDA;
7139 tUapsdParams *pEnterUapsdRsqParams;
7140
7141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7142 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7143
7144 if(NULL == pWdaParams)
7145 {
7146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7147 "%s: pWdaParams received NULL", __func__);
7148 VOS_ASSERT(0);
7149 return;
7150 }
7151
7152 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7153 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7154 pEnterUapsdRsqParams->status = wdiStatus;
7155
7156 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7157 {
7158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7159 vos_mem_free(pWdaParams);
7160 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7161 }
7162
7163 return;
7164}
7165/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 * FUNCTION: WDA_ProcessEnterUapsdReq
7167 * Request to WDI to Enter UAPSD power state.
7168 */
7169VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7170 tUapsdParams *pEnterUapsdReqParams)
7171{
7172 WDI_Status status = WDI_STATUS_SUCCESS ;
7173 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7174 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7175 sizeof(WDI_EnterUapsdReqParamsType)) ;
7176 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007178 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 if(NULL == wdiEnterUapsdReqParams)
7180 {
7181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 VOS_ASSERT(0);
7184 return VOS_STATUS_E_NOMEM;
7185 }
7186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7187 if(NULL == pWdaParams)
7188 {
7189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 VOS_ASSERT(0);
7192 vos_mem_free(wdiEnterUapsdReqParams);
7193 return VOS_STATUS_E_NOMEM;
7194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7196 pEnterUapsdReqParams->beDeliveryEnabled;
7197 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7198 pEnterUapsdReqParams->beTriggerEnabled;
7199 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7200 pEnterUapsdReqParams->bkDeliveryEnabled;
7201 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7202 pEnterUapsdReqParams->bkTriggerEnabled;
7203 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7204 pEnterUapsdReqParams->viDeliveryEnabled;
7205 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7206 pEnterUapsdReqParams->viTriggerEnabled;
7207 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7208 pEnterUapsdReqParams->voDeliveryEnabled;
7209 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7210 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007211 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007212
Yue Ma7f44bbe2013-04-12 11:47:39 -07007213 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7214 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007215
Jeff Johnson295189b2012-06-20 16:38:30 -07007216 /* Store param pointer as passed in by caller */
7217 /* store Params pass it to WDI */
7218 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7219 pWdaParams->pWdaContext = pWDA;
7220 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007222 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 if(IS_WDI_STATUS_FAILURE(status))
7224 {
7225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7226 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7227 vos_mem_free(pWdaParams->wdaMsgParam) ;
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7229 vos_mem_free(pWdaParams) ;
7230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 return CONVERT_WDI2VOS_STATUS(status) ;
7232}
Jeff Johnson295189b2012-06-20 16:38:30 -07007233/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007234 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007235 * send Exit UAPSD RSP back to PE
7236 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007237void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007238{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007239
7240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7241 tWDA_CbContext *pWDA;
7242 tExitUapsdParams *pExitUapsdRspParams;
7243
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007245 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007246 if(NULL == pWdaParams)
7247 {
7248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007250 VOS_ASSERT(0);
7251 return;
7252 }
7253
7254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7255 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7256
7257 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007258 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007259
7260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7261 vos_mem_free(pWdaParams) ;
7262
7263 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 return ;
7265}
Jeff Johnson295189b2012-06-20 16:38:30 -07007266/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007267 * FUNCTION: WDA_ExitUapsdReqCallback
7268 * Free memory and send Exit UAPSD RSP back to PE.
7269 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7270 */
7271void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7272{
7273 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7274 tWDA_CbContext *pWDA;
7275 tExitUapsdParams *pExitUapsdRspParams;
7276
7277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7278 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7279
7280 if(NULL == pWdaParams)
7281 {
7282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7283 "%s: pWdaParams received NULL", __func__);
7284 VOS_ASSERT(0);
7285 return;
7286 }
7287
7288 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7289 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7290 pExitUapsdRspParams->status = wdiStatus;
7291
7292 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7293 {
7294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7295 vos_mem_free(pWdaParams);
7296 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7297 }
7298
7299 return;
7300}
7301/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007302 * FUNCTION: WDA_ProcessExitUapsdReq
7303 * Request to WDI to Exit UAPSD power state.
7304 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007305VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7306 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007307{
7308 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007309 tWDA_ReqParams *pWdaParams ;
7310 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7311 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7312 sizeof(WDI_ExitUapsdReqParamsType)) ;
7313
Jeff Johnson295189b2012-06-20 16:38:30 -07007314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007315 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007316
7317 if(NULL == wdiExitUapsdReqParams)
7318 {
7319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007320 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007321 VOS_ASSERT(0);
7322 return VOS_STATUS_E_NOMEM;
7323 }
7324 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7325 if(NULL == pWdaParams)
7326 {
7327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007328 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007329 VOS_ASSERT(0);
7330 vos_mem_free(wdiExitUapsdReqParams);
7331 return VOS_STATUS_E_NOMEM;
7332 }
7333
7334 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007335 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7336 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007337
7338 /* Store param pointer as passed in by caller */
7339 /* store Params pass it to WDI */
7340 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7341 pWdaParams->pWdaContext = pWDA;
7342 pWdaParams->wdaMsgParam = pExitUapsdParams;
7343
Yue Ma7f44bbe2013-04-12 11:47:39 -07007344 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 if(IS_WDI_STATUS_FAILURE(status))
7346 {
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7348 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007349 vos_mem_free(pWdaParams->wdaMsgParam) ;
7350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7351 vos_mem_free(pWdaParams) ;
7352
Jeff Johnson295189b2012-06-20 16:38:30 -07007353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007354 return CONVERT_WDI2VOS_STATUS(status) ;
7355}
7356
Jeff Johnson295189b2012-06-20 16:38:30 -07007357/*
7358 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7359 *
7360 */
7361void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7362{
7363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007365 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 if(NULL == pWdaParams)
7367 {
7368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007369 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 VOS_ASSERT(0) ;
7371 return ;
7372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 if( pWdaParams != NULL )
7374 {
7375 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7376 {
7377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7378 }
7379 if( pWdaParams->wdaMsgParam != NULL )
7380 {
7381 vos_mem_free(pWdaParams->wdaMsgParam) ;
7382 }
7383 vos_mem_free(pWdaParams) ;
7384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 return ;
7386}
Jeff Johnson295189b2012-06-20 16:38:30 -07007387/*
7388 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7389 * Request to WDI to set the power save params at start.
7390 */
7391VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7392 tSirPowerSaveCfg *pPowerSaveCfg)
7393{
7394 WDI_Status status = WDI_STATUS_SUCCESS ;
7395 tHalCfg *tlvStruct = NULL ;
7396 tANI_U8 *tlvStructStart = NULL ;
7397 v_PVOID_t *configParam;
7398 tANI_U32 configParamSize;
7399 tANI_U32 *configDataValue;
7400 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7401 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007403 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7405 {
7406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007409 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 return VOS_STATUS_E_FAILURE;
7411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7413 if (NULL == wdiPowerSaveCfg)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007416 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007418 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 return VOS_STATUS_E_NOMEM;
7420 }
7421 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7422 if(NULL == pWdaParams)
7423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 VOS_ASSERT(0);
7427 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007428 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 return VOS_STATUS_E_NOMEM;
7430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007431 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7432 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 if(NULL == configParam)
7434 {
7435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007436 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007437 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 vos_mem_free(pWdaParams);
7439 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007440 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 return VOS_STATUS_E_NOMEM;
7442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 vos_mem_set(configParam, configParamSize, 0);
7444 wdiPowerSaveCfg->pConfigBuffer = configParam;
7445 tlvStruct = (tHalCfg *)configParam;
7446 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7448 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7449 tlvStruct->length = sizeof(tANI_U32);
7450 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7451 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7453 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007454 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7455 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7456 tlvStruct->length = sizeof(tANI_U32);
7457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7458 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7460 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7462 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7463 tlvStruct->length = sizeof(tANI_U32);
7464 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7465 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7467 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7469 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7470 tlvStruct->length = sizeof(tANI_U32);
7471 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7472 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007473 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7474 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7476 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7477 tlvStruct->length = sizeof(tANI_U32);
7478 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7479 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7481 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7483 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7484 tlvStruct->length = sizeof(tANI_U32);
7485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7486 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7488 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7490 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7491 tlvStruct->length = sizeof(tANI_U32);
7492 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7493 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7495 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7497 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7498 tlvStruct->length = sizeof(tANI_U32);
7499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7500 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7501 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7502 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7504 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7505 tlvStruct->length = sizeof(tANI_U32);
7506 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7507 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7508 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7509 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7511 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7512 tlvStruct->length = sizeof(tANI_U32);
7513 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7514 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7516 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7518 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7519 tlvStruct->length = sizeof(tANI_U32);
7520 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7521 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7523 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007526 /* store Params pass it to WDI */
7527 pWdaParams->wdaMsgParam = configParam;
7528 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7529 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7531 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007532 if(IS_WDI_STATUS_FAILURE(status))
7533 {
7534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7535 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7536 vos_mem_free(pWdaParams->wdaMsgParam);
7537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7538 vos_mem_free(pWdaParams);
7539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 return CONVERT_WDI2VOS_STATUS(status);
7542}
Jeff Johnson295189b2012-06-20 16:38:30 -07007543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007544 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 *
7546 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007547void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007548{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7550
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007552 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007553
7554 if(NULL == pWdaParams)
7555 {
7556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7557 "%s: pWdaParams received NULL", __func__);
7558 VOS_ASSERT(0);
7559 return ;
7560 }
7561
7562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 vos_mem_free(pWdaParams);
7564
Jeff Johnson295189b2012-06-20 16:38:30 -07007565 return ;
7566}
Jeff Johnson295189b2012-06-20 16:38:30 -07007567/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007568 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7569 * Free memory.
7570 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7571 */
7572void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7573{
7574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7575
7576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7577 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7578
7579 if(NULL == pWdaParams)
7580 {
7581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7582 "%s: pWdaParams received NULL", __func__);
7583 VOS_ASSERT(0);
7584 return;
7585 }
7586
7587 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7588 {
7589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7590 vos_mem_free(pWdaParams);
7591 }
7592
7593 return;
7594}
7595/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007596 * FUNCTION: WDA_SetUapsdAcParamsReq
7597 * Request to WDI to set the UAPSD params for an ac (sta mode).
7598 */
7599VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7600 tUapsdInfo *pUapsdInfo)
7601{
7602 WDI_Status status = WDI_STATUS_SUCCESS;
7603 tWDA_CbContext *pWDA = NULL ;
7604 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7605 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7606 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7607 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007609 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007610 if(NULL == wdiUapsdParams)
7611 {
7612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007613 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 VOS_ASSERT(0);
7615 return VOS_STATUS_E_NOMEM;
7616 }
7617 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7618 if(NULL == pWdaParams)
7619 {
7620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007621 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 VOS_ASSERT(0);
7623 vos_mem_free(wdiUapsdParams);
7624 return VOS_STATUS_E_NOMEM;
7625 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007626 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7627 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7628 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7629 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7630 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7631 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007632 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7633 wdiUapsdParams->pUserData = pWdaParams;
7634
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007636 pWdaParams->pWdaContext = pWDA;
7637 /* Store param pointer as passed in by caller */
7638 pWdaParams->wdaMsgParam = pUapsdInfo;
7639 /* store Params pass it to WDI */
7640 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007641 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007642 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007643 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 if(IS_WDI_STATUS_FAILURE(status))
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7647 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7649 vos_mem_free(pWdaParams);
7650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7652 return VOS_STATUS_SUCCESS;
7653 else
7654 return VOS_STATUS_E_FAILURE;
7655
Jeff Johnson295189b2012-06-20 16:38:30 -07007656}
7657/*
7658 * FUNCTION: WDA_ClearUapsdAcParamsReq
7659 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7660 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7661 * and again enter the UPASD with the modified params. Hence the disable
7662 * function was kept empty.
7663 *
7664 */
7665VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7666{
7667 /* do nothing */
7668 return VOS_STATUS_SUCCESS;
7669}
Jeff Johnson295189b2012-06-20 16:38:30 -07007670/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007671 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007672 *
7673 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007674void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007675{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007676 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7677
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007680
7681 if(NULL == pWdaParams)
7682 {
7683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007684 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007685 VOS_ASSERT(0) ;
7686 return ;
7687 }
7688
7689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7690 vos_mem_free(pWdaParams->wdaMsgParam);
7691 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007692
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 //print a msg, nothing else to do
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007695 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 return ;
7697}
Jeff Johnson295189b2012-06-20 16:38:30 -07007698/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007699 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7700 * Free memory.
7701 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7702 */
7703void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7704{
7705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7706
7707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7708 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7709
7710 if(NULL == pWdaParams)
7711 {
7712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7713 "%s: pWdaParams received NULL", __func__);
7714 VOS_ASSERT(0);
7715 return;
7716 }
7717
7718 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7719 {
7720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7721 vos_mem_free(pWdaParams->wdaMsgParam);
7722 vos_mem_free(pWdaParams);
7723 }
7724
7725 return;
7726}
7727/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 * FUNCTION: WDA_UpdateUapsdParamsReq
7729 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7730 */
7731VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7732 tUpdateUapsdParams* pUpdateUapsdInfo)
7733{
7734 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007735 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7737 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7738 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007739 tWDA_ReqParams *pWdaParams = NULL;
7740
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007742 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007743 if(NULL == wdiUpdateUapsdParams)
7744 {
7745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007747 VOS_ASSERT(0);
7748 return VOS_STATUS_E_NOMEM;
7749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7751 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7752 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007753 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7754 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007755
7756 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7757 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 {
7759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007762 vos_mem_free(pUpdateUapsdInfo);
7763 vos_mem_free(wdiUpdateUapsdParams);
7764 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007766 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007767 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007769 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7770 pWdaParams->pWdaContext = pWDA;
7771
Jeff Johnson43971f52012-07-17 12:26:56 -07007772 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007773 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007774 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775
Jeff Johnson43971f52012-07-17 12:26:56 -07007776 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7779 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007780 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7781 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7782 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007783 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007785 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786}
Jeff Johnson295189b2012-06-20 16:38:30 -07007787/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007788 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 *
7790 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007791void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007792{
7793 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 if(WDI_STATUS_SUCCESS != wdiStatus)
7797 {
7798 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007799 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 if(NULL == pWdaParams)
7802 {
7803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007804 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 VOS_ASSERT(0) ;
7806 return ;
7807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7809 vos_mem_free(pWdaParams->wdaMsgParam);
7810 vos_mem_free(pWdaParams);
7811 return ;
7812}
Jeff Johnson295189b2012-06-20 16:38:30 -07007813/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007814 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7815 * Free memory.
7816 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7817 */
7818void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7819{
7820 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7821
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7823 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7824
7825 if(NULL == pWdaParams)
7826 {
7827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7828 "%s: pWdaParams received NULL", __func__);
7829 VOS_ASSERT(0);
7830 return;
7831 }
7832
7833 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7834 {
7835 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7836 vos_mem_free(pWdaParams->wdaMsgParam);
7837 vos_mem_free(pWdaParams);
7838 }
7839
7840 return;
7841}
7842/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7844 *
7845 */
7846VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7847 tSirWlanSetRxpFilters *pWlanSuspendParam)
7848{
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007850 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7852 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7853 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7854 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007856 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857 if(NULL == wdiRxpFilterParams)
7858 {
7859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007860 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 VOS_ASSERT(0);
7862 vos_mem_free(pWlanSuspendParam);
7863 return VOS_STATUS_E_NOMEM;
7864 }
7865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7866 if(NULL == pWdaParams)
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 VOS_ASSERT(0);
7871 vos_mem_free(wdiRxpFilterParams);
7872 vos_mem_free(pWlanSuspendParam);
7873 return VOS_STATUS_E_NOMEM;
7874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7876 pWlanSuspendParam->setMcstBcstFilter;
7877 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7878 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7879
Yue Ma7f44bbe2013-04-12 11:47:39 -07007880 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7881 wdiRxpFilterParams->pUserData = pWdaParams;
7882
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 pWdaParams->pWdaContext = pWDA;
7884 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7885 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007886 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007887 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007889 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 {
7891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7892 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007893 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007894 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7895 vos_mem_free(pWdaParams->wdaMsgParam);
7896 vos_mem_free(pWdaParams);
7897 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007898 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007899}
Jeff Johnson295189b2012-06-20 16:38:30 -07007900/*
7901 * FUNCTION: WDA_WdiIndicationCallback
7902 *
7903 */
7904void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7905 void* pUserData)
7906{
7907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007908 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007909}
Jeff Johnson295189b2012-06-20 16:38:30 -07007910/*
7911 * FUNCTION: WDA_ProcessWlanSuspendInd
7912 *
7913 */
7914VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7915 tSirWlanSuspendParam *pWlanSuspendParam)
7916{
7917 WDI_Status wdiStatus;
7918 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007920 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7922 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7923 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7924 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7927 if(WDI_STATUS_PENDING == wdiStatus)
7928 {
7929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007930 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 }
7932 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007935 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 vos_mem_free(pWlanSuspendParam);
7938 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7939}
7940
Chet Lanctot186b5732013-03-18 10:26:30 -07007941#ifdef WLAN_FEATURE_11W
7942/*
7943 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7944 *
7945 */
7946VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7947 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7948{
7949 WDI_Status wdiStatus;
7950 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7952 "------> %s ", __func__);
7953
7954 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7955 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7956 sizeof(tSirMacAddr));
7957
7958 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7959 wdiExclUnencryptParams.pUserData = pWDA;
7960
7961 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7962 if(WDI_STATUS_PENDING == wdiStatus)
7963 {
7964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7965 "Pending received for %s:%d ", __func__, __LINE__ );
7966 }
7967 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7968 {
7969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7970 "Failure in %s:%d ", __func__, __LINE__ );
7971 }
7972 vos_mem_free(pExclUnencryptParam);
7973 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7974}
7975#endif
7976
Jeff Johnson295189b2012-06-20 16:38:30 -07007977/*
7978 * FUNCTION: WDA_ProcessWlanResumeCallback
7979 *
7980 */
7981void WDA_ProcessWlanResumeCallback(
7982 WDI_SuspendResumeRspParamsType *resumeRspParams,
7983 void* pUserData)
7984{
7985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 if(NULL == pWdaParams)
7989 {
7990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 VOS_ASSERT(0) ;
7993 return ;
7994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7996 {
7997 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007998 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8001 vos_mem_free(pWdaParams->wdaMsgParam);
8002 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 return ;
8004}
Jeff Johnson295189b2012-06-20 16:38:30 -07008005/*
8006 * FUNCTION: WDA_ProcessWlanResumeReq
8007 *
8008 */
8009VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8010 tSirWlanResumeParam *pWlanResumeParam)
8011{
8012 WDI_Status wdiStatus;
8013 WDI_ResumeParamsType *wdiResumeParams =
8014 (WDI_ResumeParamsType *)vos_mem_malloc(
8015 sizeof(WDI_ResumeParamsType) ) ;
8016 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 if(NULL == wdiResumeParams)
8020 {
8021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_ASSERT(0);
8024 return VOS_STATUS_E_NOMEM;
8025 }
8026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8027 if(NULL == pWdaParams)
8028 {
8029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 VOS_ASSERT(0);
8032 vos_mem_free(wdiResumeParams);
8033 return VOS_STATUS_E_NOMEM;
8034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8036 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 wdiResumeParams->wdiReqStatusCB = NULL;
8039 pWdaParams->wdaMsgParam = pWlanResumeParam;
8040 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8041 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8043 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8044 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8048 "Failure in Host Resume REQ WDI API, free all the memory " );
8049 VOS_ASSERT(0);
8050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8051 vos_mem_free(pWdaParams->wdaMsgParam);
8052 vos_mem_free(pWdaParams);
8053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8055}
8056
Jeff Johnson295189b2012-06-20 16:38:30 -07008057/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008058 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 *
8060 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008061void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008062{
8063 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008065 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008066 if(NULL == pWdaParams)
8067 {
8068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 VOS_ASSERT(0) ;
8071 return ;
8072 }
8073
8074 vos_mem_free(pWdaParams->wdaMsgParam) ;
8075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8076 vos_mem_free(pWdaParams) ;
8077 /*
8078 * No respone required for SetBeaconFilter req so just free the request
8079 * param here
8080 */
8081
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 return ;
8083}
Jeff Johnson295189b2012-06-20 16:38:30 -07008084/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008085 * FUNCTION: WDA_SetBeaconFilterReqCallback
8086 * Free memory.
8087 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8088 */
8089void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8090{
8091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8092
8093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8094 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8095
8096 if(NULL == pWdaParams)
8097 {
8098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8099 "%s: pWdaParams received NULL", __func__);
8100 VOS_ASSERT(0);
8101 return;
8102 }
8103
8104 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8105 {
8106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8107 vos_mem_free(pWdaParams->wdaMsgParam);
8108 vos_mem_free(pWdaParams);
8109 }
8110
8111 return;
8112}
8113/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 * FUNCTION: WDA_SetBeaconFilterReq
8115 * Request to WDI to send the beacon filtering related information.
8116 */
8117VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8118 tBeaconFilterMsg* pBeaconFilterInfo)
8119{
8120 WDI_Status status = WDI_STATUS_SUCCESS;
8121 tANI_U8 *dstPtr, *srcPtr;
8122 tANI_U8 filterLength;
8123 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8124 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8125 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 if(NULL == wdiBeaconFilterInfo)
8130 {
8131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 VOS_ASSERT(0);
8134 return VOS_STATUS_E_NOMEM;
8135 }
8136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8137 if(NULL == pWdaParams)
8138 {
8139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 VOS_ASSERT(0);
8142 vos_mem_free(wdiBeaconFilterInfo);
8143 return VOS_STATUS_E_NOMEM;
8144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008145 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8146 pBeaconFilterInfo->beaconInterval;
8147 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8148 pBeaconFilterInfo->capabilityInfo;
8149 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8150 pBeaconFilterInfo->capabilityMask;
8151 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008152
8153 //Fill the BssIdx
8154 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8155
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 //Fill structure with info contained in the beaconFilterTable
8157 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8158 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8159 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8160 if(WDI_BEACON_FILTER_LEN < filterLength)
8161 {
8162 filterLength = WDI_BEACON_FILTER_LEN;
8163 }
8164 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008165 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8166 wdiBeaconFilterInfo->pUserData = pWdaParams;
8167
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 /* Store param pointer as passed in by caller */
8169 /* store Params pass it to WDI */
8170 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8171 pWdaParams->pWdaContext = pWDA;
8172 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8173
Jeff Johnson295189b2012-06-20 16:38:30 -07008174 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008175 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008176 if(IS_WDI_STATUS_FAILURE(status))
8177 {
8178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8179 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8180 vos_mem_free(pWdaParams->wdaMsgParam) ;
8181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8182 vos_mem_free(pWdaParams) ;
8183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008184 return CONVERT_WDI2VOS_STATUS(status) ;
8185}
Jeff Johnson295189b2012-06-20 16:38:30 -07008186/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008187 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 *
8189 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008190void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008191{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8193
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008196
8197 if(NULL == pWdaParams)
8198 {
8199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008200 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008201 VOS_ASSERT(0) ;
8202 return ;
8203 }
8204
8205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8206 vos_mem_free(pWdaParams->wdaMsgParam);
8207 vos_mem_free(pWdaParams);
8208
Jeff Johnson295189b2012-06-20 16:38:30 -07008209 //print a msg, nothing else to do
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008211 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008212 return ;
8213}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008214/*
8215 * FUNCTION: WDA_RemBeaconFilterReqCallback
8216 * Free memory.
8217 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8218 */
8219void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8220{
8221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8222
8223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8224 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8225
8226 if(NULL == pWdaParams)
8227 {
8228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8229 "%s: pWdaParams received NULL", __func__);
8230 VOS_ASSERT(0);
8231 return;
8232 }
8233
8234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8235 {
8236 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8237 vos_mem_free(pWdaParams->wdaMsgParam);
8238 vos_mem_free(pWdaParams);
8239 }
8240
8241 return;
8242}
Jeff Johnson295189b2012-06-20 16:38:30 -07008243 // TODO: PE does not have this feature for now implemented,
8244 // but the support for removing beacon filter exists between
8245 // HAL and FW. This function can be called whenever PE defines
8246 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008247/*
8248 * FUNCTION: WDA_RemBeaconFilterReq
8249 * Request to WDI to send the removal of beacon filtering related information.
8250 */
8251VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8252 tRemBeaconFilterMsg* pBeaconFilterInfo)
8253{
8254 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008255 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8257 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8258 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008259 tWDA_ReqParams *pWdaParams ;
8260
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008262 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 if(NULL == wdiBeaconFilterInfo)
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008266 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 VOS_ASSERT(0);
8268 return VOS_STATUS_E_NOMEM;
8269 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008270 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8271 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 {
8273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008275 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008276 vos_mem_free(wdiBeaconFilterInfo);
8277 vos_mem_free(pBeaconFilterInfo);
8278 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008280
8281 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8282 pBeaconFilterInfo->ucIeCount;
8283 //Fill structure with info contained in the ucRemIeId
8284 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8285 pBeaconFilterInfo->ucRemIeId,
8286 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8287 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8288 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008289
8290 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008291 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008293 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8294
8295 pWdaParams->pWdaContext = pWDA;
8296
Jeff Johnson43971f52012-07-17 12:26:56 -07008297 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008298 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008299 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 {
8301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8302 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008303 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8305 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008306 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008308 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008309}
Jeff Johnson295189b2012-06-20 16:38:30 -07008310/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008311 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 *
8313 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008314void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008315{
8316 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 if(NULL == pWdaParams)
8320 {
8321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008322 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 VOS_ASSERT(0) ;
8324 return ;
8325 }
8326
8327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8328 vos_mem_free(pWdaParams) ;
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 return ;
8331}
Jeff Johnson295189b2012-06-20 16:38:30 -07008332/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008333 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8334 * Free memory.
8335 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8336 */
8337void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8338{
8339 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8340
8341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8342 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8343
8344 if(NULL == pWdaParams)
8345 {
8346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8347 "%s: pWdaParams received NULL", __func__);
8348 VOS_ASSERT(0);
8349 return;
8350 }
8351
8352 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8353 {
8354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8355 vos_mem_free(pWdaParams);
8356 }
8357
8358 return;
8359}
8360/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 * FUNCTION: WDA_SetRSSIThresholdsReq
8362 * Request to WDI to set the RSSI thresholds (sta mode).
8363 */
8364VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8365{
8366 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008367 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008368 tWDA_CbContext *pWDA = NULL ;
8369 v_PVOID_t pVosContext = NULL;
8370 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8371 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8372 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8373 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 if(NULL == wdiRSSIThresholdsInfo)
8377 {
8378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 VOS_ASSERT(0);
8381 return VOS_STATUS_E_NOMEM;
8382 }
8383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8384 if(NULL == pWdaParams)
8385 {
8386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 VOS_ASSERT(0);
8389 vos_mem_free(wdiRSSIThresholdsInfo);
8390 return VOS_STATUS_E_NOMEM;
8391 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8394 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8395 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8397 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8398 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8400 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8401 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008402 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8403 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8405 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8406
Jeff Johnson295189b2012-06-20 16:38:30 -07008407 /* Store param pointer as passed in by caller */
8408 /* store Params pass it to WDI */
8409 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8410 pWdaParams->pWdaContext = pWDA;
8411 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008412 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008413 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008414 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 {
8416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8417 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008418 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8420 vos_mem_free(pWdaParams) ;
8421 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008422 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008423
8424}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008425/*
Yue Madb90ac12013-04-04 13:39:13 -07008426 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008427 *
8428 */
Yue Madb90ac12013-04-04 13:39:13 -07008429void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008430{
8431 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8432
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008434 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 if(NULL == pWdaParams)
8436 {
8437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008438 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008439 VOS_ASSERT(0) ;
8440 return ;
8441 }
8442
8443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams->wdaMsgParam);
8445 vos_mem_free(pWdaParams) ;
8446
8447 //print a msg, nothing else to do
8448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008449 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 return ;
8451}
Jeff Johnson295189b2012-06-20 16:38:30 -07008452/*
Yue Madb90ac12013-04-04 13:39:13 -07008453 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008454 * Free memory.
8455 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008456 */
8457void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8458{
8459 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8460
8461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8462 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8463
8464 if(NULL == pWdaParams)
8465 {
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8467 "%s: Invalid pWdaParams pointer", __func__);
8468 VOS_ASSERT(0);
8469 return;
8470 }
8471
8472 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8473 {
8474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8475 vos_mem_free(pWdaParams->wdaMsgParam);
8476 vos_mem_free(pWdaParams);
8477 }
8478
8479 return;
8480}
8481/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 * FUNCTION: WDA_ProcessHostOffloadReq
8483 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8484 * to broadcast traffic (sta mode).
8485 */
8486VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8487 tSirHostOffloadReq *pHostOffloadParams)
8488{
8489 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008490 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8492 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8493 sizeof(WDI_HostOffloadReqParamsType)) ;
8494 tWDA_ReqParams *pWdaParams ;
8495
8496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008497 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008498
8499 if(NULL == wdiHostOffloadInfo)
8500 {
8501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 VOS_ASSERT(0);
8504 return VOS_STATUS_E_NOMEM;
8505 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8507 if(NULL == pWdaParams)
8508 {
8509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 VOS_ASSERT(0);
8512 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008513 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008514 return VOS_STATUS_E_NOMEM;
8515 }
8516
8517 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8518 pHostOffloadParams->offloadType;
8519 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8520 pHostOffloadParams->enableOrDisable;
8521
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008522 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8523 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8524
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8526 {
8527 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8528 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8529 pHostOffloadParams->params.hostIpv4Addr,
8530 4);
8531 break;
8532 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8533 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8534 pHostOffloadParams->params.hostIpv6Addr,
8535 16);
8536 break;
8537 case SIR_IPV6_NS_OFFLOAD:
8538 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8539 pHostOffloadParams->params.hostIpv6Addr,
8540 16);
8541
8542#ifdef WLAN_NS_OFFLOAD
8543 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8544 {
8545 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8546 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8547 16);
8548 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8549 }
8550 else
8551 {
8552 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8553 }
8554
8555 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8556 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8557 16);
8558 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8559 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8560 6);
8561
8562 //Only two are supported so let's go through them without a loop
8563 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8564 {
8565 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8566 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8567 16);
8568 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8569 }
8570 else
8571 {
8572 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8573 }
8574
8575 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8576 {
8577 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8578 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8579 16);
8580 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8581 }
8582 else
8583 {
8584 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8585 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308586 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8587 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 break;
8589#endif //WLAN_NS_OFFLOAD
8590 default:
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8593 "No Handling for Offload Type %x in WDA "
8594 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8595 //WDA_VOS_ASSERT(0) ;
8596 }
8597 }
Yue Madb90ac12013-04-04 13:39:13 -07008598 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8599 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008600
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008602 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008603 /* store Params pass it to WDI */
8604 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8605 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008606
Jeff Johnson295189b2012-06-20 16:38:30 -07008607
Jeff Johnson43971f52012-07-17 12:26:56 -07008608 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008609 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008610
Jeff Johnson43971f52012-07-17 12:26:56 -07008611 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 {
8613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8614 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008615 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8617 vos_mem_free(pWdaParams->wdaMsgParam);
8618 vos_mem_free(pWdaParams) ;
8619 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008620 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008621
8622}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008623/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008624 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008625 *
8626 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008627void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008628{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008629 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8630
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008632 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008633
8634 if(NULL == pWdaParams)
8635 {
8636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008637 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008638 VOS_ASSERT(0) ;
8639 return ;
8640 }
8641
8642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8643 vos_mem_free(pWdaParams->wdaMsgParam);
8644 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008645
Jeff Johnson295189b2012-06-20 16:38:30 -07008646 //print a msg, nothing else to do
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008648 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 return ;
8650}
Jeff Johnson295189b2012-06-20 16:38:30 -07008651/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008652 * FUNCTION: WDA_KeepAliveReqCallback
8653 * Free memory.
8654 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8655 */
8656void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8657{
8658 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8659
8660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8661 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8662
8663 if(NULL == pWdaParams)
8664 {
8665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8666 "%s: pWdaParams received NULL", __func__);
8667 VOS_ASSERT(0);
8668 return;
8669 }
8670
8671 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8672 {
8673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8674 vos_mem_free(pWdaParams->wdaMsgParam);
8675 vos_mem_free(pWdaParams);
8676 }
8677
8678 return;
8679}
8680/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008681 * FUNCTION: WDA_ProcessKeepAliveReq
8682 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8683 * wakeup due to broadcast traffic (sta mode).
8684 */
8685VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8686 tSirKeepAliveReq *pKeepAliveParams)
8687{
8688 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008689 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008690 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8691 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8692 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008693 tWDA_ReqParams *pWdaParams;
8694
Jeff Johnson295189b2012-06-20 16:38:30 -07008695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008696 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 if(NULL == wdiKeepAliveInfo)
8698 {
8699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008701 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008702 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 return VOS_STATUS_E_NOMEM;
8704 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008705
8706 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8707 if(NULL == pWdaParams)
8708 {
8709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008710 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008711 VOS_ASSERT(0);
8712 vos_mem_free(wdiKeepAliveInfo);
8713 vos_mem_free(pKeepAliveParams);
8714 return VOS_STATUS_E_NOMEM;
8715 }
8716
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8718 pKeepAliveParams->packetType;
8719 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8720 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008721
8722 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8723 pKeepAliveParams->bssId,
8724 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008725
8726 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8727 {
8728 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8729 pKeepAliveParams->hostIpv4Addr,
8730 SIR_IPV4_ADDR_LEN);
8731 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8732 pKeepAliveParams->destIpv4Addr,
8733 SIR_IPV4_ADDR_LEN);
8734 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8735 pKeepAliveParams->destMacAddr,
8736 SIR_MAC_ADDR_LEN);
8737 }
8738 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8739 {
8740 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8741 SIR_IPV4_ADDR_LEN,
8742 0);
8743 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8744 SIR_IPV4_ADDR_LEN,
8745 0);
8746 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8747 SIR_MAC_ADDR_LEN,
8748 0);
8749 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008750 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8751 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008752
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008754 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008755 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8757 pWdaParams->pWdaContext = pWDA;
8758
Jeff Johnson295189b2012-06-20 16:38:30 -07008759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8760 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8761 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8762 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8763 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8765 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8766 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8767 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8768 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8770 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8771 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8772 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8773 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8774 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8775 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8776 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8778 "TimePeriod %d PacketType %d",
8779 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8780 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008781 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008782 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008783
Jeff Johnson43971f52012-07-17 12:26:56 -07008784 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008785 {
8786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8787 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008788 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008789 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8790 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008791 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008793 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008794
8795}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008796/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008797 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008798 *
8799 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008800void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008801 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8802 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008803{
8804 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 if(NULL == pWdaParams)
8808 {
8809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008810 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008811 VOS_ASSERT(0) ;
8812 return ;
8813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8815 vos_mem_free(pWdaParams->wdaMsgParam);
8816 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008817 return ;
8818}
Jeff Johnson295189b2012-06-20 16:38:30 -07008819/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008820 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8821 * Free memory.
8822 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8823 */
8824void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8825{
8826 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8827
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8829 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8830
8831 if(NULL == pWdaParams)
8832 {
8833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8834 "%s: pWdaParams received NULL", __func__);
8835 VOS_ASSERT(0);
8836 return;
8837 }
8838
8839 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8840 {
8841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8842 vos_mem_free(pWdaParams->wdaMsgParam);
8843 vos_mem_free(pWdaParams);
8844 }
8845
8846 return;
8847}
8848
8849/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8851 * Request to WDI to add WOWL Bcast pattern
8852 */
8853VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8854 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8855{
8856 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008857 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8859 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8860 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8861 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008863 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008864 if(NULL == wdiWowlAddBcPtrnInfo)
8865 {
8866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008867 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 VOS_ASSERT(0);
8869 return VOS_STATUS_E_NOMEM;
8870 }
8871 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8872 if(NULL == pWdaParams)
8873 {
8874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008876 VOS_ASSERT(0);
8877 vos_mem_free(wdiWowlAddBcPtrnInfo);
8878 return VOS_STATUS_E_NOMEM;
8879 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8881 pWowlAddBcPtrnParams->ucPatternId;
8882 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8883 pWowlAddBcPtrnParams->ucPatternByteOffset;
8884 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8885 pWowlAddBcPtrnParams->ucPatternMaskSize;
8886 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8887 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008888 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8889 {
8890 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8891 pWowlAddBcPtrnParams->ucPattern,
8892 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8893 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8894 pWowlAddBcPtrnParams->ucPatternMask,
8895 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8896 }
8897 else
8898 {
8899 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8900 pWowlAddBcPtrnParams->ucPattern,
8901 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8902 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8903 pWowlAddBcPtrnParams->ucPatternMask,
8904 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8905
8906 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8907 pWowlAddBcPtrnParams->ucPatternExt,
8908 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8909 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8910 pWowlAddBcPtrnParams->ucPatternMaskExt,
8911 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8912 }
8913
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008914 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8915 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8916
Yue Ma7f44bbe2013-04-12 11:47:39 -07008917 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8918 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 /* Store param pointer as passed in by caller */
8920 /* store Params pass it to WDI */
8921 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8922 pWdaParams->pWdaContext = pWDA;
8923 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008924 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008925 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008926 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 {
8928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8929 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008930 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 vos_mem_free(pWdaParams->wdaMsgParam) ;
8932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8933 vos_mem_free(pWdaParams) ;
8934 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008935 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008936
8937}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008938/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008939 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 *
8941 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008942void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008943 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8944 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008945{
8946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008948 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 if(NULL == pWdaParams)
8950 {
8951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008952 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 VOS_ASSERT(0) ;
8954 return ;
8955 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8957 vos_mem_free(pWdaParams->wdaMsgParam);
8958 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 return ;
8960}
Jeff Johnson295189b2012-06-20 16:38:30 -07008961/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008962 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8963 * Free memory.
8964 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8965 */
8966void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8967{
8968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8969
8970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8971 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8972
8973 if(NULL == pWdaParams)
8974 {
8975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8976 "%s: pWdaParams received NULL", __func__);
8977 VOS_ASSERT(0);
8978 return;
8979 }
8980
8981 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8982 {
8983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8984 vos_mem_free(pWdaParams->wdaMsgParam);
8985 vos_mem_free(pWdaParams);
8986 }
8987
8988 return;
8989}
8990/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008991 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8992 * Request to WDI to delete WOWL Bcast pattern
8993 */
8994VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8995 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8996{
8997 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008998 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9000 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9001 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9002 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009004 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009005 if(NULL == wdiWowlDelBcPtrnInfo)
9006 {
9007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009008 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 VOS_ASSERT(0);
9010 return VOS_STATUS_E_NOMEM;
9011 }
9012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9013 if(NULL == pWdaParams)
9014 {
9015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 VOS_ASSERT(0);
9018 vos_mem_free(wdiWowlDelBcPtrnInfo);
9019 return VOS_STATUS_E_NOMEM;
9020 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9022 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009023
9024 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9025 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9026
Yue Ma7f44bbe2013-04-12 11:47:39 -07009027 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9028 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 /* Store param pointer as passed in by caller */
9030 /* store Params pass it to WDI */
9031 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9032 pWdaParams->pWdaContext = pWDA;
9033 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009034 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009035 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009036 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 {
9038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9039 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009040 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009041 vos_mem_free(pWdaParams->wdaMsgParam) ;
9042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9043 vos_mem_free(pWdaParams) ;
9044 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009045 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046
9047}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009048/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009049 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 *
9051 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009052void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009053{
9054 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9055 tWDA_CbContext *pWDA;
9056 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 if(NULL == pWdaParams)
9060 {
9061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009062 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009063 VOS_ASSERT(0) ;
9064 return ;
9065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009066 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9067 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9068
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009069 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9070
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9072 vos_mem_free(pWdaParams) ;
9073
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009074 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009075 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 return ;
9078}
Jeff Johnson295189b2012-06-20 16:38:30 -07009079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009080 * FUNCTION: WDA_WowlEnterReqCallback
9081 * Free memory and send WOWL Enter RSP back to PE.
9082 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9083 */
9084void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9085{
9086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9087 tWDA_CbContext *pWDA;
9088 tSirHalWowlEnterParams *pWowlEnterParams;
9089
9090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9091 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9092
9093 if(NULL == pWdaParams)
9094 {
9095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9096 "%s: pWdaParams received NULL", __func__);
9097 VOS_ASSERT(0);
9098 return;
9099 }
9100
9101 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9102 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9103 pWowlEnterParams->status = wdiStatus;
9104
9105 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9106 {
9107 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9108 vos_mem_free(pWdaParams);
9109 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9110 }
9111
9112 return;
9113}
9114/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 * FUNCTION: WDA_ProcessWowlEnterReq
9116 * Request to WDI to enter WOWL
9117 */
9118VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9119 tSirHalWowlEnterParams *pWowlEnterParams)
9120{
9121 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009122 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009123 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9124 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9125 sizeof(WDI_WowlEnterReqParamsType)) ;
9126 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009128 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009129 if(NULL == wdiWowlEnterInfo)
9130 {
9131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009133 VOS_ASSERT(0);
9134 return VOS_STATUS_E_NOMEM;
9135 }
9136 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9137 if(NULL == pWdaParams)
9138 {
9139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009140 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009141 VOS_ASSERT(0);
9142 vos_mem_free(wdiWowlEnterInfo);
9143 return VOS_STATUS_E_NOMEM;
9144 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009145
9146 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9147
Jeff Johnson295189b2012-06-20 16:38:30 -07009148 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9149 pWowlEnterParams->magicPtrn,
9150 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9152 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009153 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9154 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9156 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9158 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9160 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009161 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9162 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9164 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9166 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009167#ifdef WLAN_WAKEUP_EVENTS
9168 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9169 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9170
9171 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9172 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9173
9174 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9175 pWowlEnterParams->ucWowNetScanOffloadMatch;
9176
9177 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9178 pWowlEnterParams->ucWowGTKRekeyError;
9179
9180 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9181 pWowlEnterParams->ucWoWBSSConnLoss;
9182#endif // WLAN_WAKEUP_EVENTS
9183
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009184 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9185 pWowlEnterParams->bssIdx;
9186
Yue Ma7f44bbe2013-04-12 11:47:39 -07009187 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9188 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009189 /* Store param pointer as passed in by caller */
9190 /* store Params pass it to WDI */
9191 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9192 pWdaParams->pWdaContext = pWDA;
9193 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009194 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009195 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009196 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 {
9198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9199 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009200 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 vos_mem_free(pWdaParams->wdaMsgParam) ;
9202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9203 vos_mem_free(pWdaParams) ;
9204 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009205 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206
9207}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009209 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009210 *
9211 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009212void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009213{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9215 tWDA_CbContext *pWDA;
9216 tSirHalWowlExitParams *pWowlExitParams;
9217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009218 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009219 if(NULL == pWdaParams)
9220 {
9221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009222 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009223 VOS_ASSERT(0) ;
9224 return ;
9225 }
9226 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9227 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9228
9229 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009230 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009231
9232 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9233 vos_mem_free(pWdaParams) ;
9234
Jeff Johnson295189b2012-06-20 16:38:30 -07009235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009236 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009237 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 return ;
9239}
Jeff Johnson295189b2012-06-20 16:38:30 -07009240/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009241 * FUNCTION: WDA_WowlExitReqCallback
9242 * Free memory and send WOWL Exit RSP back to PE.
9243 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9244 */
9245void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9246{
9247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9248 tWDA_CbContext *pWDA;
9249 tSirHalWowlExitParams *pWowlExitParams;
9250
9251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9252 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9253
9254 if(NULL == pWdaParams)
9255 {
9256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9257 "%s: pWdaParams received NULL", __func__);
9258 VOS_ASSERT(0);
9259 return;
9260 }
9261
9262 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9263 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9264 pWowlExitParams->status = wdiStatus;
9265
9266 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9267 {
9268 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9269 vos_mem_free(pWdaParams);
9270 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9271 }
9272
9273 return;
9274}
9275/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 * FUNCTION: WDA_ProcessWowlExitReq
9277 * Request to WDI to add WOWL Bcast pattern
9278 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009279VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9280 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009281{
9282 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009283 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009284 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9285 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9286 sizeof(WDI_WowlExitReqParamsType)) ;
9287 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009289 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009290 if(NULL == wdiWowlExitInfo)
9291 {
9292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009293 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009294 VOS_ASSERT(0);
9295 return VOS_STATUS_E_NOMEM;
9296 }
9297 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9298 if(NULL == pWdaParams)
9299 {
9300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009301 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009302 VOS_ASSERT(0);
9303 vos_mem_free(wdiWowlExitInfo);
9304 return VOS_STATUS_E_NOMEM;
9305 }
9306
9307 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9308 pWowlExitParams->bssIdx;
9309
Yue Ma7f44bbe2013-04-12 11:47:39 -07009310 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9311 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009312
9313 /* Store param pointer as passed in by caller */
9314 /* store Params pass it to WDI */
9315 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9316 pWdaParams->pWdaContext = pWDA;
9317 pWdaParams->wdaMsgParam = pWowlExitParams;
9318
9319 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009320 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009321
Jeff Johnson43971f52012-07-17 12:26:56 -07009322 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 {
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9325 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009326 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9328 vos_mem_free(pWdaParams->wdaMsgParam);
9329 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009331 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009332}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009333/*
9334 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9335 * Request to WDI to determine whether a given station is capable of
9336 * using HW-based frame translation
9337 */
9338v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9339 tANI_U8 staIdx)
9340{
9341 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9342}
Jeff Johnson295189b2012-06-20 16:38:30 -07009343/*
9344 * FUNCTION: WDA_NvDownloadReqCallback
9345 * send NV Download RSP back to PE
9346 */
9347void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9348 void* pUserData)
9349{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009350
9351 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9352 tWDA_CbContext *pWDA;
9353
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009355 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009356
9357 if(NULL == pWdaParams)
9358 {
9359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009360 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009361 VOS_ASSERT(0) ;
9362 return ;
9363 }
9364
9365 pWDA = pWdaParams->pWdaContext;
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009368 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9369 vos_mem_free(pWdaParams);
9370
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 return ;
9373}
Jeff Johnson295189b2012-06-20 16:38:30 -07009374/*
9375 * FUNCTION: WDA_ProcessNvDownloadReq
9376 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9377 */
9378VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9379{
9380 /* Initialize the local Variables*/
9381 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9382 v_VOID_t *pNvBuffer=NULL;
9383 v_SIZE_t bufferSize = 0;
9384 WDI_Status status = WDI_STATUS_E_FAILURE;
9385 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009386 tWDA_ReqParams *pWdaParams ;
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 if(NULL == pWDA)
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009394 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 return VOS_STATUS_E_FAILURE;
9396 }
9397
9398 /* Get the NV structure base address and size from VOS */
9399 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9401 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 if(NULL == wdiNvDownloadReqParam)
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 VOS_ASSERT(0);
9407 return VOS_STATUS_E_NOMEM;
9408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 /* Copy Params to wdiNvDownloadReqParam*/
9410 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9411 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009412
9413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9414 if(NULL == pWdaParams)
9415 {
9416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009417 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009418 VOS_ASSERT(0);
9419 vos_mem_free(wdiNvDownloadReqParam);
9420 return VOS_STATUS_E_NOMEM;
9421 }
9422
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009424 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9425 pWdaParams->wdaMsgParam = NULL;
9426 pWdaParams->pWdaContext = pWDA;
9427
9428
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009430
Jeff Johnson295189b2012-06-20 16:38:30 -07009431 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009432 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9433
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 if(IS_WDI_STATUS_FAILURE(status))
9435 {
9436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9437 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009438 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9439 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009442}
9443/*
9444 * FUNCTION: WDA_FlushAcReqCallback
9445 * send Flush AC RSP back to TL
9446 */
9447void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9448{
9449 vos_msg_t wdaMsg = {0} ;
9450 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9451 tFlushACReq *pFlushACReqParams;
9452 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009454 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 if(NULL == pWdaParams)
9456 {
9457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009458 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 VOS_ASSERT(0) ;
9460 return ;
9461 }
9462
9463 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9464 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9465 if(NULL == pFlushACRspParams)
9466 {
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009468 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009470 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009471 return ;
9472 }
9473 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9474 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9475 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9476 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9477 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009478 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 vos_mem_free(pWdaParams->wdaMsgParam) ;
9480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9481 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9483 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9484 // POST message to TL
9485 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9486
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 return ;
9488}
Jeff Johnson295189b2012-06-20 16:38:30 -07009489/*
9490 * FUNCTION: WDA_ProcessFlushAcReq
9491 * Request to WDI to Update the DELBA REQ params.
9492 */
9493VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9494 tFlushACReq *pFlushAcReqParams)
9495{
9496 WDI_Status status = WDI_STATUS_SUCCESS ;
9497 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9498 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9499 sizeof(WDI_FlushAcReqParamsType)) ;
9500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009501 if(NULL == wdiFlushAcReqParam)
9502 {
9503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 VOS_ASSERT(0);
9506 return VOS_STATUS_E_NOMEM;
9507 }
9508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9509 if(NULL == pWdaParams)
9510 {
9511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009513 VOS_ASSERT(0);
9514 vos_mem_free(wdiFlushAcReqParam);
9515 return VOS_STATUS_E_NOMEM;
9516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009518 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009519 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9520 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9521 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9522 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009523 /* Store Flush AC pointer, as this will be used for response */
9524 /* store Params pass it to WDI */
9525 pWdaParams->pWdaContext = pWDA;
9526 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9527 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009528 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9529 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009530 if(IS_WDI_STATUS_FAILURE(status))
9531 {
9532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9533 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9534 vos_mem_free(pWdaParams->wdaMsgParam) ;
9535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9536 vos_mem_free(pWdaParams) ;
9537 //TODO: respond to TL with failure
9538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009539 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009540}
Jeff Johnson295189b2012-06-20 16:38:30 -07009541/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009542 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009543 *
9544 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009545void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009546{
9547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9548 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009549 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009550
9551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 if(NULL == pWdaParams)
9554 {
9555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_ASSERT(0) ;
9558 return ;
9559 }
9560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9561 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9562 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9563 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9564 {
9565 pWDA->wdaAmpSessionOn = VOS_FALSE;
9566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009567 vos_mem_free(pWdaParams->wdaMsgParam) ;
9568 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9569 vos_mem_free(pWdaParams) ;
9570 /*
9571 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9572 * param here
9573 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009574 return ;
9575}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009576/*
9577 * FUNCTION: WDA_BtAmpEventReqCallback
9578 * Free memory.
9579 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9580 */
9581void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9582{
9583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9584 tWDA_CbContext *pWDA;
9585 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586
Yue Ma7f44bbe2013-04-12 11:47:39 -07009587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9588 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9589
9590 if(NULL == pWdaParams)
9591 {
9592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9593 "%s: pWdaParams received NULL", __func__);
9594 VOS_ASSERT(0);
9595 return;
9596 }
9597
9598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9599 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9600
9601 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9602 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9603 {
9604 pWDA->wdaAmpSessionOn = VOS_FALSE;
9605 }
9606
9607 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9608 {
9609 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9610 vos_mem_free(pWdaParams->wdaMsgParam);
9611 vos_mem_free(pWdaParams);
9612 }
9613
9614 return;
9615}
Jeff Johnson295189b2012-06-20 16:38:30 -07009616/*
9617 * FUNCTION: WDA_ProcessBtAmpEventReq
9618 * Request to WDI to Update with BT AMP events.
9619 */
9620VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9621 tSmeBtAmpEvent *pBtAmpEventParams)
9622{
9623 WDI_Status status = WDI_STATUS_SUCCESS ;
9624 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9625 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9626 sizeof(WDI_BtAmpEventParamsType)) ;
9627 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009629 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 if(NULL == wdiBtAmpEventParam)
9631 {
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009634 VOS_ASSERT(0);
9635 return VOS_STATUS_E_NOMEM;
9636 }
9637 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9638 if(NULL == pWdaParams)
9639 {
9640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009642 VOS_ASSERT(0);
9643 vos_mem_free(wdiBtAmpEventParam);
9644 return VOS_STATUS_E_NOMEM;
9645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009646 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9647 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009648 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9649 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009650 /* Store BT AMP event pointer, as this will be used for response */
9651 /* store Params pass it to WDI */
9652 pWdaParams->pWdaContext = pWDA;
9653 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9654 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009656 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 if(IS_WDI_STATUS_FAILURE(status))
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9660 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9661 vos_mem_free(pWdaParams->wdaMsgParam) ;
9662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9663 vos_mem_free(pWdaParams) ;
9664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009665 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9666 {
9667 pWDA->wdaAmpSessionOn = VOS_TRUE;
9668 }
9669 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009670}
9671
Jeff Johnson295189b2012-06-20 16:38:30 -07009672/*
9673 * FUNCTION: WDA_FTMCommandReqCallback
9674 * Handle FTM CMD response came from HAL
9675 * Route responce to HDD FTM
9676 */
9677void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9678 void *usrData)
9679{
9680 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009681 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9682 {
9683 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309684 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009685 return;
9686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009687 /* Release Current FTM Command Request */
9688 vos_mem_free(pWDA->wdaFTMCmdReq);
9689 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 /* Post FTM Responce to HDD FTM */
9691 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 return;
9693}
Jeff Johnson295189b2012-06-20 16:38:30 -07009694/*
9695 * FUNCTION: WDA_ProcessFTMCommand
9696 * Send FTM command to WDI
9697 */
9698VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9699 tPttMsgbuffer *pPTTFtmCmd)
9700{
9701 WDI_Status status = WDI_STATUS_SUCCESS;
9702 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009703 ftmCMDReq = (WDI_FTMCommandReqType *)
9704 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9705 if(NULL == ftmCMDReq)
9706 {
9707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9708 "WDA FTM Command buffer alloc fail");
9709 return VOS_STATUS_E_NOMEM;
9710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9712 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009714 /* Send command to WDI */
9715 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009716 return status;
9717}
Jeff Johnsone7245742012-09-05 17:12:55 -07009718#ifdef FEATURE_OEM_DATA_SUPPORT
9719/*
9720 * FUNCTION: WDA_StartOemDataReqCallback
9721 *
9722 */
9723void WDA_StartOemDataReqCallback(
9724 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9725 void* pUserData)
9726{
9727 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9729 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009730 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009731
Jeff Johnsone7245742012-09-05 17:12:55 -07009732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009733 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009734
9735 if(NULL == pWdaParams)
9736 {
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009738 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009739 VOS_ASSERT(0) ;
9740 return ;
9741 }
9742 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9743
Jeff Johnsone7245742012-09-05 17:12:55 -07009744 if(NULL == pWDA)
9745 {
9746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009747 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009748 VOS_ASSERT(0);
9749 return ;
9750 }
9751
9752 /*
9753 * Allocate memory for response params sent to PE
9754 */
9755 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9756
9757 // Check if memory is allocated for OemdataMeasRsp Params.
9758 if(NULL == pOemDataRspParams)
9759 {
9760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9761 "OEM DATA WDA callback alloc fail");
9762 VOS_ASSERT(0) ;
9763 return;
9764 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009765
Jeff Johnsone7245742012-09-05 17:12:55 -07009766 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009767 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9768 vos_mem_free(pWdaParams->wdaMsgParam);
9769 vos_mem_free(pWdaParams) ;
9770
Jeff Johnsone7245742012-09-05 17:12:55 -07009771 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009772 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009773 * Also, here success always means that we have atleast one BSSID.
9774 */
9775 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9776
9777 //enable Tx
9778 status = WDA_ResumeDataTx(pWDA);
9779 if(status != VOS_STATUS_SUCCESS)
9780 {
9781 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9782 }
9783 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9784 return ;
9785}
9786/*
9787 * FUNCTION: WDA_ProcessStartOemDataReq
9788 * Send Start Oem Data Req to WDI
9789 */
9790VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9791 tStartOemDataReq *pOemDataReqParams)
9792{
9793 WDI_Status status = WDI_STATUS_SUCCESS;
9794 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009795 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009796
9797 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9798
9799 if(NULL == wdiOemDataReqParams)
9800 {
9801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009803 VOS_ASSERT(0);
9804 return VOS_STATUS_E_NOMEM;
9805 }
9806
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009807 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9808 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9809 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9810 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009811
9812 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9813
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009814 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9815 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009816 {
9817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009819 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009820 vos_mem_free(pOemDataReqParams);
9821 VOS_ASSERT(0);
9822 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009823 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009824
Bernald44a1ae2013-01-09 08:30:39 -08009825 pWdaParams->pWdaContext = (void*)pWDA;
9826 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9827 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009828
9829 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9830 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009831
9832 if(IS_WDI_STATUS_FAILURE(status))
9833 {
9834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9835 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009836 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9837 vos_mem_free(pWdaParams->wdaMsgParam);
9838 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009839 }
9840 return CONVERT_WDI2VOS_STATUS(status) ;
9841}
9842#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009843/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009844 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009845 *
9846 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009847void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009848{
9849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009851 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009852 if(NULL == pWdaParams)
9853 {
9854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009855 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009856 VOS_ASSERT(0) ;
9857 return ;
9858 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009859
9860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9861 vos_mem_free(pWdaParams->wdaMsgParam);
9862 vos_mem_free(pWdaParams);
9863
9864 return ;
9865}
9866/*
9867 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9868 * Free memory.
9869 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9870 */
9871void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9872{
9873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9874
9875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9876 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9877
9878 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009879 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9881 "%s: pWdaParams received NULL", __func__);
9882 VOS_ASSERT(0);
9883 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009885
9886 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009887 {
9888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009889 vos_mem_free(pWdaParams->wdaMsgParam);
9890 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009891 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009892
9893 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009894}
Jeff Johnson295189b2012-06-20 16:38:30 -07009895#ifdef WLAN_FEATURE_GTK_OFFLOAD
9896/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009897 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 *
9899 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009900void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009901 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009902{
9903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9904
9905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009907
9908 VOS_ASSERT(NULL != pWdaParams);
9909
9910 vos_mem_free(pWdaParams->wdaMsgParam) ;
9911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9912 vos_mem_free(pWdaParams) ;
9913
9914 //print a msg, nothing else to do
9915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009916 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009917
9918 return ;
9919}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009920/*
9921 * FUNCTION: WDA_GTKOffloadReqCallback
9922 * Free memory.
9923 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9924 */
9925void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9926{
9927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009928
Yue Ma7f44bbe2013-04-12 11:47:39 -07009929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9931
9932 if(NULL == pWdaParams)
9933 {
9934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9935 "%s: pWdaParams received NULL", __func__);
9936 VOS_ASSERT(0);
9937 return;
9938 }
9939
9940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9941 {
9942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9943 vos_mem_free(pWdaParams->wdaMsgParam);
9944 vos_mem_free(pWdaParams);
9945 }
9946
9947 return;
9948}
Jeff Johnson295189b2012-06-20 16:38:30 -07009949/*
9950 * FUNCTION: WDA_ProcessGTKOffloadReq
9951 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9952 * to broadcast traffic (sta mode).
9953 */
9954VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9955 tpSirGtkOffloadParams pGtkOffloadParams)
9956{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309957 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009958 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9959 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9960 sizeof(WDI_GtkOffloadReqMsg)) ;
9961 tWDA_ReqParams *pWdaParams ;
9962
9963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009964 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009965
9966 if(NULL == wdiGtkOffloadReqMsg)
9967 {
9968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 VOS_ASSERT(0);
9971 return VOS_STATUS_E_NOMEM;
9972 }
9973
9974 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9975 if(NULL == pWdaParams)
9976 {
9977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009978 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009979 VOS_ASSERT(0);
9980 vos_mem_free(wdiGtkOffloadReqMsg);
9981 return VOS_STATUS_E_NOMEM;
9982 }
9983
9984 //
9985 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9986 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009987
9988 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309989 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009990
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9992 // Copy KCK
9993 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9994 // Copy KEK
9995 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9996 // Copy KeyReplayCounter
9997 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9998 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9999
Yue Ma7f44bbe2013-04-12 11:47:39 -070010000 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10001 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010002
Jeff Johnson295189b2012-06-20 16:38:30 -070010003
10004 /* Store Params pass it to WDI */
10005 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10006 pWdaParams->pWdaContext = pWDA;
10007 /* Store param pointer as passed in by caller */
10008 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10009
Yue Ma7f44bbe2013-04-12 11:47:39 -070010010 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010011
10012 if(IS_WDI_STATUS_FAILURE(status))
10013 {
10014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10015 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10017 vos_mem_free(pWdaParams->wdaMsgParam);
10018 vos_mem_free(pWdaParams);
10019 }
10020
10021 return CONVERT_WDI2VOS_STATUS(status) ;
10022}
10023
10024/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010025 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 *
10027 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010028void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010029 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010030{
10031 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10032 tWDA_CbContext *pWDA;
10033 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010034 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010035 vos_msg_t vosMsg;
10036
10037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010038 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010039
10040 VOS_ASSERT(NULL != pWdaParams);
10041
10042 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10043 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10044
10045 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10046 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10047
10048 /* Message Header */
10049 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010050 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010051
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010052 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10053 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10054 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10055 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10056 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010057
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010058 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10059 pwdiGtkOffloadGetInfoRsparams->bssId,
10060 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010061 /* VOS message wrapper */
10062 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10063 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10064 vosMsg.bodyval = 0;
10065
10066 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10067 {
10068 /* free the mem and return */
10069 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10070 }
10071
10072 vos_mem_free(pWdaParams->wdaMsgParam) ;
10073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10074 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010075
10076 return;
10077}
10078/*
10079 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10080 * Free memory and send RSP back to SME.
10081 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10082 */
10083void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10084{
10085 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10086 vos_msg_t vosMsg;
10087
10088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10090
10091 if(NULL == pWdaParams)
10092 {
10093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10094 "%s: pWdaParams received NULL", __func__);
10095 VOS_ASSERT(0);
10096 return;
10097 }
10098
10099 /* VOS message wrapper */
10100 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10101 vosMsg.bodyptr = NULL;
10102 vosMsg.bodyval = 0;
10103
10104 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10105 {
10106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10107 vos_mem_free(pWdaParams->wdaMsgParam);
10108 vos_mem_free(pWdaParams);
10109 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10110 }
10111
10112 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010113}
10114#endif
10115
10116/*
10117 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10118 * Request to WDI to set Tx Per Tracking configurations
10119 */
10120VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10121{
10122 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010123 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10125 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10126 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10127 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010129 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 if(NULL == pwdiSetTxPerTrackingReqParams)
10131 {
10132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010133 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010134 vos_mem_free(pTxPerTrackingParams);
10135 VOS_ASSERT(0);
10136 return VOS_STATUS_E_NOMEM;
10137 }
10138 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10139 if(NULL == pWdaParams)
10140 {
10141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010142 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10144 vos_mem_free(pTxPerTrackingParams);
10145 VOS_ASSERT(0);
10146 return VOS_STATUS_E_NOMEM;
10147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10149 pTxPerTrackingParams->ucTxPerTrackingEnable;
10150 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10151 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10152 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10153 pTxPerTrackingParams->ucTxPerTrackingRatio;
10154 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10155 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010156 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10157 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010158 /* Store param pointer as passed in by caller */
10159 /* store Params pass it to WDI
10160 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10161 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10162 pWdaParams->pWdaContext = pWDA;
10163 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010164 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010165 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010166 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010167 {
10168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10169 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010170 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010171 vos_mem_free(pWdaParams->wdaMsgParam) ;
10172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10173 vos_mem_free(pWdaParams) ;
10174 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010175 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176
10177}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010178/*
10179 * FUNCTION: WDA_HALDumpCmdCallback
10180 * Send the VOS complete .
10181 */
10182void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10183 void* pUserData)
10184{
10185 tANI_U8 *buffer = NULL;
10186 tWDA_CbContext *pWDA = NULL;
10187 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010188 if(NULL == pWdaParams)
10189 {
10190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010191 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 VOS_ASSERT(0) ;
10193 return ;
10194 }
10195
10196 pWDA = pWdaParams->pWdaContext;
10197 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010198 if(wdiRspParams->usBufferLen > 0)
10199 {
10200 /*Copy the Resp data to UMAC supplied buffer*/
10201 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10202 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010203 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10204 vos_mem_free(pWdaParams);
10205
10206 /* Indicate VOSS about the start complete */
10207 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 return ;
10209}
10210
Jeff Johnson295189b2012-06-20 16:38:30 -070010211/*
10212 * FUNCTION: WDA_ProcessHALDumpCmdReq
10213 * Send Dump command to WDI
10214 */
10215VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10216 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10217 tANI_U32 arg4, tANI_U8 *pBuffer)
10218{
10219 WDI_Status status = WDI_STATUS_SUCCESS;
10220 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10221 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10222 tWDA_ReqParams *pWdaParams ;
10223 pVosContextType pVosContext = NULL;
10224 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010225 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10226 (void *)pMac);
10227
10228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10229 if(NULL == pWdaParams)
10230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 return VOS_STATUS_E_NOMEM;
10234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 /* Allocate memory WDI request structure*/
10236 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10237 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10238 if(NULL == wdiHALDumpCmdReqParam)
10239 {
10240 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10241 "WDA HAL DUMP Command buffer alloc fail");
10242 vos_mem_free(pWdaParams);
10243 return WDI_STATUS_E_FAILURE;
10244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010245 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 /* Extract the arguments */
10247 wdiHalDumpCmdInfo->command = cmd;
10248 wdiHalDumpCmdInfo->argument1 = arg1;
10249 wdiHalDumpCmdInfo->argument2 = arg2;
10250 wdiHalDumpCmdInfo->argument3 = arg3;
10251 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10254
10255 /* Response message will be passed through the buffer */
10256 pWdaParams->wdaMsgParam = (void *)pBuffer;
10257
10258 /* store Params pass it to WDI */
10259 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 /* Send command to WDI */
10261 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010262 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010263 if ( vStatus != VOS_STATUS_SUCCESS )
10264 {
10265 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10266 {
10267 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010268 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 }
10270 else
10271 {
10272 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010273 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 }
10275 VOS_ASSERT(0);
10276 }
10277 return status;
10278}
Jeff Johnson295189b2012-06-20 16:38:30 -070010279#ifdef WLAN_FEATURE_GTK_OFFLOAD
10280/*
10281 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10282 * Request to WDI to get GTK Offload Information
10283 */
10284VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10285 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10286{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010287 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010288 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10289 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10290 tWDA_ReqParams *pWdaParams ;
10291
10292 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10293 {
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 VOS_ASSERT(0);
10297 return VOS_STATUS_E_NOMEM;
10298 }
10299
10300 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10301 if(NULL == pWdaParams)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 VOS_ASSERT(0);
10306 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10307 return VOS_STATUS_E_NOMEM;
10308 }
10309
Yue Ma7f44bbe2013-04-12 11:47:39 -070010310 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10311 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010312
Jeff Johnson295189b2012-06-20 16:38:30 -070010313 /* Store Params pass it to WDI */
10314 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10315 pWdaParams->pWdaContext = pWDA;
10316 /* Store param pointer as passed in by caller */
10317 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10318
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010319 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010320 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010321
Yue Ma7f44bbe2013-04-12 11:47:39 -070010322 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010323
10324 if(IS_WDI_STATUS_FAILURE(status))
10325 {
10326 /* failure returned by WDI API */
10327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10328 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10330 vos_mem_free(pWdaParams) ;
10331 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10332 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10333 }
10334
10335 return CONVERT_WDI2VOS_STATUS(status) ;
10336}
10337#endif // WLAN_FEATURE_GTK_OFFLOAD
10338
10339/*
Yue Mab9c86f42013-08-14 15:59:08 -070010340 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10341 *
10342 */
10343VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10344 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10345{
10346 WDI_Status wdiStatus;
10347 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10348
10349 addPeriodicTxPtrnParams =
10350 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10351
10352 if (NULL == addPeriodicTxPtrnParams)
10353 {
10354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10355 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10356 __func__);
10357
10358 return VOS_STATUS_E_NOMEM;
10359 }
10360
10361 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10362 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10363
10364 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10365 addPeriodicTxPtrnParams->pUserData = pWDA;
10366
10367 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10368
10369 if (WDI_STATUS_PENDING == wdiStatus)
10370 {
10371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10372 "Pending received for %s:%d", __func__, __LINE__ );
10373 }
10374 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10375 {
10376 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10377 "Failure in %s:%d", __func__, __LINE__ );
10378 }
10379
10380 vos_mem_free(addPeriodicTxPtrnParams);
10381
10382 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10383}
10384
10385/*
10386 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10387 *
10388 */
10389VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10390 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10391{
10392 WDI_Status wdiStatus;
10393 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10394
10395 delPeriodicTxPtrnParams =
10396 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10397
10398 if (NULL == delPeriodicTxPtrnParams)
10399 {
10400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10401 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10402 __func__);
10403
10404 return VOS_STATUS_E_NOMEM;
10405 }
10406
10407 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10408 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10409
10410 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10411 delPeriodicTxPtrnParams->pUserData = pWDA;
10412
10413 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
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(delPeriodicTxPtrnParams);
10427
10428 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10429}
10430
10431/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010432 * -------------------------------------------------------------------------
10433 * DATA interface with WDI for Mgmt Frames
10434 * -------------------------------------------------------------------------
10435 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010436/*
10437 * FUNCTION: WDA_TxComplete
10438 * Callback function for the WDA_TxPacket
10439 */
10440VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10441 VOS_STATUS status )
10442{
10443
10444 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10445 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010446 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010447
10448 if(NULL == wdaContext)
10449 {
10450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10451 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010452 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 VOS_ASSERT(0);
10454 return VOS_STATUS_E_FAILURE;
10455 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010456
10457 /*Check if frame was timed out or not*/
10458 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10459 (v_PVOID_t)&uUserData);
10460
10461 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10462 {
10463 /*Discard frame - no further processing is needed*/
10464 vos_pkt_return_packet(pData);
10465 return VOS_STATUS_SUCCESS;
10466 }
10467
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10469 if( NULL!=wdaContext->pTxCbFunc)
10470 {
10471 /*check if packet is freed already*/
10472 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10473 {
10474 wdaContext->pTxCbFunc(pMac, pData);
10475 }
10476 else
10477 {
10478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010479 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010480 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 //Return from here since we reaching here because the packet already timeout
10482 return status;
10483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 }
10485
10486 /*
10487 * Trigger the event to bring the HAL TL Tx complete function to come
10488 * out of wait
10489 * Let the coe above to complete the packet first. When this event is set,
10490 * the thread waiting for the event may run and set Vospacket_freed causing the original
10491 * packet not being freed.
10492 */
10493 status = vos_event_set(&wdaContext->txFrameEvent);
10494 if(!VOS_IS_STATUS_SUCCESS(status))
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10497 "NEW VOS Event Set failed - status = %d \n", status);
10498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010499 return status;
10500}
Jeff Johnson295189b2012-06-20 16:38:30 -070010501/*
10502 * FUNCTION: WDA_TxPacket
10503 * Forward TX management frame to WDI
10504 */
10505VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10506 void *pFrmBuf,
10507 tANI_U16 frmLen,
10508 eFrameType frmType,
10509 eFrameTxDir txDir,
10510 tANI_U8 tid,
10511 pWDATxRxCompFunc pCompFunc,
10512 void *pData,
10513 pWDAAckFnTxComp pAckTxComp,
10514 tANI_U8 txFlag)
10515{
10516 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10517 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10518 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10519 tANI_U8 eventIdx = 0;
10520 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10521 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 if((NULL == pWDA)||(NULL == pFrmBuf))
10523 {
10524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010525 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010526 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 VOS_ASSERT(0);
10528 return VOS_STATUS_E_FAILURE;
10529 }
10530
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010532 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10534 if(NULL == pMac)
10535 {
10536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010537 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010538 VOS_ASSERT(0);
10539 return VOS_STATUS_E_FAILURE;
10540 }
10541
10542
10543
10544 /* store the call back function in WDA context */
10545 pWDA->pTxCbFunc = pCompFunc;
10546 /* store the call back for the function of ackTxComplete */
10547 if( pAckTxComp )
10548 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010549 if( NULL != pWDA->pAckTxCbFunc )
10550 {
10551 /* Already TxComp is active no need to active again */
10552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10553 "There is already one request pending for tx complete\n");
10554 pWDA->pAckTxCbFunc( pMac, 0);
10555 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010556
Jeff Johnsone7245742012-09-05 17:12:55 -070010557 if( VOS_STATUS_SUCCESS !=
10558 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10559 {
10560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10561 "Tx Complete timeout Timer Stop Failed ");
10562 }
10563 else
10564 {
10565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010566 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010567 }
10568 }
10569
10570 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10571 pWDA->pAckTxCbFunc = pAckTxComp;
10572 if( VOS_STATUS_SUCCESS !=
10573 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10574 {
10575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10576 "Tx Complete Timer Start Failed ");
10577 pWDA->pAckTxCbFunc = NULL;
10578 return eHAL_STATUS_FAILURE;
10579 }
10580 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010581 /* Reset the event to be not signalled */
10582 status = vos_event_reset(&pWDA->txFrameEvent);
10583 if(!VOS_IS_STATUS_SUCCESS(status))
10584 {
10585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10586 "VOS Event reset failed - status = %d\n",status);
10587 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10588 if( pAckTxComp )
10589 {
10590 pWDA->pAckTxCbFunc = NULL;
10591 if( VOS_STATUS_SUCCESS !=
10592 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10593 {
10594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10595 "Tx Complete timeout Timer Stop Failed ");
10596 }
10597 }
10598 return VOS_STATUS_E_FAILURE;
10599 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010600
10601 /* If Peer Sta mask is set don't overwrite to self sta */
10602 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010604 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010605 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010606 else
10607 {
Ganesh K08bce952012-12-13 15:04:41 -080010608 /* Get system role, use the self station if in unknown role or STA role */
10609 systemRole = wdaGetGlobalSystemRole(pMac);
10610 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10611 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010612#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010613 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010614#endif
Ganesh K08bce952012-12-13 15:04:41 -080010615 ))
10616 {
10617 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10618 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010619 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010620
Jeff Johnsone7245742012-09-05 17:12:55 -070010621 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10622 disassoc frame reaches the HW, HAL has already deleted the peer station */
10623 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010625 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010626 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010628 /*Send Probe request frames on self sta idx*/
10629 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 /* Since we donot want probe responses to be retried, send probe responses
10632 through the NO_ACK queues */
10633 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10634 {
10635 //probe response is sent out using self station and no retries options.
10636 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10637 }
10638 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10639 {
10640 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10641 }
10642 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10644
10645 /*Set frame tag to 0
10646 We will use the WDA user data in order to tag a frame as expired*/
10647 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10648 (v_PVOID_t)0);
10649
10650
10651 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10652 frmLen, ucTypeSubType, tid,
10653 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10654 {
10655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10656 "Sending Mgmt Frame failed - status = %d\n", status);
10657 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10658 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10659 if( pAckTxComp )
10660 {
10661 pWDA->pAckTxCbFunc = NULL;
10662 if( VOS_STATUS_SUCCESS !=
10663 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10666 "Tx Complete timeout Timer Stop Failed ");
10667 }
10668 }
10669 return VOS_STATUS_E_FAILURE;
10670 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010671 /*
10672 * Wait for the event to be set by the TL, to get the response of TX
10673 * complete, this event should be set by the Callback function called by TL
10674 */
10675 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10676 &eventIdx);
10677 if(!VOS_IS_STATUS_SUCCESS(status))
10678 {
10679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10680 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010681 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10683 after the packet gets completed(packet freed once)*/
10684
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010685 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010686 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010687
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010688 /*Tag Frame as timed out for later deletion*/
10689 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10690 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10691
Jeff Johnson295189b2012-06-20 16:38:30 -070010692 /* check whether the packet was freed already,so need not free again when
10693 * TL calls the WDA_Txcomplete routine
10694 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010695 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10696 /*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 -070010697 {
10698 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010699 } */
10700
Jeff Johnson295189b2012-06-20 16:38:30 -070010701 if( pAckTxComp )
10702 {
10703 pWDA->pAckTxCbFunc = NULL;
10704 if( VOS_STATUS_SUCCESS !=
10705 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10706 {
10707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10708 "Tx Complete timeout Timer Stop Failed ");
10709 }
10710 }
10711 status = VOS_STATUS_E_FAILURE;
10712 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053010713#ifdef WLAN_DUMP_MGMTFRAMES
10714 if (VOS_IS_STATUS_SUCCESS(status))
10715 {
10716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10717 "%s() TX packet : SubType %d", __func__,pFc->subType);
10718 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10719 pData, frmLen);
10720 }
10721#endif
10722
Jeff Johnson295189b2012-06-20 16:38:30 -070010723 return status;
10724}
Jeff Johnson295189b2012-06-20 16:38:30 -070010725/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053010726 * FUNCTION: WDA_ProcessDHCPStartInd
10727 * Forward DHCP Start to WDI
10728 */
10729static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
10730 tAniDHCPInd *dhcpStartInd)
10731{
10732 WDI_Status status;
10733 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10734 if (NULL == wdiDHCPInd)
10735 {
10736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10737 "%s: VOS MEM Alloc Failure", __func__);
10738 VOS_ASSERT(0);
10739 vos_mem_free(dhcpStartInd);
10740 return VOS_STATUS_E_NOMEM;
10741 }
10742
10743 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
10744 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
10745 sizeof(tSirMacAddr));
10746
10747 status = WDI_dhcpStartInd(wdiDHCPInd);
10748
10749 if (IS_WDI_STATUS_FAILURE(status))
10750 {
10751 vos_mem_free(wdiDHCPInd);
10752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10753 "DHCP Start Indication failed");
10754 }
10755 vos_mem_free(dhcpStartInd);
10756 return CONVERT_WDI2VOS_STATUS(status) ;
10757}
10758
10759 /*
10760 * FUNCTION: WDA_ProcessDHCPStopInd
10761 * Forward DHCP Stop to WDI
10762 */
10763 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
10764 tAniDHCPInd *dhcpStopInd)
10765 {
10766 WDI_Status status;
10767 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
10768 if (NULL == wdiDHCPInd)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10771 "%s: VOS MEM Alloc Failure", __func__);
10772 VOS_ASSERT(0);
10773 vos_mem_free(dhcpStopInd);
10774 return VOS_STATUS_E_NOMEM;
10775 }
10776 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
10777 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
10778 status = WDI_dhcpStopInd(wdiDHCPInd);
10779 if (IS_WDI_STATUS_FAILURE(status))
10780 {
10781 vos_mem_free(wdiDHCPInd);
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10783 "DHCP Start Indication failed");
10784 }
10785 vos_mem_free(dhcpStopInd);
10786 return CONVERT_WDI2VOS_STATUS(status) ;
10787 }
10788
10789/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010790 * FUNCTION: WDA_McProcessMsg
10791 * Trigger DAL-AL to start CFG download
10792 */
10793VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10794{
10795 VOS_STATUS status = VOS_STATUS_SUCCESS;
10796 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010797 if(NULL == pMsg)
10798 {
10799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010800 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010801 VOS_ASSERT(0);
10802 return VOS_STATUS_E_FAILURE;
10803 }
10804
10805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010806 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010807
10808 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10809 if(NULL == pWDA )
10810 {
10811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010812 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010814 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 return VOS_STATUS_E_FAILURE;
10816 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010817 /* Process all the WDA messages.. */
10818 switch( pMsg->type )
10819 {
10820 case WNI_CFG_DNLD_REQ:
10821 {
10822 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 /* call WDA complete event if config download success */
10824 if( VOS_IS_STATUS_SUCCESS(status) )
10825 {
10826 vos_WDAComplete_cback(pVosContext);
10827 }
10828 else
10829 {
10830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10831 "WDA Config Download failure" );
10832 }
10833 break ;
10834 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010835 /*
10836 * Init SCAN request from PE, convert it into DAL format
10837 * and send it to DAL
10838 */
10839 case WDA_INIT_SCAN_REQ:
10840 {
10841 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10842 break ;
10843 }
10844 /* start SCAN request from PE */
10845 case WDA_START_SCAN_REQ:
10846 {
10847 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10848 break ;
10849 }
10850 /* end SCAN request from PE */
10851 case WDA_END_SCAN_REQ:
10852 {
10853 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10854 break ;
10855 }
10856 /* end SCAN request from PE */
10857 case WDA_FINISH_SCAN_REQ:
10858 {
10859 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10860 break ;
10861 }
10862 /* join request from PE */
10863 case WDA_CHNL_SWITCH_REQ:
10864 {
10865 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10866 {
10867 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10868 }
10869 else
10870 {
10871 WDA_ProcessChannelSwitchReq(pWDA,
10872 (tSwitchChannelParams*)pMsg->bodyptr) ;
10873 }
10874 break ;
10875 }
10876 /* ADD BSS request from PE */
10877 case WDA_ADD_BSS_REQ:
10878 {
10879 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10880 break ;
10881 }
10882 case WDA_ADD_STA_REQ:
10883 {
10884 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10885 break ;
10886 }
10887 case WDA_DELETE_BSS_REQ:
10888 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10890 break ;
10891 }
10892 case WDA_DELETE_STA_REQ:
10893 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010894 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10895 break ;
10896 }
10897 case WDA_CONFIG_PARAM_UPDATE_REQ:
10898 {
10899 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10900 break ;
10901 }
10902 case WDA_SET_BSSKEY_REQ:
10903 {
10904 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10905 break ;
10906 }
10907 case WDA_SET_STAKEY_REQ:
10908 {
10909 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10910 break ;
10911 }
10912 case WDA_SET_STA_BCASTKEY_REQ:
10913 {
10914 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10915 break ;
10916 }
10917 case WDA_REMOVE_BSSKEY_REQ:
10918 {
10919 WDA_ProcessRemoveBssKeyReq(pWDA,
10920 (tRemoveBssKeyParams *)pMsg->bodyptr);
10921 break ;
10922 }
10923 case WDA_REMOVE_STAKEY_REQ:
10924 {
10925 WDA_ProcessRemoveStaKeyReq(pWDA,
10926 (tRemoveStaKeyParams *)pMsg->bodyptr);
10927 break ;
10928 }
10929 case WDA_REMOVE_STA_BCASTKEY_REQ:
10930 {
10931 /* TODO: currently UMAC is not sending this request, Add the code for
10932 handling this request when UMAC supports */
10933 break;
10934 }
10935#ifdef FEATURE_WLAN_CCX
10936 case WDA_TSM_STATS_REQ:
10937 {
10938 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10939 break;
10940 }
10941#endif
10942 case WDA_UPDATE_EDCA_PROFILE_IND:
10943 {
10944 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10945 break;
10946 }
10947 case WDA_ADD_TS_REQ:
10948 {
10949 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10950 break;
10951 }
10952 case WDA_DEL_TS_REQ:
10953 {
10954 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10955 break;
10956 }
10957 case WDA_ADDBA_REQ:
10958 {
10959 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10960 break;
10961 }
10962 case WDA_DELBA_IND:
10963 {
10964 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10965 break;
10966 }
10967 case WDA_SET_LINK_STATE:
10968 {
10969 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10970 break;
10971 }
10972 case WDA_GET_STATISTICS_REQ:
10973 {
10974 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10975 break;
10976 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010977#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10978 case WDA_GET_ROAM_RSSI_REQ:
10979 {
10980 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10981 break;
10982 }
10983#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 case WDA_PWR_SAVE_CFG:
10985 {
10986 if(pWDA->wdaState == WDA_READY_STATE)
10987 {
10988 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10989 }
10990 else
10991 {
10992 if(NULL != pMsg->bodyptr)
10993 {
10994 vos_mem_free(pMsg->bodyptr);
10995 }
10996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10997 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10998 }
10999 break;
11000 }
11001 case WDA_ENTER_IMPS_REQ:
11002 {
11003 if(pWDA->wdaState == WDA_READY_STATE)
11004 {
11005 WDA_ProcessEnterImpsReq(pWDA);
11006 }
11007 else
11008 {
11009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11010 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11011 }
11012 break;
11013 }
11014 case WDA_EXIT_IMPS_REQ:
11015 {
11016 if(pWDA->wdaState == WDA_READY_STATE)
11017 {
11018 WDA_ProcessExitImpsReq(pWDA);
11019 }
11020 else
11021 {
11022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11023 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11024 }
11025 break;
11026 }
11027 case WDA_ENTER_BMPS_REQ:
11028 {
11029 if(pWDA->wdaState == WDA_READY_STATE)
11030 {
11031 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11032 }
11033 else
11034 {
11035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11036 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11037 }
11038 break;
11039 }
11040 case WDA_EXIT_BMPS_REQ:
11041 {
11042 if(pWDA->wdaState == WDA_READY_STATE)
11043 {
11044 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11045 }
11046 else
11047 {
11048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11049 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11050 }
11051 break;
11052 }
11053 case WDA_ENTER_UAPSD_REQ:
11054 {
11055 if(pWDA->wdaState == WDA_READY_STATE)
11056 {
11057 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11058 }
11059 else
11060 {
11061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11062 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11063 }
11064 break;
11065 }
11066 case WDA_EXIT_UAPSD_REQ:
11067 {
11068 if(pWDA->wdaState == WDA_READY_STATE)
11069 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011070 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 }
11072 else
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11075 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11076 }
11077 break;
11078 }
11079 case WDA_UPDATE_UAPSD_IND:
11080 {
11081 if(pWDA->wdaState == WDA_READY_STATE)
11082 {
11083 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11084 }
11085 else
11086 {
11087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11088 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11089 }
11090 break;
11091 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 case WDA_REGISTER_PE_CALLBACK :
11093 {
11094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11095 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11096 /*TODO: store the PE callback */
11097 /* Do Nothing? MSG Body should be freed at here */
11098 if(NULL != pMsg->bodyptr)
11099 {
11100 vos_mem_free(pMsg->bodyptr);
11101 }
11102 break;
11103 }
11104 case WDA_SYS_READY_IND :
11105 {
11106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11107 "Handling msg type WDA_SYS_READY_IND " );
11108 pWDA->wdaState = WDA_READY_STATE;
11109 if(NULL != pMsg->bodyptr)
11110 {
11111 vos_mem_free(pMsg->bodyptr);
11112 }
11113 break;
11114 }
11115 case WDA_BEACON_FILTER_IND :
11116 {
11117 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11118 break;
11119 }
11120 case WDA_BTC_SET_CFG:
11121 {
11122 /*TODO: handle this while dealing with BTC */
11123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11124 "Handling msg type WDA_BTC_SET_CFG " );
11125 /* Do Nothing? MSG Body should be freed at here */
11126 if(NULL != pMsg->bodyptr)
11127 {
11128 vos_mem_free(pMsg->bodyptr);
11129 }
11130 break;
11131 }
11132 case WDA_SIGNAL_BT_EVENT:
11133 {
11134 /*TODO: handle this while dealing with BTC */
11135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11136 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11137 /* Do Nothing? MSG Body should be freed at here */
11138 if(NULL != pMsg->bodyptr)
11139 {
11140 vos_mem_free(pMsg->bodyptr);
11141 }
11142 break;
11143 }
11144 case WDA_CFG_RXP_FILTER_REQ:
11145 {
11146 WDA_ProcessConfigureRxpFilterReq(pWDA,
11147 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11148 break;
11149 }
11150 case WDA_SET_HOST_OFFLOAD:
11151 {
11152 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11153 break;
11154 }
11155 case WDA_SET_KEEP_ALIVE:
11156 {
11157 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11158 break;
11159 }
11160#ifdef WLAN_NS_OFFLOAD
11161 case WDA_SET_NS_OFFLOAD:
11162 {
11163 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11164 break;
11165 }
11166#endif //WLAN_NS_OFFLOAD
11167 case WDA_ADD_STA_SELF_REQ:
11168 {
11169 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11170 break;
11171 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 case WDA_DEL_STA_SELF_REQ:
11173 {
11174 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11175 break;
11176 }
11177 case WDA_WOWL_ADD_BCAST_PTRN:
11178 {
11179 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11180 break;
11181 }
11182 case WDA_WOWL_DEL_BCAST_PTRN:
11183 {
11184 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11185 break;
11186 }
11187 case WDA_WOWL_ENTER_REQ:
11188 {
11189 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11190 break;
11191 }
11192 case WDA_WOWL_EXIT_REQ:
11193 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011194 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 break;
11196 }
11197 case WDA_TL_FLUSH_AC_REQ:
11198 {
11199 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11200 break;
11201 }
11202 case WDA_SIGNAL_BTAMP_EVENT:
11203 {
11204 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11205 break;
11206 }
11207#ifdef WDA_UT
11208 case WDA_WDI_EVENT_MSG:
11209 {
11210 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11211 break ;
11212 }
11213#endif
11214 case WDA_UPDATE_BEACON_IND:
11215 {
11216 WDA_ProcessUpdateBeaconParams(pWDA,
11217 (tUpdateBeaconParams *)pMsg->bodyptr);
11218 break;
11219 }
11220 case WDA_SEND_BEACON_REQ:
11221 {
11222 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11223 break;
11224 }
11225 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11226 {
11227 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11228 (tSendProbeRespParams *)pMsg->bodyptr);
11229 break;
11230 }
11231#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11232 case WDA_SET_MAX_TX_POWER_REQ:
11233 {
11234 WDA_ProcessSetMaxTxPowerReq(pWDA,
11235 (tMaxTxPowerParams *)pMsg->bodyptr);
11236 break;
11237 }
11238#endif
schang86c22c42013-03-13 18:41:24 -070011239 case WDA_SET_TX_POWER_REQ:
11240 {
11241 WDA_ProcessSetTxPowerReq(pWDA,
11242 (tSirSetTxPowerReq *)pMsg->bodyptr);
11243 break;
11244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 case WDA_SET_P2P_GO_NOA_REQ:
11246 {
11247 WDA_ProcessSetP2PGONOAReq(pWDA,
11248 (tP2pPsParams *)pMsg->bodyptr);
11249 break;
11250 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 /* timer related messages */
11252 case WDA_TIMER_BA_ACTIVITY_REQ:
11253 {
11254 WDA_BaCheckActivity(pWDA) ;
11255 break ;
11256 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011257
11258 /* timer related messages */
11259 case WDA_TIMER_TRAFFIC_STATS_IND:
11260 {
11261 WDA_TimerTrafficStatsInd(pWDA);
11262 break;
11263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011264#ifdef WLAN_FEATURE_VOWIFI_11R
11265 case WDA_AGGR_QOS_REQ:
11266 {
11267 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11268 break;
11269 }
11270#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011271 case WDA_FTM_CMD_REQ:
11272 {
11273 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11274 break ;
11275 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011276#ifdef FEATURE_OEM_DATA_SUPPORT
11277 case WDA_START_OEM_DATA_REQ:
11278 {
11279 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11280 break;
11281 }
11282#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011283 /* Tx Complete Time out Indication */
11284 case WDA_TX_COMPLETE_TIMEOUT_IND:
11285 {
11286 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11287 break;
11288 }
11289 case WDA_WLAN_SUSPEND_IND:
11290 {
11291 WDA_ProcessWlanSuspendInd(pWDA,
11292 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11293 break;
11294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 case WDA_WLAN_RESUME_REQ:
11296 {
11297 WDA_ProcessWlanResumeReq(pWDA,
11298 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11299 break;
11300 }
11301
11302 case WDA_UPDATE_CF_IND:
11303 {
11304 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11305 pMsg->bodyptr = NULL;
11306 break;
11307 }
11308#ifdef FEATURE_WLAN_SCAN_PNO
11309 case WDA_SET_PNO_REQ:
11310 {
11311 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11312 break;
11313 }
11314 case WDA_UPDATE_SCAN_PARAMS_REQ:
11315 {
11316 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11317 break;
11318 }
11319 case WDA_SET_RSSI_FILTER_REQ:
11320 {
11321 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11322 break;
11323 }
11324#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011325#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011326 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011327 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011328 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011329 break;
11330 }
11331#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 case WDA_SET_TX_PER_TRACKING_REQ:
11333 {
11334 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11335 break;
11336 }
11337
11338#ifdef WLAN_FEATURE_PACKET_FILTERING
11339 case WDA_8023_MULTICAST_LIST_REQ:
11340 {
11341 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11342 break;
11343 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11345 {
11346 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11347 break;
11348 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11350 {
11351 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11352 break;
11353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11355 {
11356 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11357 break;
11358 }
11359#endif // WLAN_FEATURE_PACKET_FILTERING
11360
11361
11362 case WDA_TRANSMISSION_CONTROL_IND:
11363 {
11364 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11365 break;
11366 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011367 case WDA_SET_POWER_PARAMS_REQ:
11368 {
11369 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11370 break;
11371 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011372#ifdef WLAN_FEATURE_GTK_OFFLOAD
11373 case WDA_GTK_OFFLOAD_REQ:
11374 {
11375 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11376 break;
11377 }
11378
11379 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11380 {
11381 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11382 break;
11383 }
11384#endif //WLAN_FEATURE_GTK_OFFLOAD
11385
11386 case WDA_SET_TM_LEVEL_REQ:
11387 {
11388 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11389 break;
11390 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011391#ifdef WLAN_FEATURE_11AC
11392 case WDA_UPDATE_OP_MODE:
11393 {
11394 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11395 {
11396 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11397 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11398 else
11399 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 " VHT OpMode Feature is Not Supported \n");
11401 }
11402 else
11403 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11404 " 11AC Feature is Not Supported \n");
11405 break;
11406 }
11407#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011408#ifdef WLAN_FEATURE_11W
11409 case WDA_EXCLUDE_UNENCRYPTED_IND:
11410 {
11411 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11412 break;
11413 }
11414#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011415#ifdef FEATURE_WLAN_TDLS
11416 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11417 {
11418 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11419 break;
11420 }
11421#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011422 case WDA_DHCP_START_IND:
11423 {
11424 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11425 break;
11426 }
11427 case WDA_DHCP_STOP_IND:
11428 {
11429 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11430 break;
11431 }
Leo Chang9056f462013-08-01 19:21:11 -070011432#ifdef FEATURE_WLAN_LPHB
11433 case WDA_LPHB_CONF_REQ:
11434 {
11435 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11436 break;
11437 }
11438#endif
Yue Mab9c86f42013-08-14 15:59:08 -070011439 case WDA_ADD_PERIODIC_TX_PTRN_IND:
11440 {
11441 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
11442 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
11443 break;
11444 }
11445 case WDA_DEL_PERIODIC_TX_PTRN_IND:
11446 {
11447 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
11448 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
11449 break;
11450 }
11451
Jeff Johnson295189b2012-06-20 16:38:30 -070011452 default:
11453 {
11454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11455 "No Handling for msg type %x in WDA "
11456 ,pMsg->type);
11457 /* Do Nothing? MSG Body should be freed at here */
11458 if(NULL != pMsg->bodyptr)
11459 {
11460 vos_mem_free(pMsg->bodyptr);
11461 }
11462 //WDA_VOS_ASSERT(0) ;
11463 }
11464 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 return status ;
11466}
11467
Jeff Johnson295189b2012-06-20 16:38:30 -070011468/*
11469 * FUNCTION: WDA_LowLevelIndCallback
11470 * IND API callback from WDI, send Ind to PE
11471 */
11472void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11473 void* pUserData )
11474{
11475 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11476#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11477 tSirRSSINotification rssiNotification;
11478#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 if(NULL == pWDA)
11480 {
11481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011482 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 VOS_ASSERT(0);
11484 return ;
11485 }
11486
11487 switch(wdiLowLevelInd->wdiIndicationType)
11488 {
11489 case WDI_RSSI_NOTIFICATION_IND:
11490 {
11491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11492 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011493#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11494 rssiNotification.bReserved =
11495 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11496 rssiNotification.bRssiThres1NegCross =
11497 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11498 rssiNotification.bRssiThres1PosCross =
11499 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11500 rssiNotification.bRssiThres2NegCross =
11501 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11502 rssiNotification.bRssiThres2PosCross =
11503 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11504 rssiNotification.bRssiThres3NegCross =
11505 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11506 rssiNotification.bRssiThres3PosCross =
11507 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011508 rssiNotification.avgRssi = (v_S7_t)
11509 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 WLANTL_BMPSRSSIRegionChangedNotification(
11511 pWDA->pVosContext,
11512 &rssiNotification);
11513#endif
11514 break ;
11515 }
11516 case WDI_MISSED_BEACON_IND:
11517 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011518 tpSirSmeMissedBeaconInd pMissBeacInd =
11519 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11521 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011523 if(NULL == pMissBeacInd)
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11526 "%s: VOS MEM Alloc Failure", __func__);
11527 break;
11528 }
11529 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11530 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11531 pMissBeacInd->bssIdx =
11532 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11533 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 break ;
11535 }
11536 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11537 {
11538 /* TODO: Decode Ind and send Ind to PE */
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11540 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11541 break ;
11542 }
11543
11544 case WDI_MIC_FAILURE_IND:
11545 {
11546 tpSirSmeMicFailureInd pMicInd =
11547 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11548
11549 if(NULL == pMicInd)
11550 {
11551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 break;
11554 }
11555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11556 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011557 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11558 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11559 vos_mem_copy(pMicInd->bssId,
11560 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11561 sizeof(tSirMacAddr));
11562 vos_mem_copy(pMicInd->info.srcMacAddr,
11563 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11564 sizeof(tSirMacAddr));
11565 vos_mem_copy(pMicInd->info.taMacAddr,
11566 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11567 sizeof(tSirMacAddr));
11568 vos_mem_copy(pMicInd->info.dstMacAddr,
11569 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11570 sizeof(tSirMacAddr));
11571 vos_mem_copy(pMicInd->info.rxMacAddr,
11572 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11573 sizeof(tSirMacAddr));
11574 pMicInd->info.multicast =
11575 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11576 pMicInd->info.keyId=
11577 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11578 pMicInd->info.IV1=
11579 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11580 vos_mem_copy(pMicInd->info.TSC,
11581 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011582 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11583 (void *)pMicInd , 0) ;
11584 break ;
11585 }
11586 case WDI_FATAL_ERROR_IND:
11587 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011588 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011589 /* TODO: Decode Ind and send Ind to PE */
11590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11591 "Received WDI_FATAL_ERROR_IND from WDI ");
11592 break ;
11593 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 case WDI_DEL_STA_IND:
11595 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011596 tpDeleteStaContext pDelSTACtx =
11597 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11598
11599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11600 "Received WDI_DEL_STA_IND from WDI ");
11601 if(NULL == pDelSTACtx)
11602 {
11603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011605 break;
11606 }
11607 vos_mem_copy(pDelSTACtx->addr2,
11608 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11609 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011610 vos_mem_copy(pDelSTACtx->bssId,
11611 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11612 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011613 pDelSTACtx->assocId =
11614 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11615 pDelSTACtx->reasonCode =
11616 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11617 pDelSTACtx->staId =
11618 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011619 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11620 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 break ;
11622 }
11623 case WDI_COEX_IND:
11624 {
11625 tANI_U32 index;
11626 vos_msg_t vosMsg;
11627 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11628 if(NULL == pSmeCoexInd)
11629 {
11630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011631 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011632 break;
11633 }
11634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11635 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011636 /* Message Header */
11637 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11638 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011639 /* Info from WDI Indication */
11640 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11641 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11642 {
11643 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 /* VOS message wrapper */
11646 vosMsg.type = eWNI_SME_COEX_IND;
11647 vosMsg.bodyptr = (void *)pSmeCoexInd;
11648 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011649 /* Send message to SME */
11650 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11651 {
11652 /* free the mem and return */
11653 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11654 }
11655 else
11656 {
11657 /* DEBUG */
11658 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11659 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11660 pSmeCoexInd->coexIndType,
11661 pSmeCoexInd->coexIndData[0],
11662 pSmeCoexInd->coexIndData[1],
11663 pSmeCoexInd->coexIndData[2],
11664 pSmeCoexInd->coexIndData[3]);
11665 }
11666 break;
11667 }
11668 case WDI_TX_COMPLETE_IND:
11669 {
11670 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11671 /* Calling TxCompleteAck Indication from wda context*/
11672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11673 "Complete Indication received from HAL");
11674 if( pWDA->pAckTxCbFunc )
11675 {
11676 if( VOS_STATUS_SUCCESS !=
11677 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11678 {
11679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11680 "Tx Complete timeout Timer Stop Failed ");
11681 }
11682 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11683 pWDA->pAckTxCbFunc = NULL;
11684 }
11685 else
11686 {
11687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11688 "Tx Complete Indication is received after timeout ");
11689 }
11690 break;
11691 }
Viral Modid86bde22012-12-10 13:09:21 -080011692 case WDI_P2P_NOA_START_IND :
11693 {
11694 tSirP2PNoaStart *pP2pNoaStart =
11695 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11696
11697 if (NULL == pP2pNoaStart)
11698 {
11699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11700 "Memory allocation failure, "
11701 "WDI_P2P_NOA_START_IND not forwarded");
11702 break;
11703 }
11704 pP2pNoaStart->status =
11705 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11706 pP2pNoaStart->bssIdx =
11707 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11708 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11709 (void *)pP2pNoaStart , 0) ;
11710 break;
11711 }
11712
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011713#ifdef FEATURE_WLAN_TDLS
11714 case WDI_TDLS_IND :
11715 {
11716 tSirTdlsInd *pTdlsInd =
11717 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11718
11719 if (NULL == pTdlsInd)
11720 {
11721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11722 "Memory allocation failure, "
11723 "WDI_TDLS_IND not forwarded");
11724 break;
11725 }
11726 pTdlsInd->status =
11727 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11728 pTdlsInd->assocId =
11729 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11730 pTdlsInd->staIdx =
11731 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11732 pTdlsInd->reasonCode =
11733 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11734 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11735 (void *)pTdlsInd , 0) ;
11736 break;
11737 }
11738#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 case WDI_P2P_NOA_ATTR_IND :
11740 {
11741 tSirP2PNoaAttr *pP2pNoaAttr =
11742 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11744 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 if (NULL == pP2pNoaAttr)
11746 {
11747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11748 "Memory allocation failure, "
11749 "WDI_P2P_NOA_ATTR_IND not forwarded");
11750 break;
11751 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011752 pP2pNoaAttr->index =
11753 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11754 pP2pNoaAttr->oppPsFlag =
11755 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11756 pP2pNoaAttr->ctWin =
11757 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11758
11759 pP2pNoaAttr->uNoa1IntervalCnt =
11760 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11761 pP2pNoaAttr->uNoa1Duration =
11762 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11763 pP2pNoaAttr->uNoa1Interval =
11764 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11765 pP2pNoaAttr->uNoa1StartTime =
11766 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011767 pP2pNoaAttr->uNoa2IntervalCnt =
11768 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11769 pP2pNoaAttr->uNoa2Duration =
11770 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11771 pP2pNoaAttr->uNoa2Interval =
11772 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11773 pP2pNoaAttr->uNoa2StartTime =
11774 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11776 (void *)pP2pNoaAttr , 0) ;
11777 break;
11778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011779#ifdef FEATURE_WLAN_SCAN_PNO
11780 case WDI_PREF_NETWORK_FOUND_IND:
11781 {
11782 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011783 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11784 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11785 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11786 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11787
Jeff Johnson295189b2012-06-20 16:38:30 -070011788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11789 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 if (NULL == pPrefNetworkFoundInd)
11791 {
11792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11793 "Memory allocation failure, "
11794 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11795 break;
11796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 /* Message Header */
11798 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011799 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011800
11801 /* Info from WDI Indication */
11802 pPrefNetworkFoundInd->ssId.length =
11803 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011805 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11806 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11807 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011808 if (NULL !=
11809 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11810 {
11811 pPrefNetworkFoundInd->frameLength =
11812 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11813 vos_mem_copy( pPrefNetworkFoundInd->data,
11814 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11815 pPrefNetworkFoundInd->frameLength);
11816 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11817 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11818 }
11819 else
11820 {
11821 pPrefNetworkFoundInd->frameLength = 0;
11822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011823 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011824 /* VOS message wrapper */
11825 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11826 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11827 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011828 /* Send message to SME */
11829 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11830 {
11831 /* free the mem and return */
11832 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11833 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011834 break;
11835 }
11836#endif // FEATURE_WLAN_SCAN_PNO
11837
11838#ifdef WLAN_WAKEUP_EVENTS
11839 case WDI_WAKE_REASON_IND:
11840 {
11841 vos_msg_t vosMsg;
11842 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11843 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11844 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11845
11846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11847 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11848 wdiLowLevelInd->wdiIndicationType,
11849 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11850 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11851 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11852
11853 if (NULL == pWakeReasonInd)
11854 {
11855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11856 "Memory allocation failure, "
11857 "WDI_WAKE_REASON_IND not forwarded");
11858 break;
11859 }
11860
11861 vos_mem_zero(pWakeReasonInd, allocSize);
11862
11863 /* Message Header */
11864 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11865 pWakeReasonInd->mesgLen = allocSize;
11866
11867 /* Info from WDI Indication */
11868 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11869 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11870 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11871 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11872 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11873 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11874 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11875 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11876
11877 /* VOS message wrapper */
11878 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11879 vosMsg.bodyptr = (void *) pWakeReasonInd;
11880 vosMsg.bodyval = 0;
11881
11882 /* Send message to SME */
11883 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11884 {
11885 /* free the mem and return */
11886 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11887 }
11888
11889 break;
11890 }
11891#endif // WLAN_WAKEUP_EVENTS
11892
11893 case WDI_TX_PER_HIT_IND:
11894 {
11895 vos_msg_t vosMsg;
11896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11897 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11898 /* VOS message wrapper */
11899 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11900 vosMsg.bodyptr = NULL;
11901 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011902 /* Send message to SME */
11903 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11904 {
11905 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11906 }
11907 break;
11908 }
11909
Leo Chang9056f462013-08-01 19:21:11 -070011910#ifdef FEATURE_WLAN_LPHB
11911 case WDI_LPHB_WAIT_TIMEOUT_IND:
11912 {
11913 vos_msg_t vosMsg;
11914 tSirLPHBTimeoutInd *lphbTimeoutInd;
11915
11916 lphbTimeoutInd =
11917 (tSirLPHBTimeoutInd *)vos_mem_malloc(sizeof(tSirLPHBTimeoutInd));
11918 if (NULL == lphbTimeoutInd)
11919 {
11920 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11921 "%s: LPHB IND buffer alloc Fail", __func__);
11922 return ;
11923 }
11924
11925 lphbTimeoutInd->sessionIdx =
11926 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
11927 lphbTimeoutInd->protocolType =
11928 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
11929 lphbTimeoutInd->eventReason =
11930 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
11931
11932 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11933 "Get WDI_LPHB_WAIT_TIMEOUT_IND bssIdx %d",
11934 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
11935
11936 vosMsg.type = eWNI_SME_LPHB_WAIT_TIMEOUT_IND;
11937 vosMsg.bodyptr = lphbTimeoutInd;
11938 vosMsg.bodyval = 0;
11939 /* Send message to SME */
11940 if (VOS_STATUS_SUCCESS !=
11941 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11942 {
11943 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11944 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
11945 vos_mem_free(lphbTimeoutInd);
11946 }
11947 break;
11948 }
11949#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070011950 case WDI_PERIODIC_TX_PTRN_FW_IND:
11951 {
11952 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11953 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
11954 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
11955 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
11956 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
11957 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
11958 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
11959
11960 break;
11961 }
Leo Chang9056f462013-08-01 19:21:11 -070011962
Ravi Joshid2ca7c42013-07-23 08:37:49 -070011963 case WDI_IBSS_PEER_INACTIVITY_IND:
11964 {
11965 tSirIbssPeerInactivityInd *pIbssInd =
11966 (tSirIbssPeerInactivityInd *)
11967 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
11968
11969 if (NULL == pIbssInd)
11970 {
11971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11972 "Memory allocation failure, "
11973 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
11974 break;
11975 }
11976
11977 pIbssInd->bssIdx =
11978 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
11979 pIbssInd->staIdx =
11980 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
11981 vos_mem_copy(pIbssInd->peerAddr,
11982 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
11983 sizeof(tSirMacAddr));
11984 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
11985 break;
11986 }
11987
Jeff Johnson295189b2012-06-20 16:38:30 -070011988 default:
11989 {
11990 /* TODO error */
11991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11992 "Received UNKNOWN Indication from WDI ");
11993 }
11994 }
11995 return ;
11996}
11997
Jeff Johnson295189b2012-06-20 16:38:30 -070011998/*
11999 * BA related processing in WDA.
12000 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012001void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12002 void* pUserData)
12003{
12004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12005 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012006 if(NULL == pWdaParams)
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012009 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012010 VOS_ASSERT(0) ;
12011 return ;
12012 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012013 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012014 vos_mem_free(pWdaParams->wdaMsgParam) ;
12015 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12016 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012019 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12020 {
12021 tANI_U8 i = 0 ;
12022 tBaActivityInd *baActivityInd = NULL ;
12023 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12024 tANI_U8 allocSize = sizeof(tBaActivityInd)
12025 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12026 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12027 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012028 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012029 if(NULL == baActivityInd)
12030 {
12031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012033 VOS_ASSERT(0) ;
12034 return;
12035 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012036 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12037 sizeof(tSirMacAddr)) ;
12038 baActivityInd->baCandidateCnt = baCandidateCount ;
12039
12040 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12041 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12042
12043 for(i = 0 ; i < baCandidateCount ; i++)
12044 {
12045 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012046 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12047 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012048 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12049 {
12050 baCandidate->baInfo[tid].fBaEnable =
12051 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12052 baCandidate->baInfo[tid].startingSeqNum =
12053 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12054 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012055 wdiBaCandidate++ ;
12056 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012058 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12059 }
12060 else
12061 {
12062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12063 "BA Trigger RSP with Failure received ");
12064 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012065 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012066}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012067
12068
12069/*
12070 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12071 * during MCC
12072 */
12073void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12074{
12075 wpt_uint32 enabled;
12076 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12077 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12078 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12079
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012080 if (NULL == pMac )
12081 {
12082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12083 "%s: Invoked with invalid MAC context ", __func__ );
12084 VOS_ASSERT(0);
12085 return;
12086 }
12087
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012088 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12089 != eSIR_SUCCESS)
12090 {
12091 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12092 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12093 return;
12094 }
12095
12096 if(!enabled)
12097 {
12098 return;
12099 }
12100
12101 if(NULL == pWDA)
12102 {
12103 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12104 "%s:WDA context is NULL", __func__);
12105 VOS_ASSERT(0);
12106 return;
12107 }
12108
12109 if(activate)
12110 {
12111 if( VOS_STATUS_SUCCESS !=
12112 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12113 {
12114 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12115 "Traffic Stats Timer Start Failed ");
12116 return;
12117 }
12118 WDI_DS_ActivateTrafficStats();
12119 }
12120 else
12121 {
12122 WDI_DS_DeactivateTrafficStats();
12123 WDI_DS_ClearTrafficStats();
12124
12125 if( VOS_STATUS_SUCCESS !=
12126 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12127 {
12128 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12129 "Traffic Stats Timer Stop Failed ");
12130 return;
12131 }
12132 }
12133}
12134
12135/*
12136 * Traffic Stats Timer handler
12137 */
12138void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12139{
12140 WDI_Status wdiStatus;
12141 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12142 WDI_TrafficStatsIndType trafficStatsIndParams;
12143 wpt_uint32 length, enabled;
12144 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12145
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012146 if (NULL == pMac )
12147 {
12148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12149 "%s: Invoked with invalid MAC context ", __func__ );
12150 VOS_ASSERT(0);
12151 return;
12152 }
12153
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012154 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12155 != eSIR_SUCCESS)
12156 {
12157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12158 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12159 return;
12160 }
12161
12162 if(!enabled)
12163 {
12164 WDI_DS_DeactivateTrafficStats();
12165 return;
12166 }
12167
12168 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12169
12170 if(pWdiTrafficStats != NULL)
12171 {
12172 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12173 trafficStatsIndParams.length = length;
12174 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012175 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012176 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12177 trafficStatsIndParams.pUserData = pWDA;
12178
12179 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12180
12181 if(WDI_STATUS_PENDING == wdiStatus)
12182 {
12183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12184 "Pending received for %s:%d ",__func__,__LINE__ );
12185 }
12186 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12189 "Failure in %s:%d ",__func__,__LINE__ );
12190 }
12191
12192 WDI_DS_ClearTrafficStats();
12193 }
12194 else
12195 {
12196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12197 "pWdiTrafficStats is Null");
12198 }
12199
12200 if( VOS_STATUS_SUCCESS !=
12201 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12202 {
12203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12204 "Traffic Stats Timer Start Failed ");
12205 return;
12206 }
12207}
12208
Jeff Johnson295189b2012-06-20 16:38:30 -070012209/*
12210 * BA Activity check timer handler
12211 */
12212void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12213{
12214 tANI_U8 curSta = 0 ;
12215 tANI_U8 tid = 0 ;
12216 tANI_U8 size = 0 ;
12217 tANI_U8 baCandidateCount = 0 ;
12218 tANI_U8 newBaCandidate = 0 ;
12219 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12220
12221 if(NULL == pWDA)
12222 {
12223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012224 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012225 VOS_ASSERT(0);
12226 return ;
12227 }
12228 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12229 {
12230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12231 "Inconsistent STA entries in WDA");
12232 VOS_ASSERT(0) ;
12233 }
12234 /* walk through all STA entries and find out TX packet count */
12235 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12236 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012237#ifdef WLAN_SOFTAP_VSTA_FEATURE
12238 // We can only do BA on "hard" STAs.
12239 if (!(IS_HWSTA_IDX(curSta)))
12240 {
12241 continue;
12242 }
12243#endif //WLAN_SOFTAP_VSTA_FEATURE
12244 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12245 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012246 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012247 tANI_U32 txPktCount = 0 ;
12248 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012249 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012250 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12251 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012252 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12253 curSta, tid, &txPktCount)))
12254 {
12255#if 0
12256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12257 "************* %d:%d, %d ",curSta, txPktCount,
12258 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12259#endif
12260 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012261 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012262 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12263 curSta, tid)))
12264 {
12265 /* get prepare for sending message to HAL */
12266 //baCandidate[baCandidateCount].staIdx = curSta ;
12267 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12268 newBaCandidate = WDA_ENABLE_BA ;
12269 }
12270 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12271 }
12272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012273 /* fill the entry for all the sta with given TID's */
12274 if(WDA_ENABLE_BA == newBaCandidate)
12275 {
12276 /* move to next BA candidate */
12277 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12278 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12279 baCandidateCount++ ;
12280 newBaCandidate = WDA_DISABLE_BA ;
12281 }
12282 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012283 /* prepare and send message to hal */
12284 if( 0 < baCandidateCount)
12285 {
12286 WDI_Status status = WDI_STATUS_SUCCESS ;
12287 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12288 tWDA_ReqParams *pWdaParams =
12289 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012290 if(NULL == pWdaParams)
12291 {
12292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 VOS_ASSERT(0) ;
12295 return;
12296 }
12297 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12298 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12299 if(NULL == wdiTriggerBaReq)
12300 {
12301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012303 VOS_ASSERT(0) ;
12304 vos_mem_free(pWdaParams);
12305 return;
12306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012307 do
12308 {
12309 WDI_TriggerBAReqinfoType *triggerBaInfo =
12310 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12311 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12312 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12313 * for each request */
12314 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12315 triggerBaInfo->ucBASessionID = 0;
12316 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12317 } while(0) ;
12318 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012320 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 pWdaParams->pWdaContext = pWDA;
12322 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12323 pWdaParams->wdaMsgParam = NULL;
12324 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12325 WDA_TriggerBaReqCallback, pWdaParams) ;
12326 if(IS_WDI_STATUS_FAILURE(status))
12327 {
12328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12329 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12330 vos_mem_free(pWdaParams->wdaMsgParam) ;
12331 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12332 vos_mem_free(pWdaParams) ;
12333 }
12334 }
12335 else
12336 {
12337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12338 "There is no TID for initiating BA");
12339 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012340 if( VOS_STATUS_SUCCESS !=
12341 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12342 {
12343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12344 "BA Activity Timer Stop Failed ");
12345 return ;
12346 }
12347 if( VOS_STATUS_SUCCESS !=
12348 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12349 {
12350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12351 "BA Activity Timer Start Failed ");
12352 return;
12353 }
12354 return ;
12355}
Jeff Johnson295189b2012-06-20 16:38:30 -070012356/*
12357 * WDA common routine to create timer used by WDA.
12358 */
12359static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12360{
Jeff Johnson295189b2012-06-20 16:38:30 -070012361 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12362 tANI_U32 val = 0 ;
12363 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12364
12365 if(NULL == pMac)
12366 {
12367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012368 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012369 VOS_ASSERT(0);
12370 return VOS_STATUS_E_FAILURE;
12371 }
12372 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12373 != eSIR_SUCCESS)
12374 {
12375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12376 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12377 return VOS_STATUS_E_FAILURE;
12378 }
12379 val = SYS_MS_TO_TICKS(val) ;
12380
12381 /* BA activity check timer */
12382 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12383 "BA Activity Check timer", WDA_TimerHandler,
12384 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12385 if(status != TX_SUCCESS)
12386 {
12387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12388 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012389 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012391 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012392 /* Tx Complete Timeout timer */
12393 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12394 "Tx Complete Check timer", WDA_TimerHandler,
12395 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012396 if(status != TX_SUCCESS)
12397 {
12398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12399 "Unable to create Tx Complete Timeout timer");
12400 /* Destroy timer of BA activity check timer */
12401 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12402 if(status != TX_SUCCESS)
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12405 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012406 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012407 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012408 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012409 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012410
12411 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12412
12413 /* Traffic Stats timer */
12414 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12415 "Traffic Stats timer", WDA_TimerHandler,
12416 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12417 if(status != TX_SUCCESS)
12418 {
12419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12420 "Unable to create traffic stats timer");
12421 /* Destroy timer of BA activity check timer */
12422 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12423 if(status != TX_SUCCESS)
12424 {
12425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12426 "Unable to Destroy BA activity timer");
12427 }
12428 /* Destroy timer of tx complete timer */
12429 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12430 if(status != TX_SUCCESS)
12431 {
12432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12433 "Unable to Tx complete timer");
12434 }
12435 return VOS_STATUS_E_FAILURE ;
12436 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012437 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012438}
Jeff Johnson295189b2012-06-20 16:38:30 -070012439/*
12440 * WDA common routine to destroy timer used by WDA.
12441 */
12442static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12443{
12444 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012445 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12446 if(status != TX_SUCCESS)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12449 "Unable to Destroy Tx Complete Timeout timer");
12450 return eSIR_FAILURE ;
12451 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012452 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12453 if(status != TX_SUCCESS)
12454 {
12455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12456 "Unable to Destroy BA activity timer");
12457 return eSIR_FAILURE ;
12458 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012459 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12460 if(status != TX_SUCCESS)
12461 {
12462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12463 "Unable to Destroy traffic stats timer");
12464 return eSIR_FAILURE ;
12465 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012466 return eSIR_SUCCESS ;
12467}
Jeff Johnson295189b2012-06-20 16:38:30 -070012468/*
12469 * WDA timer handler.
12470 */
12471void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12472{
12473 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12474 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012475 /*
12476 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12477 */
12478 wdaMsg.type = timerInfo ;
12479 wdaMsg.bodyptr = NULL;
12480 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012481 /* post the message.. */
12482 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12483 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12484 {
12485 vosStatus = VOS_STATUS_E_BADMSG;
12486 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012487}
Jeff Johnson295189b2012-06-20 16:38:30 -070012488/*
12489 * WDA Tx Complete timeout Indication.
12490 */
12491void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12492{
12493 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012494 if( pWDA->pAckTxCbFunc )
12495 {
12496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12497 "TxComplete timer expired\n");
12498 pWDA->pAckTxCbFunc( pMac, 0);
12499 pWDA->pAckTxCbFunc = NULL;
12500 }
12501 else
12502 {
12503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12504 "There is no request pending for TxComplete and wait timer expired\n");
12505 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012506}
Jeff Johnson295189b2012-06-20 16:38:30 -070012507/*
12508 * WDA Set REG Domain to VOS NV
12509 */
12510eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12511{
12512 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12513 {
12514 return eHAL_STATUS_INVALID_PARAMETER;
12515 }
12516 return eHAL_STATUS_SUCCESS;
12517}
Jeff Johnson295189b2012-06-20 16:38:30 -070012518
Jeff Johnson295189b2012-06-20 16:38:30 -070012519#ifdef FEATURE_WLAN_SCAN_PNO
12520/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012521 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012522 *
12523 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012524void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012525{
12526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012528 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012529 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012530 {
12531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012532 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012533 VOS_ASSERT(0) ;
12534 return ;
12535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012536
Yue Ma7f44bbe2013-04-12 11:47:39 -070012537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12538 vos_mem_free(pWdaParams->wdaMsgParam);
12539 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012540
12541 return ;
12542}
Jeff Johnson295189b2012-06-20 16:38:30 -070012543/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012544 * FUNCTION: WDA_PNOScanReqCallback
12545 * Free memory.
12546 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12547 */
12548void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012549{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012550 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12551
12552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12553 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12554
12555 if(NULL == pWdaParams)
12556 {
12557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12558 "%s: pWdaParams received NULL", __func__);
12559 VOS_ASSERT(0);
12560 return;
12561 }
12562
12563 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12564 {
12565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12566 vos_mem_free(pWdaParams->wdaMsgParam);
12567 vos_mem_free(pWdaParams);
12568 }
12569
12570 return;
12571}
12572/*
12573 * FUNCTION: WDA_UpdateScanParamsRespCallback
12574 *
12575 */
12576void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12577{
12578 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012580 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012581 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012582 {
12583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012584 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012585 VOS_ASSERT(0) ;
12586 return ;
12587 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012588
12589 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12590 vos_mem_free(pWdaParams->wdaMsgParam);
12591 vos_mem_free(pWdaParams);
12592
Jeff Johnson295189b2012-06-20 16:38:30 -070012593 return ;
12594}
Jeff Johnson295189b2012-06-20 16:38:30 -070012595/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012596 * FUNCTION: WDA_UpdateScanParamsReqCallback
12597 * Free memory.
12598 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12599 */
12600void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12601{
12602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12603
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12605 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12606
12607 if(NULL == pWdaParams)
12608 {
12609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12610 "%s: pWdaParams received NULL", __func__);
12611 VOS_ASSERT(0);
12612 return;
12613 }
12614
12615 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12616 {
12617 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12618 vos_mem_free(pWdaParams->wdaMsgParam);
12619 vos_mem_free(pWdaParams);
12620 }
12621
12622 return;
12623}
12624/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012625 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12626 * Request to WDI to set Preferred Network List.Offload
12627 */
12628VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12629 tSirPNOScanReq *pPNOScanReqParams)
12630{
Jeff Johnson43971f52012-07-17 12:26:56 -070012631 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012632 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12633 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12634 tWDA_ReqParams *pWdaParams ;
12635 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012637 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012638 if(NULL == pwdiPNOScanReqInfo)
12639 {
12640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012641 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012642 VOS_ASSERT(0);
12643 return VOS_STATUS_E_NOMEM;
12644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012645 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12646 if(NULL == pWdaParams)
12647 {
12648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012649 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 VOS_ASSERT(0);
12651 vos_mem_free(pwdiPNOScanReqInfo);
12652 return VOS_STATUS_E_NOMEM;
12653 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012654 //
12655 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12656 //
12657 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12658 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12660 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12661 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12663 {
12664 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12665 &pPNOScanReqParams->aNetworks[i],
12666 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 /*Scan timer intervals*/
12669 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12670 &pPNOScanReqParams->scanTimers,
12671 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 /*Probe template for 2.4GHz band*/
12673 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12674 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12675 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012676 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12677 pPNOScanReqParams->p24GProbeTemplate,
12678 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 /*Probe template for 5GHz band*/
12680 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12681 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12682 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12684 pPNOScanReqParams->p5GProbeTemplate,
12685 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012686 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12687 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012688
Jeff Johnson295189b2012-06-20 16:38:30 -070012689 /* Store Params pass it to WDI */
12690 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12691 pWdaParams->pWdaContext = pWDA;
12692 /* Store param pointer as passed in by caller */
12693 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012694 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012695 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012696 if(IS_WDI_STATUS_FAILURE(status))
12697 {
12698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12699 "Failure in Set PNO REQ WDI API, free all the memory " );
12700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12701 vos_mem_free(pWdaParams->wdaMsgParam);
12702 pWdaParams->wdaWdiApiMsgParam = NULL;
12703 pWdaParams->wdaMsgParam = NULL;
12704 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 return CONVERT_WDI2VOS_STATUS(status) ;
12706}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012707
12708#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12709
12710void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12711{
12712 /*Convert the CSR Auth types to WDI Auth types */
12713 switch (csrAuthType)
12714 {
12715 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12716 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12717 break;
12718#ifdef FEATURE_WLAN_CCX
12719 case eCSR_AUTH_TYPE_CCKM_WPA:
12720 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12721 break;
12722#endif
12723 case eCSR_AUTH_TYPE_WPA:
12724 *AuthType = eWDA_AUTH_TYPE_WPA;
12725 break;
12726 case eCSR_AUTH_TYPE_WPA_PSK:
12727 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12728 break;
12729#ifdef FEATURE_WLAN_CCX
12730 case eCSR_AUTH_TYPE_CCKM_RSN:
12731 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12732 break;
12733#endif
12734 case eCSR_AUTH_TYPE_RSN:
12735 *AuthType = eWDA_AUTH_TYPE_RSN;
12736 break;
12737 case eCSR_AUTH_TYPE_RSN_PSK:
12738 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12739 break;
12740#if defined WLAN_FEATURE_VOWIFI_11R
12741 case eCSR_AUTH_TYPE_FT_RSN:
12742 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12743 break;
12744 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12745 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12746 break;
12747#endif
12748#ifdef FEATURE_WLAN_WAPI
12749 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12750 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12751 break;
12752 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12753 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12754 break;
12755#endif /* FEATURE_WLAN_WAPI */
12756 case eCSR_AUTH_TYPE_SHARED_KEY:
12757 case eCSR_AUTH_TYPE_AUTOSWITCH:
12758 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12759 break;
12760#if 0
12761 case eCSR_AUTH_TYPE_SHARED_KEY:
12762 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12763 break;
12764 case eCSR_AUTH_TYPE_AUTOSWITCH:
12765 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12766#endif
12767 default:
12768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12769 "%s: Unknown Auth Type", __func__);
12770 break;
12771 }
12772}
12773void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12774{
12775 switch (csrEncrType)
12776 {
12777 case eCSR_ENCRYPT_TYPE_NONE:
12778 *EncrType = WDI_ED_NONE;
12779 break;
12780 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12781 case eCSR_ENCRYPT_TYPE_WEP40:
12782 *EncrType = WDI_ED_WEP40;
12783 break;
12784 case eCSR_ENCRYPT_TYPE_WEP104:
12785 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12786 *EncrType = WDI_ED_WEP104;
12787 break;
12788 case eCSR_ENCRYPT_TYPE_TKIP:
12789 *EncrType = WDI_ED_TKIP;
12790 break;
12791 case eCSR_ENCRYPT_TYPE_AES:
12792 *EncrType = WDI_ED_CCMP;
12793 break;
12794#ifdef WLAN_FEATURE_11W
12795 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12796 *EncrType = WDI_ED_AES_128_CMAC;
12797 break;
12798#endif
12799#ifdef FEATURE_WLAN_WAPI
12800 case eCSR_ENCRYPT_TYPE_WPI:
12801 *EncrType = WDI_ED_WPI;
12802 break;
12803#endif
12804 case eCSR_ENCRYPT_TYPE_ANY:
12805 *EncrType = WDI_ED_ANY;
12806 break;
12807
12808 default:
12809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12810 "%s: Unknown Encryption Type", __func__);
12811 break;
12812 }
12813}
12814
12815/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012816 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012817 * Request to WDI to set Roam Offload Scan
12818 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012819VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012820 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12821{
12822 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012823 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12824 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012825 tWDA_ReqParams *pWdaParams ;
12826 v_U8_t csrAuthType;
12827 WDI_RoamNetworkType *pwdiRoamNetworkType;
12828 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12830 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012831 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012832 {
12833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12834 "%s: VOS MEM Alloc Failure", __func__);
12835 VOS_ASSERT(0);
12836 return VOS_STATUS_E_NOMEM;
12837 }
12838 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12839 if (NULL == pWdaParams)
12840 {
12841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12842 "%s: VOS MEM Alloc Failure", __func__);
12843 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012844 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012845 return VOS_STATUS_E_NOMEM;
12846 }
12847
12848 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012849 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012850 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012851 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12852 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012853 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12854 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12855 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12856 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12857 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12858 sizeof(pwdiRoamNetworkType->currAPbssid));
12859 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12860 csrAuthType);
12861 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12862 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12863 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12864 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12865 pwdiRoamOffloadScanInfo->LookupThreshold =
12866 pRoamOffloadScanReqParams->LookupThreshold ;
12867 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12868 pRoamOffloadScanReqParams->RoamRssiDiff ;
12869 pwdiRoamOffloadScanInfo->Command =
12870 pRoamOffloadScanReqParams->Command ;
12871 pwdiRoamOffloadScanInfo->StartScanReason =
12872 pRoamOffloadScanReqParams->StartScanReason ;
12873 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12874 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12875 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12876 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12877 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12878 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12879 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12880 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12881 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12882 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12883 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12884 pRoamOffloadScanReqParams->IsCCXEnabled ;
12885 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12886 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12887 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12888 pwdiRoamNetworkType->ssId.ucLength =
12889 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12890 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12891 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12892 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12893 pwdiRoamNetworkType->ChannelCount =
12894 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12895 pwdiRoamOffloadScanInfo->ChannelCacheType =
12896 pRoamOffloadScanReqParams->ChannelCacheType;
12897 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12898 pRoamOffloadScanReqParams->ValidChannelList,
12899 pRoamOffloadScanReqParams->ValidChannelCount);
12900 pwdiRoamOffloadScanInfo->ValidChannelCount =
12901 pRoamOffloadScanReqParams->ValidChannelCount;
12902 pwdiRoamOffloadScanInfo->us24GProbeSize =
12903 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12904 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12905 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12906 pRoamOffloadScanReqParams->p24GProbeTemplate,
12907 pwdiRoamOffloadScanInfo->us24GProbeSize);
12908 pwdiRoamOffloadScanInfo->us5GProbeSize =
12909 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12910 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12911 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12912 pRoamOffloadScanReqParams->p5GProbeTemplate,
12913 pwdiRoamOffloadScanInfo->us5GProbeSize);
12914 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12915 pRoamOffloadScanReqParams->MDID.mdiePresent;
12916 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12917 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012918 pwdiRoamOffloadScanInfo->nProbes =
12919 pRoamOffloadScanReqParams->nProbes;
12920 pwdiRoamOffloadScanInfo->HomeAwayTime =
12921 pRoamOffloadScanReqParams->HomeAwayTime;
12922 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012923 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012924 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012925 pWdaParams->pWdaContext = pWDA;
12926 /* Store param pointer as passed in by caller */
12927 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012928 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012929 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12930 if(IS_WDI_STATUS_FAILURE(status))
12931 {
12932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12933 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12935 vos_mem_free(pWdaParams->wdaMsgParam);
12936 pWdaParams->wdaWdiApiMsgParam = NULL;
12937 pWdaParams->wdaMsgParam = NULL;
12938 }
12939 return CONVERT_WDI2VOS_STATUS(status) ;
12940}
12941#endif
12942
Jeff Johnson295189b2012-06-20 16:38:30 -070012943/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012944 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012945 *
12946 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012947void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012948{
12949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12950
12951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012952 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012953
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012954 if(NULL == pWdaParams)
12955 {
12956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012957 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012958 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012959 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012960 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012961
Jeff Johnson295189b2012-06-20 16:38:30 -070012962 vos_mem_free(pWdaParams->wdaMsgParam) ;
12963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12964 vos_mem_free(pWdaParams) ;
12965
12966 return ;
12967}
12968/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012969 * FUNCTION: WDA_RssiFilterReqCallback
12970 * Free memory.
12971 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12972 */
12973void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12974{
12975 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12976
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12978 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12979
12980 if(NULL == pWdaParams)
12981 {
12982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12983 "%s: pWdaParams received NULL", __func__);
12984 VOS_ASSERT(0);
12985 return;
12986 }
12987
12988 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12989 {
12990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12991 vos_mem_free(pWdaParams->wdaMsgParam);
12992 vos_mem_free(pWdaParams);
12993 }
12994
12995 return;
12996}
12997/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12999 * Request to WDI to set Preferred Network List.Offload
13000 */
13001VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13002 tSirSetRSSIFilterReq* pRssiFilterParams)
13003{
Jeff Johnson43971f52012-07-17 12:26:56 -070013004 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13006 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13007 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013009 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013010 if(NULL == pwdiSetRssiFilterReqInfo)
13011 {
13012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013013 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013014 VOS_ASSERT(0);
13015 return VOS_STATUS_E_NOMEM;
13016 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13018 if(NULL == pWdaParams)
13019 {
13020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013022 VOS_ASSERT(0);
13023 vos_mem_free(pwdiSetRssiFilterReqInfo);
13024 return VOS_STATUS_E_NOMEM;
13025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013026 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013027 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13028 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013029
Jeff Johnson295189b2012-06-20 16:38:30 -070013030 /* Store Params pass it to WDI */
13031 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13032 pWdaParams->pWdaContext = pWDA;
13033 /* Store param pointer as passed in by caller */
13034 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013036 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013037 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013038 if(IS_WDI_STATUS_FAILURE(status))
13039 {
13040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13041 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13043 vos_mem_free(pWdaParams->wdaMsgParam);
13044 pWdaParams->wdaWdiApiMsgParam = NULL;
13045 pWdaParams->wdaMsgParam = NULL;
13046 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013047 return CONVERT_WDI2VOS_STATUS(status) ;
13048}
13049
Jeff Johnson295189b2012-06-20 16:38:30 -070013050/*
13051 * FUNCTION: WDA_ProcessUpdateScanParams
13052 * Request to WDI to update Scan Parameters
13053 */
13054VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13055 tSirUpdateScanParams *pUpdateScanParams)
13056{
Jeff Johnson43971f52012-07-17 12:26:56 -070013057 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13059 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13060 sizeof(WDI_UpdateScanParamsInfoType)) ;
13061 tWDA_ReqParams *pWdaParams ;
13062 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013064 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013065 if(NULL == wdiUpdateScanParamsInfoType)
13066 {
13067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013069 VOS_ASSERT(0);
13070 return VOS_STATUS_E_NOMEM;
13071 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13073 if ( NULL == pWdaParams )
13074 {
13075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013077 VOS_ASSERT(0);
13078 vos_mem_free(wdiUpdateScanParamsInfoType);
13079 return VOS_STATUS_E_NOMEM;
13080 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013081 //
13082 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13083 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13085 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13086 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13087 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
13088 "sir struct %d wdi struct %d",
13089 pUpdateScanParams->b11dEnabled,
13090 pUpdateScanParams->b11dResolved,
13091 pUpdateScanParams->ucChannelCount,
13092 pUpdateScanParams->usPassiveMinChTime,
13093 pUpdateScanParams->usPassiveMaxChTime,
13094 pUpdateScanParams->usActiveMinChTime,
13095 pUpdateScanParams->usActiveMaxChTime,
13096 sizeof(tSirUpdateScanParams),
13097 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13098
Jeff Johnson295189b2012-06-20 16:38:30 -070013099 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13100 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13102 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013103 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13104 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013105 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13106 pUpdateScanParams->usActiveMaxChTime;
13107 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13108 pUpdateScanParams->usActiveMinChTime;
13109 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13110 pUpdateScanParams->usPassiveMaxChTime;
13111 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13112 pUpdateScanParams->usPassiveMinChTime;
13113
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013115 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13116 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013117
Jeff Johnson295189b2012-06-20 16:38:30 -070013118 for ( i = 0; i <
13119 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13120 i++)
13121 {
13122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13123 "Update Scan Parameters channel: %d",
13124 pUpdateScanParams->aChannels[i]);
13125
13126 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13127 pUpdateScanParams->aChannels[i];
13128 }
13129
Yue Ma7f44bbe2013-04-12 11:47:39 -070013130 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13131 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013132
Jeff Johnson295189b2012-06-20 16:38:30 -070013133 /* Store Params pass it to WDI */
13134 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13135 pWdaParams->pWdaContext = pWDA;
13136 /* Store param pointer as passed in by caller */
13137 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013138
Jeff Johnson295189b2012-06-20 16:38:30 -070013139
13140
13141 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013142 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013143 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013144 if(IS_WDI_STATUS_FAILURE(status))
13145 {
13146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13147 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13149 vos_mem_free(pWdaParams->wdaMsgParam);
13150 vos_mem_free(pWdaParams);
13151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 return CONVERT_WDI2VOS_STATUS(status) ;
13153}
13154#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013155
13156#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13157/*
13158 * FUNCTION: WDA_RoamOffloadScanReqCallback
13159 *
13160 */
13161void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13162{
13163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013164 vos_msg_t vosMsg;
13165 wpt_uint8 reason = 0;
13166
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013168 "<------ %s " ,__func__);
13169 if (NULL == pWdaParams)
13170 {
13171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13172 "%s: pWdaParams received NULL", __func__);
13173 VOS_ASSERT(0) ;
13174 return ;
13175 }
13176 if ( pWdaParams != NULL )
13177 {
13178 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13179 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013180 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13182 }
13183 if ( pWdaParams->wdaMsgParam != NULL)
13184 {
13185 vos_mem_free(pWdaParams->wdaMsgParam);
13186 }
13187
13188 vos_mem_free(pWdaParams) ;
13189 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013190 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13191 vosMsg.bodyptr = NULL;
13192 if (WDI_STATUS_SUCCESS != status)
13193 {
13194 reason = 0;
13195 }
13196 vosMsg.bodyval = reason;
13197 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13198 {
13199 /* free the mem and return */
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13201 "Failed to post the rsp to UMAC" ,__func__);
13202 }
13203
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013204 return ;
13205}
13206#endif
13207
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013209 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013210 *
13211 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013212void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013213{
13214 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13215
13216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13217 "<------ %s " ,__func__);
13218
13219 if(NULL == pWdaParams)
13220 {
13221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13222 "%s: pWdaParams received NULL", __func__);
13223 VOS_ASSERT(0);
13224 return;
13225 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013226
13227 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13228 vos_mem_free(pWdaParams->wdaMsgParam);
13229 vos_mem_free(pWdaParams);
13230
13231 return;
13232}
13233/*
13234 * FUNCTION: WDA_SetPowerParamsReqCallback
13235 * Free memory.
13236 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13237 */
13238void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13239{
13240 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13241
13242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13243 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13244
13245 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013246 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13248 "%s: pWdaParams received NULL", __func__);
13249 VOS_ASSERT(0);
13250 return;
13251 }
13252
13253 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13254 {
13255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13256 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013257 vos_mem_free(pWdaParams);
13258 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013259
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013260 return;
13261}
13262
Jeff Johnson295189b2012-06-20 16:38:30 -070013263#ifdef WLAN_FEATURE_PACKET_FILTERING
13264/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013265 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013266 *
13267 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013268void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013269 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13270 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013271{
13272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013275 if(NULL == pWdaParams)
13276 {
13277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013278 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013279 VOS_ASSERT(0) ;
13280 return ;
13281 }
13282
13283 vos_mem_free(pWdaParams->wdaMsgParam) ;
13284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13285 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013286 //print a msg, nothing else to do
13287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013288 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013289 return ;
13290}
Jeff Johnson295189b2012-06-20 16:38:30 -070013291/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013292 * FUNCTION: WDA_8023MulticastListReqCallback
13293 * Free memory.
13294 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13295 */
13296void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13297{
13298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13299
13300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13301 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13302
13303 if(NULL == pWdaParams)
13304 {
13305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13306 "%s: pWdaParams received NULL", __func__);
13307 VOS_ASSERT(0);
13308 return;
13309 }
13310
13311 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13312 {
13313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13314 vos_mem_free(pWdaParams->wdaMsgParam);
13315 vos_mem_free(pWdaParams);
13316 }
13317
13318 return;
13319}
13320/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 * FUNCTION: WDA_Process8023MulticastListReq
13322 * Request to WDI to add 8023 Multicast List
13323 */
13324VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13325 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13326{
Jeff Johnson43971f52012-07-17 12:26:56 -070013327 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13329 tWDA_ReqParams *pWdaParams ;
13330 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013332 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013333 pwdiFltPktSetMcListReqParamsType =
13334 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13335 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13336 ) ;
13337 if(NULL == pwdiFltPktSetMcListReqParamsType)
13338 {
13339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013341 return VOS_STATUS_E_NOMEM;
13342 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13344 if(NULL == pWdaParams)
13345 {
13346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013348 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
13349 return VOS_STATUS_E_NOMEM;
13350 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013351
Jeff Johnson295189b2012-06-20 16:38:30 -070013352 //
13353 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
13354 //
13355 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070013356 pRcvFltMcAddrList->ulMulticastAddrCnt;
13357
13358 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13359 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13360 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13361 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13362
Jeff Johnson295189b2012-06-20 16:38:30 -070013363 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13364 {
13365 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13366 &(pRcvFltMcAddrList->multicastAddr[i]),
13367 sizeof(tSirMacAddr));
13368 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013369 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13370 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013371
Jeff Johnson295189b2012-06-20 16:38:30 -070013372 /* Store Params pass it to WDI */
13373 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13374 pWdaParams->pWdaContext = pWDA;
13375 /* Store param pointer as passed in by caller */
13376 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013377 status = WDI_8023MulticastListReq(
13378 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013379 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013380 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013381 if(IS_WDI_STATUS_FAILURE(status))
13382 {
13383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13384 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13386 vos_mem_free(pWdaParams->wdaMsgParam);
13387 vos_mem_free(pWdaParams);
13388 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013389 return CONVERT_WDI2VOS_STATUS(status) ;
13390}
Jeff Johnson295189b2012-06-20 16:38:30 -070013391/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013392 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013393 *
13394 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013395void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013396 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13397 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013398{
13399 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013401 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013402 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013403 if(NULL == pWdaParams)
13404 {
13405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013406 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013407 VOS_ASSERT(0) ;
13408 return ;
13409 }
13410
13411 vos_mem_free(pWdaParams->wdaMsgParam) ;
13412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13413 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013414 //print a msg, nothing else to do
13415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013416 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013417 return ;
13418}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013419
13420/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013421 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13422 * Free memory.
13423 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013424 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013425void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013426 void* pUserData)
13427{
13428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13429
13430 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13431 "<------ %s, wdiStatus: %d",
13432 __func__, wdiStatus);
13433
13434 if (NULL == pWdaParams)
13435 {
13436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13437 "%s: Invalid pWdaParams pointer", __func__);
13438 VOS_ASSERT(0);
13439 return;
13440 }
13441
13442 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13443 {
13444 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13445 vos_mem_free(pWdaParams->wdaMsgParam);
13446 vos_mem_free(pWdaParams);
13447 }
13448
13449 return;
13450}
13451
Jeff Johnson295189b2012-06-20 16:38:30 -070013452/*
13453 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13454 * Request to WDI to set Receive Filters
13455 */
13456VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13457 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13458{
Jeff Johnson43971f52012-07-17 12:26:56 -070013459 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013460 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13461 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13462 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13463 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13464 tWDA_ReqParams *pWdaParams ;
13465 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013468 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13469 {
13470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013472 VOS_ASSERT(0);
13473 return VOS_STATUS_E_NOMEM;
13474 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013475 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13476 if(NULL == pWdaParams)
13477 {
13478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 VOS_ASSERT(0);
13481 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13482 return VOS_STATUS_E_NOMEM;
13483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13485 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13486 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13487 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013488 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13489 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13490
13491 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13492 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013493
13494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13495 "FID %d FT %d NParams %d CT %d",
13496 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13497 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13498 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13499 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013500 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13501 {
13502 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13503 &pRcvPktFilterCfg->paramsData[i],
13504 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13506 "Proto %d Comp Flag %d \n",
13507 pwdiSetRcvPktFilterReqParamsType->
13508 wdiPktFilterCfg.paramsData[i].protocolLayer,
13509 pwdiSetRcvPktFilterReqParamsType->
13510 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13512 "Data Offset %d Data Len %d\n",
13513 pwdiSetRcvPktFilterReqParamsType->
13514 wdiPktFilterCfg.paramsData[i].dataOffset,
13515 pwdiSetRcvPktFilterReqParamsType->
13516 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13518 "CData: %d:%d:%d:%d:%d:%d\n",
13519 pwdiSetRcvPktFilterReqParamsType->
13520 wdiPktFilterCfg.paramsData[i].compareData[0],
13521 pwdiSetRcvPktFilterReqParamsType->
13522 wdiPktFilterCfg.paramsData[i].compareData[1],
13523 pwdiSetRcvPktFilterReqParamsType->
13524 wdiPktFilterCfg.paramsData[i].compareData[2],
13525 pwdiSetRcvPktFilterReqParamsType->
13526 wdiPktFilterCfg.paramsData[i].compareData[3],
13527 pwdiSetRcvPktFilterReqParamsType->
13528 wdiPktFilterCfg.paramsData[i].compareData[4],
13529 pwdiSetRcvPktFilterReqParamsType->
13530 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13532 "MData: %d:%d:%d:%d:%d:%d\n",
13533 pwdiSetRcvPktFilterReqParamsType->
13534 wdiPktFilterCfg.paramsData[i].dataMask[0],
13535 pwdiSetRcvPktFilterReqParamsType->
13536 wdiPktFilterCfg.paramsData[i].dataMask[1],
13537 pwdiSetRcvPktFilterReqParamsType->
13538 wdiPktFilterCfg.paramsData[i].dataMask[2],
13539 pwdiSetRcvPktFilterReqParamsType->
13540 wdiPktFilterCfg.paramsData[i].dataMask[3],
13541 pwdiSetRcvPktFilterReqParamsType->
13542 wdiPktFilterCfg.paramsData[i].dataMask[4],
13543 pwdiSetRcvPktFilterReqParamsType->
13544 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013545 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013546 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013547 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013548 /* Store Params pass it to WDI */
13549 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13550 pWdaParams->pWdaContext = pWDA;
13551 /* Store param pointer as passed in by caller */
13552 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013553 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013554 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013555 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013556 if(IS_WDI_STATUS_FAILURE(status))
13557 {
13558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13559 "Failure in SetFilter(),free all the memory,status %d ",status);
13560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13561 vos_mem_free(pWdaParams->wdaMsgParam);
13562 vos_mem_free(pWdaParams);
13563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013564 return CONVERT_WDI2VOS_STATUS(status) ;
13565}
Jeff Johnson295189b2012-06-20 16:38:30 -070013566/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013567 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013568 *
13569 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013570void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013571 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13572 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013573{
13574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13575 tWDA_CbContext *pWDA;
13576 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13577 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13578 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13579 tANI_U8 i;
13580 vos_msg_t vosMsg;
13581
13582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013584 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13585
Jeff Johnsone7245742012-09-05 17:12:55 -070013586 if(NULL == pRcvFltPktMatchCntRsp)
13587 {
13588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013589 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013590 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013591 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013592 return ;
13593 }
13594
Jeff Johnson295189b2012-06-20 16:38:30 -070013595 if(NULL == pWdaParams)
13596 {
13597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013598 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013599 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013600 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013601 return ;
13602 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013603 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13604 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013605 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13606 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13607
13608 /* Message Header */
13609 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13610 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13611
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013612 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013613
13614 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13615 {
13616 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13617 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13618 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013619 /* VOS message wrapper */
13620 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13621 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13622 vosMsg.bodyval = 0;
13623 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13624 {
13625 /* free the mem and return */
13626 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13627 }
13628
13629 vos_mem_free(pWdaParams->wdaMsgParam) ;
13630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13631 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013632
13633 return;
13634}
13635/*
13636 * FUNCTION: WDA_FilterMatchCountReqCallback
13637 * Free memory and send RSP back to SME.
13638 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13639 */
13640void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13641{
13642 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13643 vos_msg_t vosMsg;
13644
13645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13646 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13647
13648 if(NULL == pWdaParams)
13649 {
13650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13651 "%s: pWdaParams received NULL", __func__);
13652 VOS_ASSERT(0);
13653 return;
13654 }
13655
13656 /* VOS message wrapper */
13657 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13658 vosMsg.bodyptr = NULL;
13659 vosMsg.bodyval = 0;
13660
13661 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13662 {
13663 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13664 vos_mem_free(pWdaParams->wdaMsgParam);
13665 vos_mem_free(pWdaParams);
13666 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13667 }
13668
13669 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013670}
Jeff Johnson295189b2012-06-20 16:38:30 -070013671/*
13672 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13673 * Request to WDI to get PC Filter Match Count
13674 */
13675VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13676{
Jeff Johnson43971f52012-07-17 12:26:56 -070013677 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013678 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13679 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13680 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013682 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013683 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13684 {
13685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013686 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013687 VOS_ASSERT(0);
13688 return VOS_STATUS_E_NOMEM;
13689 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13691 if(NULL == pWdaParams)
13692 {
13693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013695 VOS_ASSERT(0);
13696 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13697 return VOS_STATUS_E_NOMEM;
13698 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013699
Yue Ma7f44bbe2013-04-12 11:47:39 -070013700 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13701 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013702
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013703 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13704 pRcvFltPktMatchRsp->bssId,
13705 sizeof(wpt_macAddr));
13706
Jeff Johnson295189b2012-06-20 16:38:30 -070013707 /* Store Params pass it to WDI */
13708 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13709 pWdaParams->pWdaContext = pWDA;
13710 /* Store param pointer as passed in by caller */
13711 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013713 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013714 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013715 if(IS_WDI_STATUS_FAILURE(status))
13716 {
13717 /* failure returned by WDI API */
13718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13719 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13721 vos_mem_free(pWdaParams) ;
13722 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13723 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013725 return CONVERT_WDI2VOS_STATUS(status) ;
13726}
Jeff Johnson295189b2012-06-20 16:38:30 -070013727/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013728 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013729 *
13730 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013731void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013732 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13733 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013734{
13735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013737 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013738/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13739 if(NULL == pWdaParams)
13740 {
13741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013742 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013743 VOS_ASSERT(0) ;
13744 return ;
13745 }
13746
13747 vos_mem_free(pWdaParams->wdaMsgParam) ;
13748 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13749 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 //print a msg, nothing else to do
13751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013752 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013753 return ;
13754}
Jeff Johnson295189b2012-06-20 16:38:30 -070013755/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013756 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13757 * Free memory.
13758 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13759 */
13760void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13761{
13762 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13763
13764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13765 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13766
13767 if(NULL == pWdaParams)
13768 {
13769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13770 "%s: Invalid pWdaParams pointer", __func__);
13771 VOS_ASSERT(0);
13772 return;
13773 }
13774
13775 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13776 {
13777 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13778 vos_mem_free(pWdaParams->wdaMsgParam);
13779 vos_mem_free(pWdaParams);
13780 }
13781
13782 return;
13783}
13784/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013785 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13786 * Request to WDI to clear Receive Filters
13787 */
13788VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13789 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13790{
Jeff Johnson43971f52012-07-17 12:26:56 -070013791 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013792 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13793 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13794 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013796 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013797 if(NULL == pwdiRcvFltPktClearReqParamsType)
13798 {
13799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013800 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013801 VOS_ASSERT(0);
13802 return VOS_STATUS_E_NOMEM;
13803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13805 if(NULL == pWdaParams)
13806 {
13807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013809 VOS_ASSERT(0);
13810 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13811 return VOS_STATUS_E_NOMEM;
13812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013813 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13814 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013815 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13816 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13817 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13818 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013819
Yue Ma7f44bbe2013-04-12 11:47:39 -070013820 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013821 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013822 /* Store Params pass it to WDI */
13823 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13824 pWdaParams->pWdaContext = pWDA;
13825 /* Store param pointer as passed in by caller */
13826 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013827 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013828 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013829 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013830 if(IS_WDI_STATUS_FAILURE(status))
13831 {
13832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13833 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13834 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013835 vos_mem_free(pWdaParams->wdaMsgParam);
13836 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013837 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013838 return CONVERT_WDI2VOS_STATUS(status) ;
13839}
13840#endif // WLAN_FEATURE_PACKET_FILTERING
13841
Jeff Johnson295189b2012-06-20 16:38:30 -070013842/*
13843 * FUNCTION: WDA_ProcessSetPowerParamsReq
13844 * Request to WDI to set power params
13845 */
13846VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13847 tSirSetPowerParamsReq *pPowerParams)
13848{
Jeff Johnson43971f52012-07-17 12:26:56 -070013849 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013850 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13851 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013852 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013854 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 if(NULL == pwdiSetPowerParamsReqInfo)
13856 {
13857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013858 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013859 VOS_ASSERT(0);
13860 return VOS_STATUS_E_NOMEM;
13861 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013862 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13863 if(NULL == pWdaParams)
13864 {
13865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013866 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013867 VOS_ASSERT(0);
13868 vos_mem_free(pwdiSetPowerParamsReqInfo);
13869 return VOS_STATUS_E_NOMEM;
13870 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013871
Jeff Johnson295189b2012-06-20 16:38:30 -070013872
13873 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13874 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013875 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13876 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013877 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13878 pPowerParams->uListenInterval;
13879 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13880 pPowerParams->uBcastMcastFilter;
13881 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13882 pPowerParams->uEnableBET;
13883 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13884 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013885 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13886 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013887 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13888 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013889
Jeff Johnson295189b2012-06-20 16:38:30 -070013890 /* Store Params pass it to WDI */
13891 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13892 pWdaParams->pWdaContext = pWDA;
13893 /* Store param pointer as passed in by caller */
13894 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013895 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013896 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013897 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013898 if(IS_WDI_STATUS_FAILURE(status))
13899 {
13900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13901 "Failure in Set power params REQ WDI API, free all the memory " );
13902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13903 vos_mem_free(pWdaParams->wdaMsgParam);
13904 pWdaParams->wdaWdiApiMsgParam = NULL;
13905 pWdaParams->wdaMsgParam = NULL;
13906 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013907 return CONVERT_WDI2VOS_STATUS(status) ;
13908}
13909
13910/*
13911 * FUNCTION: WDA_SetTmLevelRspCallback
13912 * Set TM Level response
13913 */
13914void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13915{
13916 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13917
13918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013919 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013920
13921 if(NULL == pWdaParams)
13922 {
13923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013924 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013925 VOS_ASSERT(0) ;
13926 return ;
13927 }
13928
13929 /* Dose not need to send notification to upper layer
13930 * Just free allocated resources */
13931 if( pWdaParams != NULL )
13932 {
13933 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13934 {
13935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13936 }
13937 vos_mem_free(pWdaParams->wdaMsgParam) ;
13938 vos_mem_free(pWdaParams) ;
13939 }
13940}
13941
13942/*
13943 * FUNCTION: WDA_ProcessSetTmLevelReq
13944 * Set TM Level request
13945 */
13946VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13947 tAniSetTmLevelReq *setTmLevelReq)
13948{
13949 WDI_Status status = WDI_STATUS_SUCCESS ;
13950 tWDA_ReqParams *pWdaParams ;
13951 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13952 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13953 sizeof(WDI_SetTmLevelReqType)) ;
13954 if(NULL == wdiSetTmLevelReq)
13955 {
13956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013957 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013958 VOS_ASSERT(0);
13959 return VOS_STATUS_E_NOMEM;
13960 }
13961
13962 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13963 if(NULL == pWdaParams)
13964 {
13965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013967 VOS_ASSERT(0);
13968 vos_mem_free(wdiSetTmLevelReq);
13969 return VOS_STATUS_E_NOMEM;
13970 }
13971
13972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013973 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013974
13975 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13976 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13977
13978 pWdaParams->pWdaContext = pWDA;
13979 pWdaParams->wdaMsgParam = setTmLevelReq;
13980 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13981
13982 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13983 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13984
13985 if(IS_WDI_STATUS_FAILURE(status))
13986 {
13987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013988 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013989 vos_mem_free(pWdaParams->wdaMsgParam) ;
13990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13991 vos_mem_free(pWdaParams) ;
13992 }
13993
13994 return CONVERT_WDI2VOS_STATUS(status) ;
13995}
13996
13997VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13998 tpTxControlParams pTxCtrlParam)
13999{
14000 VOS_STATUS wdaStatus;
14001
14002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014003 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014004 if( pTxCtrlParam == NULL )
14005 {
14006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014007 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014008 return VOS_STATUS_E_FAILURE;
14009 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014010 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14011 {
14012 wdaStatus = WDA_SuspendDataTx(pWDA);
14013 }
14014 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14015 {
14016 wdaStatus = WDA_ResumeDataTx(pWDA);
14017 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014018 return wdaStatus;
14019}
14020
14021 /* FUNCTION WDA_featureCapsExchange
14022 * WDA API to invoke capability exchange between host and FW.
14023 */
14024void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14025{
14026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014027 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 WDI_featureCapsExchangeReq( NULL, pVosContext);
14029}
14030
Yathish9f22e662012-12-10 14:21:35 -080014031/* FUNCTION WDA_disableCapablityFeature
14032 * WDA API to diable Active mode offload in host.
14033 */
14034void WDA_disableCapablityFeature(tANI_U8 feature_index)
14035{
14036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14037 "%s:enter", __func__ );
14038 WDI_disableCapablityFeature(feature_index);
14039}
14040
Jeff Johnson295189b2012-06-20 16:38:30 -070014041 /* FUNCTION WDA_getHostWlanFeatCaps
14042 * Wrapper for WDI API, that will return if the feature (enum value).passed
14043 * to this API is supported or not in Host
14044 * return value
14045 * 0 - implies feature is NOT Supported
14046 * any non zero value - implies feature is SUPPORTED
14047 */
14048tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14049{
14050 return WDI_getHostWlanFeatCaps(featEnumValue);
14051}
14052
14053 /* FUNCTION WDA_getFwWlanFeatCaps
14054 * Wrapper for WDI API, that will return if the feature (enum value).passed
14055 * to this API is supported or not in FW
14056 * return value
14057 * 0 - implies feature is NOT Supported
14058 * any non zero value - implies feature is SUPPORTED
14059 */
14060tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14061{
14062 return WDI_getFwWlanFeatCaps(featEnumValue);
14063}
14064
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014065
Jeff Johnson295189b2012-06-20 16:38:30 -070014066/*
14067 * FUNCTION: WDA_shutdown
14068 * Shutdown WDA/WDI without handshaking with Riva.
14069 * Synchronous function.
14070 */
14071VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14072{
14073 WDI_Status wdiStatus;
14074 //tANI_U8 eventIdx = 0;
14075 VOS_STATUS status = VOS_STATUS_SUCCESS;
14076 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014077 if (NULL == pWDA)
14078 {
14079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014080 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014081 VOS_ASSERT(0);
14082 return VOS_STATUS_E_FAILURE;
14083 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014084 /* FTM mode stay START_STATE */
14085 if( (WDA_READY_STATE != pWDA->wdaState) &&
14086 (WDA_INIT_STATE != pWDA->wdaState) &&
14087 (WDA_START_STATE != pWDA->wdaState) )
14088 {
14089 VOS_ASSERT(0);
14090 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014091
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014092 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14093 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014094 {
14095 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014096 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014097 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014098
Jeff Johnson295189b2012-06-20 16:38:30 -070014099 /* call WDI shutdown */
14100 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014101 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14102 {
14103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14104 "error in WDA Stop" );
14105 status = VOS_STATUS_E_FAILURE;
14106 }
14107 /* WDI stop is synchrnous, shutdown is complete when it returns */
14108 pWDA->wdaState = WDA_STOP_STATE;
14109
Jeff Johnson295189b2012-06-20 16:38:30 -070014110 /* shutdown should perform the stop & close actions. */
14111 /* Destroy the event */
14112 status = vos_event_destroy(&pWDA->txFrameEvent);
14113 if(!VOS_IS_STATUS_SUCCESS(status))
14114 {
14115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14116 "VOS Event destroy failed - status = %d\n", status);
14117 status = VOS_STATUS_E_FAILURE;
14118 }
14119 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14120 if(!VOS_IS_STATUS_SUCCESS(status))
14121 {
14122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14123 "VOS Event destroy failed - status = %d\n", status);
14124 status = VOS_STATUS_E_FAILURE;
14125 }
14126 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14127 if(!VOS_IS_STATUS_SUCCESS(status))
14128 {
14129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14130 "VOS Event destroy failed - status = %d\n", status);
14131 status = VOS_STATUS_E_FAILURE;
14132 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014133 /* free WDA context */
14134 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14135 if ( !VOS_IS_STATUS_SUCCESS(status) )
14136 {
14137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14138 "error in WDA close " );
14139 status = VOS_STATUS_E_FAILURE;
14140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014141 return status;
14142}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014143
Jeff Johnsone7245742012-09-05 17:12:55 -070014144/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014145 * FUNCTION: WDA_setNeedShutdown
14146 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014147 */
14148
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014149void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014150{
14151 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014152 if(pWDA == NULL)
14153 {
14154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14155 "Could not get the WDA Context pointer" );
14156 return;
14157 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014158 pWDA->needShutdown = TRUE;
14159}
14160/*
14161 * FUNCTION: WDA_needShutdown
14162 * WDA needs a shutdown
14163 */
14164
14165v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14166{
14167 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014168 if(pWDA == NULL)
14169 {
14170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14171 "Could not get the WDA Context pointer" );
14172 return 0;
14173 }
14174 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014175}
14176
Mohit Khanna4a70d262012-09-11 16:30:12 -070014177#ifdef WLAN_FEATURE_11AC
14178/*
14179 * FUNCTION: WDA_SetBeaconFilterReqCallback
14180 *
14181 */
14182void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14183{
14184 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014186 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014187 if(NULL == pWdaParams)
14188 {
14189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014190 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014191 VOS_ASSERT(0) ;
14192 return ;
14193 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014194
Mohit Khanna4a70d262012-09-11 16:30:12 -070014195 vos_mem_free(pWdaParams->wdaMsgParam) ;
14196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14197 vos_mem_free(pWdaParams) ;
14198 /*
14199 * No respone required for SetBeaconFilter req so just free the request
14200 * param here
14201 */
14202
14203 return ;
14204}
14205
14206VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14207 tUpdateVHTOpMode *pData)
14208{
14209 WDI_Status status = WDI_STATUS_SUCCESS ;
14210 tWDA_ReqParams *pWdaParams ;
14211 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14212 sizeof(WDI_UpdateVHTOpMode)) ;
14213 if(NULL == wdiTemp)
14214 {
14215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014216 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014217 VOS_ASSERT(0);
14218 return VOS_STATUS_E_NOMEM;
14219 }
14220 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14221 if(NULL == pWdaParams)
14222 {
14223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014224 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014225 VOS_ASSERT(0);
14226 vos_mem_free(wdiTemp);
14227 return VOS_STATUS_E_NOMEM;
14228 }
14229
14230 wdiTemp->opMode = pData->opMode;
14231 wdiTemp->staId = pData->staId;
14232
14233 pWdaParams->pWdaContext = pWDA;
14234 /* Store Req pointer, as this will be used for response */
14235 pWdaParams->wdaMsgParam = (void *)pData;
14236 /* store Params pass it to WDI */
14237 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14238
14239 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14240
14241 if(IS_WDI_STATUS_FAILURE(status))
14242 {
14243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14244 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14246 vos_mem_free(pWdaParams->wdaMsgParam);
14247 vos_mem_free(pWdaParams);
14248 }
14249 return CONVERT_WDI2VOS_STATUS(status) ;
14250}
14251#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014252
14253/*==========================================================================
14254 FUNCTION WDA_TransportChannelDebug
14255
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014256 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014257 Display Transport Channel debugging information
14258 User may request to display DXE channel snapshot
14259 Or if host driver detects any abnormal stcuk may display
14260
14261 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014262 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014263 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014264 enableStallDetect : Enable stall detect feature
14265 This feature will take effect to data performance
14266 Not integrate till fully verification
14267
14268 RETURN VALUE
14269 NONE
14270
14271===========================================================================*/
14272void WDA_TransportChannelDebug
14273(
schang6295e542013-03-12 15:31:23 -070014274 tpAniSirGlobal pMac,
14275 v_BOOL_t displaySnapshot,
14276 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014277)
14278{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014279 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014280 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014281}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014282
14283/*==========================================================================
14284 FUNCTION WDA_SetEnableSSR
14285
14286 DESCRIPTION
14287 API to enable/disable SSR on WDI timeout
14288
14289 PARAMETERS
14290 enableSSR : enable/disable SSR
14291
14292 RETURN VALUE
14293 NONE
14294
14295===========================================================================*/
14296void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14297{
14298 WDI_SetEnableSSR(enableSSR);
14299}
Leo Chang9056f462013-08-01 19:21:11 -070014300
14301#ifdef FEATURE_WLAN_LPHB
14302/*
14303 * FUNCTION: WDA_LPHBconfRspCallback
14304 *
14305 */
14306void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14307{
14308 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14309
14310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14311 "<------ %s " ,__func__);
14312 if (NULL == pWdaParams)
14313 {
14314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14315 "%s: pWdaParams received NULL", __func__);
14316 VOS_ASSERT(0) ;
14317 return ;
14318 }
14319
14320 /* Do not need to send notification to upper layer
14321 * Just free allocated resources */
14322 if (pWdaParams != NULL)
14323 {
14324 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14325 {
14326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14327 }
14328 vos_mem_free(pWdaParams->wdaMsgParam) ;
14329 vos_mem_free(pWdaParams) ;
14330 }
14331
14332 return;
14333}
14334
14335/*
14336 * FUNCTION: WDA_ProcessLPHBConfReq
14337 *
14338 */
14339VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14340 tSirLPHBReq *pData)
14341{
14342 WDI_Status wdiStatus;
14343 tWDA_ReqParams *pWdaParams ;
14344
14345 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14346 "------> %s " , __func__);
14347
14348 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14349 if (NULL == pWdaParams)
14350 {
14351 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14352 "%s: VOS MEM Alloc Failure", __func__);
14353 VOS_ASSERT(0);
14354 vos_mem_free(pData);
14355 return VOS_STATUS_E_NOMEM;
14356 }
14357
14358 pWdaParams->pWdaContext = pWDA;
14359 pWdaParams->wdaMsgParam = (void *)pData;
14360 pWdaParams->wdaWdiApiMsgParam = NULL;
14361
14362 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
14363 if (WDI_STATUS_PENDING == wdiStatus)
14364 {
14365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14366 "Pending received for %s:%d ", __func__, __LINE__);
14367 }
14368 else if (WDI_STATUS_SUCCESS != wdiStatus)
14369 {
14370 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14371 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
14372 vos_mem_free(pWdaParams->wdaMsgParam);
14373 vos_mem_free(pWdaParams);
14374 }
14375
14376 return CONVERT_WDI2VOS_STATUS(wdiStatus);
14377}
14378#endif /* FEATURE_WLAN_LPHB */
14379