blob: e391fdebe8fd554c82c31abde8f78e4218f1de0c [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
Jeff Johnson295189b2012-06-20 16:38:30 -0700228/*
229 * FUNCTION: WDA_open
230 * Allocate the WDA context
231 */
232VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
233 tMacOpenParameters *pMacParams )
234{
235 tWDA_CbContext *wdaContext;
236 VOS_STATUS status;
237 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700238 /* Allocate WDA context */
239 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
240 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 return VOS_STATUS_E_NOMEM;
244 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700245 /*__asm int 3;*/
246 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
247
248 /* Initialize data structures */
249 wdaContext->pVosContext = pVosContext;
250 wdaContext->wdaState = WDA_INIT_STATE;
251 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
252
253 /* Initialize WDA-WDI synchronization event */
254 status = vos_event_init(&wdaContext->wdaWdiEvent);
255 if(!VOS_IS_STATUS_SUCCESS(status))
256 {
257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
258 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800259 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700260 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700261 /* Init Frame transfer event */
262 status = vos_event_init(&wdaContext->txFrameEvent);
263 if(!VOS_IS_STATUS_SUCCESS(status))
264 {
265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
266 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800267 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700269 status = vos_event_init(&wdaContext->suspendDataTxEvent);
270 if(!VOS_IS_STATUS_SUCCESS(status))
271 {
272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
273 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800274 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700276 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
277 if(!VOS_IS_STATUS_SUCCESS(status))
278 {
279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
280 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800281 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700282 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700284 wdaContext->driverMode = pMacParams->driverType;
285 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
286 &wdiDevCapability, pMacParams->driverType))
287 {
288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
289 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800290 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700291 }
292 else
293 {
294 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
295 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
296 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700297 /* update max STA in WDA used for BA */
298 wdaContext->wdaMaxSta = pMacParams->maxStation;
299 /* store the frameTransRequired flag in wdaContext, to send this to HAL
300 * in WDA_Start
301 */
302 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
303 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800305
306error:
307 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
308 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700309}
310
Jeff Johnson295189b2012-06-20 16:38:30 -0700311/*
312 * FUNCTION: WDA_preStart
313 * Trigger DAL-AL to start CFG download
314 */
315VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
316{
317 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
318 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700319 /*
320 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
321 */
322 wdaMsg.type = WNI_CFG_DNLD_REQ ;
323 wdaMsg.bodyptr = NULL;
324 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 /* post the message.. */
326 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
327 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
328 {
329 vosStatus = VOS_STATUS_E_BADMSG;
330 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 return( vosStatus );
332}
Jeff Johnson295189b2012-06-20 16:38:30 -0700333/*
334 * FUNCTION: WDA_wdiStartCallback
335 * Once WDI_Start is finished, WDI start callback will be called by WDI
336 * to indicate completion of WDI_Start.
337 */
338void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
339 void *pVosContext)
340{
341 tWDA_CbContext *wdaContext;
342 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700343 if (NULL == pVosContext)
344 {
345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700346 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700347 return;
348 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700349 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
350 if (NULL == wdaContext)
351 {
352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700353 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 return;
355 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700356 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
357 {
358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700359 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700360 }
361 else
362 {
363 wdaContext->wdaState = WDA_START_STATE;
364 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 /* extract and save version information from the Start Response */
366 wdaContext->wcnssWlanCompiledVersion.major =
367 wdiRspParams->wlanCompiledVersion.major;
368 wdaContext->wcnssWlanCompiledVersion.minor =
369 wdiRspParams->wlanCompiledVersion.minor;
370 wdaContext->wcnssWlanCompiledVersion.version =
371 wdiRspParams->wlanCompiledVersion.version;
372 wdaContext->wcnssWlanCompiledVersion.revision =
373 wdiRspParams->wlanCompiledVersion.revision;
374 wdaContext->wcnssWlanReportedVersion.major =
375 wdiRspParams->wlanReportedVersion.major;
376 wdaContext->wcnssWlanReportedVersion.minor =
377 wdiRspParams->wlanReportedVersion.minor;
378 wdaContext->wcnssWlanReportedVersion.version =
379 wdiRspParams->wlanReportedVersion.version;
380 wdaContext->wcnssWlanReportedVersion.revision =
381 wdiRspParams->wlanReportedVersion.revision;
382 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
383 wdiRspParams->wcnssSoftwareVersion,
384 sizeof(wdaContext->wcnssSoftwareVersionString));
385 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
386 wdiRspParams->wcnssHardwareVersion,
387 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 /* Notify WDA_start that WDI_Start has completed */
389 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700390 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 {
392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700393 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700394 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700395 return;
396}
397
Jeff Johnson295189b2012-06-20 16:38:30 -0700398/*
399 * FUNCTION: WDA_start
400 * Prepare TLV configuration and call WDI_Start.
401 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700402VOS_STATUS WDA_start(v_PVOID_t pVosContext)
403{
404 tWDA_CbContext *wdaContext;
405 VOS_STATUS status;
406 WDI_Status wdiStatus;
407 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700408 if (NULL == pVosContext)
409 {
410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700411 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700412 return VOS_STATUS_E_FAILURE;
413 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700414 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
415 if (NULL == wdaContext)
416 {
417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700418 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 return VOS_STATUS_E_FAILURE;
420 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700421 /* Non-FTM mode, WDA status for START must be INIT
422 * FTM mode, WDA Status for START can be INIT or STOP */
423 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
424 (WDA_STOP_STATE != wdaContext->wdaState) )
425 {
426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
427 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700428 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 return VOS_STATUS_E_FAILURE;
430 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 /* initialize the wdiStartParam. Note that we can create this on
432 the stack since we won't exit until WDI_Start() completes or
433 times out */
434 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700435 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* prepare the config TLV for the WDI */
437 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
438 if ( !VOS_IS_STATUS_SUCCESS(status) )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 return VOS_STATUS_E_FAILURE;
443 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 /* note from here onwards if an error occurs we must
445 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
447 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
448 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* initialize the WDA-WDI synchronization event */
450 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 /* call WDI start */
452 wdiStatus = WDI_Start(&wdiStartParam,
453 (WDI_StartRspCb)WDA_wdiStartCallback,
454 (v_VOID_t *)pVosContext);
455 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
456 {
457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700458 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 vos_mem_free(wdiStartParam.pConfigBuffer);
460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* wait for WDI start to invoke our callback */
463 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
464 WDA_WDI_START_TIMEOUT );
465 if ( !VOS_IS_STATUS_SUCCESS(status) )
466 {
467 if ( VOS_STATUS_E_TIMEOUT == status )
468 {
469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700470 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 }
472 else
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
475 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700476 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700477 }
478 vos_mem_free(wdiStartParam.pConfigBuffer);
479 return VOS_STATUS_E_FAILURE;
480 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 /* we no longer need the config TLV */
483 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700484 /* if we are not in the START state then WDI_Start() failed */
485 if (WDA_START_STATE != wdaContext->wdaState)
486 {
487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700488 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 return VOS_STATUS_E_FAILURE;
490 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 /* FTM mode does not need to monitor BA activity */
492 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
493 {
494 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800495 if(VOS_STATUS_SUCCESS == status)
496 {
497 wdaContext->wdaTimersCreated = VOS_TRUE;
498 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700499 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700500 return status;
501}
502
Jeff Johnson295189b2012-06-20 16:38:30 -0700503/*
504 * FUNCTION: WDA_prepareConfigTLV
505 * Function to prepare CFG for DAL(WDA)
506 */
507VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
508 WDI_StartReqParamsType *wdiStartParams )
509{
510 /* get pMac to acess CFG data base */
511 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
512 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
513 tHalCfg *tlvStruct = NULL ;
514 tANI_U8 *tlvStructStart = NULL ;
515 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
516 v_PVOID_t *configParam;
517 tANI_U32 configParamSize;
518 tANI_U32 *configDataValue;
519 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 if ((NULL == pMac)||(NULL == wdaContext))
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700523 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700524 VOS_ASSERT(0);
525 return VOS_STATUS_E_FAILURE;
526 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
528 WNI_CFG_STA_ID_LEN +
529 WNI_CFG_EDCA_WME_ACBK_LEN +
530 WNI_CFG_EDCA_WME_ACBE_LEN +
531 WNI_CFG_EDCA_WME_ACVI_LEN +
532 WNI_CFG_EDCA_WME_ACVO_LEN +
533 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 /* malloc memory for all configs in one shot */
535 configParam = vos_mem_malloc(configParamSize);
536
537 if(NULL == configParam )
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 VOS_ASSERT(0) ;
542 return VOS_STATUS_E_NOMEM;
543 }
544 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700546 tlvStruct = (tHalCfg *)configParam;
547 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 /* TODO: Remove Later */
549 /* QWLAN_HAL_CFG_STA_ID */
550 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
551 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
552 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
553 eSIR_SUCCESS)
554 {
555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
556 "Failed to get value for WNI_CFG_STA_ID");
557 goto handle_failure;
558 }
559 tlvStruct->length = strLength ;
560 /* calculate the pad bytes to have the CFG in aligned format */
561 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
562 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700563 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
564 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
566 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
567 tlvStruct->length = sizeof(tANI_U32);
568 configDataValue = (tANI_U32 *)(tlvStruct + 1);
569 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
570 != eSIR_SUCCESS)
571 {
572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
573 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
574 goto handle_failure;
575 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
577 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700578 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
579 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
580 tlvStruct->length = sizeof(tANI_U32);
581 configDataValue = (tANI_U32 *)(tlvStruct + 1);
582 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
583 eSIR_SUCCESS)
584 {
585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
586 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
587 goto handle_failure;
588 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
590 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700591 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
592 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
593 tlvStruct->length = sizeof(tANI_U32);
594 configDataValue = (tANI_U32 *)(tlvStruct + 1);
595 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
596 != eSIR_SUCCESS)
597 {
598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
599 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
600 goto handle_failure;
601 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
603 + sizeof(tHalCfg) + tlvStruct->length)) ;
604
605 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
606 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
607 tlvStruct->length = sizeof(tANI_U32);
608 configDataValue = (tANI_U32 *)(tlvStruct + 1);
609 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
610 configDataValue ) != eSIR_SUCCESS)
611 {
612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
613 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
614 goto handle_failure;
615 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700616 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
617 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 /* QWLAN_HAL_CFG_CAL_PERIOD */
619 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
620 tlvStruct->length = sizeof(tANI_U32);
621 configDataValue = (tANI_U32 *)(tlvStruct + 1);
622 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
623 != eSIR_SUCCESS)
624 {
625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
626 "Failed to get value for WNI_CFG_CAL_PERIOD");
627 goto handle_failure;
628 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
630 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 /* QWLAN_HAL_CFG_CAL_CONTROL */
632 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
633 tlvStruct->length = sizeof(tANI_U32);
634 configDataValue = (tANI_U32 *)(tlvStruct + 1);
635 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
636 != eSIR_SUCCESS)
637 {
638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
639 "Failed to get value for WNI_CFG_CAL_CONTROL");
640 goto handle_failure;
641 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
643 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 /* QWLAN_HAL_CFG_PROXIMITY */
645 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
646 tlvStruct->length = sizeof(tANI_U32);
647 configDataValue = (tANI_U32 *)(tlvStruct + 1);
648 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
649 != eSIR_SUCCESS)
650 {
651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
652 "Failed to get value for WNI_CFG_PROXIMITY");
653 goto handle_failure;
654 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
656 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
658 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
659 tlvStruct->length = sizeof(tANI_U32);
660 configDataValue = (tANI_U32 *)(tlvStruct + 1);
661 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
662 != eSIR_SUCCESS)
663 {
664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
665 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
666 goto handle_failure;
667 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
669 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
671 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
672 tlvStruct->length = sizeof(tANI_U32);
673 configDataValue = (tANI_U32 *)(tlvStruct + 1);
674 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
675 eSIR_SUCCESS)
676 {
677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
678 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
679 goto handle_failure;
680 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
682 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
684 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
685 tlvStruct->length = sizeof(tANI_U32);
686 configDataValue = (tANI_U32 *)(tlvStruct + 1);
687 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
688 configDataValue ) != eSIR_SUCCESS)
689 {
690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
691 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
692 goto handle_failure;
693 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
695 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
697 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
698 tlvStruct->length = sizeof(tANI_U32);
699 configDataValue = (tANI_U32 *)(tlvStruct + 1);
700 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
701 eSIR_SUCCESS)
702 {
703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
704 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
705 goto handle_failure;
706 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
708 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
710 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
711 tlvStruct->length = sizeof(tANI_U32);
712 configDataValue = (tANI_U32 *)(tlvStruct + 1);
713 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
714 eSIR_SUCCESS)
715 {
716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
717 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
718 goto handle_failure;
719 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
721 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
723 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
724 tlvStruct->length = sizeof(tANI_U32);
725 configDataValue = (tANI_U32 *)(tlvStruct + 1);
726 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
727 eSIR_SUCCESS)
728 {
729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
730 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
731 goto handle_failure;
732 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
734 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700735 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
736 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
737 tlvStruct->length = sizeof(tANI_U32);
738 configDataValue = (tANI_U32 *)(tlvStruct + 1);
739 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
740 configDataValue ) != eSIR_SUCCESS)
741 {
742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
743 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
744 goto handle_failure;
745 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
747 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700748 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
749 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
750 tlvStruct->length = sizeof(tANI_U32);
751 configDataValue = (tANI_U32 *)(tlvStruct + 1);
752 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
753 configDataValue ) != eSIR_SUCCESS)
754 {
755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
756 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
757 goto handle_failure;
758 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
760 + sizeof(tHalCfg) + tlvStruct->length));
761
762 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
763 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
764 tlvStruct->length = sizeof(tANI_U32);
765 configDataValue = (tANI_U32 *)(tlvStruct + 1);
766 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
767 configDataValue ) != eSIR_SUCCESS)
768 {
769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
770 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
771 goto handle_failure;
772 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700773 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
774 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700775 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
776 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
777 tlvStruct->length = sizeof(tANI_U32);
778 configDataValue = (tANI_U32 *)(tlvStruct + 1);
779 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
780 configDataValue ) != eSIR_SUCCESS)
781 {
782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
783 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
784 goto handle_failure;
785 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
787 + sizeof(tHalCfg) + tlvStruct->length));
788
789 /* QWLAN_HAL_CFG_FIXED_RATE */
790 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
791 tlvStruct->length = sizeof(tANI_U32);
792 configDataValue = (tANI_U32 *)(tlvStruct + 1);
793 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
794 != eSIR_SUCCESS)
795 {
796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
797 "Failed to get value for WNI_CFG_FIXED_RATE");
798 goto handle_failure;
799 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
801 + sizeof(tHalCfg) + tlvStruct->length));
802
803 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
804 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
805 tlvStruct->length = sizeof(tANI_U32);
806 configDataValue = (tANI_U32 *)(tlvStruct + 1);
807 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
808 != eSIR_SUCCESS)
809 {
810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
811 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
812 goto handle_failure;
813 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
815 + sizeof(tHalCfg) + tlvStruct->length));
816
817 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
818 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
819 tlvStruct->length = sizeof(tANI_U32);
820 configDataValue = (tANI_U32 *)(tlvStruct + 1);
821 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
822 configDataValue ) != eSIR_SUCCESS)
823 {
824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
825 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
826 goto handle_failure;
827 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
831 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
832 tlvStruct->length = sizeof(tANI_U32);
833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
834 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
835 configDataValue ) != eSIR_SUCCESS)
836 {
837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
838 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
839 goto handle_failure;
840 }
841 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
842 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
844 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
845 tlvStruct->length = sizeof(tANI_U32);
846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
847 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
848 configDataValue ) != eSIR_SUCCESS)
849 {
850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
851 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
852 goto handle_failure;
853 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
855 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700856 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
857 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
858 tlvStruct->length = sizeof(tANI_U32);
859 configDataValue = (tANI_U32 *)(tlvStruct + 1);
860 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
861 configDataValue ) != eSIR_SUCCESS)
862 {
863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
864 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
865 goto handle_failure;
866 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
868 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700869 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
882
883#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
884 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
885 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
886 tlvStruct->length = sizeof(tANI_U32);
887 configDataValue = (tANI_U32 *)(tlvStruct + 1);
888 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
889 configDataValue ) != eSIR_SUCCESS)
890 {
891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
892 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
893 goto handle_failure;
894 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700895 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
896 + sizeof(tHalCfg) + tlvStruct->length);
897#endif
898 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
899 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
900 tlvStruct->length = sizeof(tANI_U32);
901 configDataValue = (tANI_U32 *)(tlvStruct + 1);
902 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
903 configDataValue ) != eSIR_SUCCESS)
904 {
905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
906 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
907 goto handle_failure;
908 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
910 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700911 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
912 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
913 tlvStruct->length = sizeof(tANI_U32);
914 configDataValue = (tANI_U32 *)(tlvStruct + 1);
915 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
916 eSIR_SUCCESS)
917 {
918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
919 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
920 goto handle_failure;
921 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
923 + sizeof(tHalCfg) + tlvStruct->length);
924
925 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
926 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
927 tlvStruct->length = sizeof(tANI_U32);
928 configDataValue = (tANI_U32 *)(tlvStruct + 1);
929 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
930 configDataValue ) != eSIR_SUCCESS)
931 {
932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
933 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
934 goto handle_failure;
935 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700936 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
937 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
939 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
940 tlvStruct->length = sizeof(tANI_U32);
941 configDataValue = (tANI_U32 *)(tlvStruct + 1);
942 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
943 configDataValue ) != eSIR_SUCCESS)
944 {
945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
946 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
947 goto handle_failure;
948 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
950 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700951 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
952 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
953 tlvStruct->length = sizeof(tANI_U32);
954 configDataValue = (tANI_U32 *)(tlvStruct + 1);
955 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
956 configDataValue ) != eSIR_SUCCESS)
957 {
958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
959 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
960 goto handle_failure;
961 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
963 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700964 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
965 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
966 tlvStruct->length = sizeof(tANI_U32);
967 configDataValue = (tANI_U32 *)(tlvStruct + 1);
968 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
969 configDataValue ) != eSIR_SUCCESS)
970 {
971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
972 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
973 goto handle_failure;
974 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
976 + sizeof(tHalCfg) + tlvStruct->length);
977
978 /* QWLAN_HAL_CFG_STATS_PERIOD */
979 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
980 tlvStruct->length = sizeof(tANI_U32);
981 configDataValue = (tANI_U32 *)(tlvStruct + 1);
982 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
983 eSIR_SUCCESS)
984 {
985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
986 "Failed to get value for WNI_CFG_STATS_PERIOD");
987 goto handle_failure;
988 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700989 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
990 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700991 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
992 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
993 tlvStruct->length = sizeof(tANI_U32);
994 configDataValue = (tANI_U32 *)(tlvStruct + 1);
995 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
996 eSIR_SUCCESS)
997 {
998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
999 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1000 goto handle_failure;
1001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1003 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001004 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1005 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1006 tlvStruct->length = sizeof(tANI_U32);
1007 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1008 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1009 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001010 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1011 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001012 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1013 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1014 tlvStruct->length = sizeof(tANI_U32);
1015 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1016 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1017 != eSIR_SUCCESS)
1018 {
1019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1020 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1021 goto handle_failure;
1022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1024 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001025 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1026 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1027 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1028 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1029 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1030 &strLength) != eSIR_SUCCESS)
1031 {
1032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1033 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1034 goto handle_failure;
1035 }
1036 tlvStruct->length = strLength;
1037 /* calculate the pad bytes to have the CFG in aligned format */
1038 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1039 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001040 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1041 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001042 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1043 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1044 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1045 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1046 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1047 &strLength) != eSIR_SUCCESS)
1048 {
1049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1050 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1051 goto handle_failure;
1052 }
1053 tlvStruct->length = strLength;
1054 /* calculate the pad bytes to have the CFG in aligned format */
1055 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1056 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001057 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1058 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001059 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1060 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1061 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1062 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1063 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1064 &strLength) != eSIR_SUCCESS)
1065 {
1066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1067 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1068 goto handle_failure;
1069 }
1070 tlvStruct->length = strLength;
1071 /* calculate the pad bytes to have the CFG in aligned format */
1072 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1073 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001074 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1075 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001076 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1077 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1078 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1079 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1080 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1081 &strLength) != eSIR_SUCCESS)
1082 {
1083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1084 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1085 goto handle_failure;
1086 }
1087 tlvStruct->length = strLength;
1088 /* calculate the pad bytes to have the CFG in aligned format */
1089 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1090 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001091 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1092 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1094 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1095 tlvStruct->length = sizeof(tANI_U32);
1096 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1097 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1098 != eSIR_SUCCESS)
1099 {
1100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1101 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1102 goto handle_failure;
1103 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1105 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001106 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1107 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1108 tlvStruct->length = sizeof(tANI_U32);
1109 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1110 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1111 != eSIR_SUCCESS)
1112 {
1113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1114 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1115 goto handle_failure;
1116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1118 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001119 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1120 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1121 tlvStruct->length = sizeof(tANI_U32);
1122 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1123 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1124 != eSIR_SUCCESS)
1125 {
1126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1127 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1128 goto handle_failure;
1129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1131 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001132 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1133 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1134 tlvStruct->length = sizeof(tANI_U32);
1135 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1136 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1137 != eSIR_SUCCESS)
1138 {
1139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1140 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1141 goto handle_failure;
1142 }
1143 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1144 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001145 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1146 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1147 tlvStruct->length = sizeof(tANI_U32);
1148 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1149 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1150 != eSIR_SUCCESS)
1151 {
1152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1153 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1154 goto handle_failure;
1155 }
1156 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1157 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001158 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1159 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1160 tlvStruct->length = sizeof(tANI_U32);
1161 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1162 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1163 != eSIR_SUCCESS)
1164 {
1165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1166 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1167 goto handle_failure;
1168 }
1169 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1170 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1172 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1173 tlvStruct->length = sizeof(tANI_U32);
1174 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1175 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1176 != eSIR_SUCCESS)
1177 {
1178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1179 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1180 goto handle_failure;
1181 }
1182 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1183 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1185 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1186 tlvStruct->length = sizeof(tANI_U32);
1187 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1188 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1189 != eSIR_SUCCESS)
1190 {
1191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1192 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1193 goto handle_failure;
1194 }
1195 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1196 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1198 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1199 tlvStruct->length = sizeof(tANI_U32);
1200 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1201 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1202 != eSIR_SUCCESS)
1203 {
1204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1205 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1206 goto handle_failure;
1207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1211 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1215 != eSIR_SUCCESS)
1216 {
1217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1218 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1219 goto handle_failure;
1220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1222 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001223 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1224 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1225 tlvStruct->length = sizeof(tANI_U32);
1226 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1227 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1228 != eSIR_SUCCESS)
1229 {
1230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1231 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1232 goto handle_failure;
1233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1235 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001236 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1237 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1238 * into FW, so the parameters are added here.
1239 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001240 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1248 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1249 tlvStruct->length = sizeof(tANI_U32);
1250 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1251 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1252 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1253 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001254 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1255 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1256 tlvStruct->length = sizeof(tANI_U32);
1257 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1258 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1259 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1260 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001261 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1262 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1263 tlvStruct->length = sizeof(tANI_U32);
1264 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1265 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1266 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1267 + sizeof(tHalCfg) + tlvStruct->length) ;
1268
1269 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1270 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1271 tlvStruct->length = sizeof(tANI_U32);
1272 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1273 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1274 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1275 + sizeof(tHalCfg) + tlvStruct->length) ;
1276
1277 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1278 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1279 tlvStruct->length = sizeof(tANI_U32);
1280 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1281 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1282 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1283 + sizeof(tHalCfg) + tlvStruct->length) ;
1284
1285 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1286 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1287 tlvStruct->length = sizeof(tANI_U32);
1288 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1289 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1290 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1291 + sizeof(tHalCfg) + tlvStruct->length) ;
1292
1293 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1294 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1295 tlvStruct->length = sizeof(tANI_U32);
1296 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1297 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1298 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1299 + sizeof(tHalCfg) + tlvStruct->length) ;
1300
1301 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1302 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1303 tlvStruct->length = sizeof(tANI_U32);
1304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1305 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1306 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1307 + sizeof(tHalCfg) + tlvStruct->length) ;
1308
1309 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1310 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1311 tlvStruct->length = sizeof(tANI_U32);
1312 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1313 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1314 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1315 + sizeof(tHalCfg) + tlvStruct->length) ;
1316
1317 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1318 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1319 tlvStruct->length = sizeof(tANI_U32);
1320 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1321 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1322 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1323 + sizeof(tHalCfg) + tlvStruct->length) ;
1324
1325 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1326 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1327 tlvStruct->length = sizeof(tANI_U32);
1328 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1329 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1330 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1331 + sizeof(tHalCfg) + tlvStruct->length) ;
1332
1333 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1334 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1335 tlvStruct->length = sizeof(tANI_U32);
1336 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1337 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1338 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1339 + sizeof(tHalCfg) + tlvStruct->length) ;
1340
1341 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1342 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1343 tlvStruct->length = sizeof(tANI_U32);
1344 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1345 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1346 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1347 + sizeof(tHalCfg) + tlvStruct->length) ;
1348
1349 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1350 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1351 tlvStruct->length = sizeof(tANI_U32);
1352 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1353 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1354 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1355 + sizeof(tHalCfg) + tlvStruct->length) ;
1356
1357 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1358 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1359 tlvStruct->length = sizeof(tANI_U32);
1360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1361 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1362 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1363 + sizeof(tHalCfg) + tlvStruct->length) ;
1364
1365 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001366 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1367 tlvStruct->length = sizeof(tANI_U32);
1368 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1369 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1370 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1371 wcnssCompiledApiVersion.minor,
1372 wcnssCompiledApiVersion.version,
1373 wcnssCompiledApiVersion.revision);
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
Jeff Johnsond13512a2012-07-17 11:42:19 -07001377 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1378 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1382 configDataValue ) != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1392 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1393 tlvStruct->length = sizeof(tANI_U32);
1394 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1395 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1396 configDataValue ) != eSIR_SUCCESS)
1397 {
1398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1399 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1400 goto handle_failure;
1401 }
1402
1403 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1404 + sizeof(tHalCfg) + tlvStruct->length) ;
1405
1406 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1407 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1408 tlvStruct->length = sizeof(tANI_U32);
1409 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1410 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1411 != eSIR_SUCCESS)
1412 {
1413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1414 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1415 goto handle_failure;
1416 }
1417
1418 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1419 + sizeof(tHalCfg) + tlvStruct->length) ;
1420
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001421 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1422 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1426 != eSIR_SUCCESS)
1427 {
1428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1429 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1430 goto handle_failure;
1431 }
1432
1433 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1434 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001435#ifdef WLAN_SOFTAP_VSTA_FEATURE
1436 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1437 tlvStruct->length = sizeof(tANI_U32);
1438 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1439 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1440 != eSIR_SUCCESS)
1441 {
1442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1443 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1444 goto handle_failure;
1445 }
1446
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449#endif
1450
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001451 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1452 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1453 tlvStruct->length = sizeof(tANI_U32);
1454 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1455
1456 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1457 != eSIR_SUCCESS)
1458 {
1459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1460 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1461 goto handle_failure;
1462 }
1463
1464 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1465 + sizeof(tHalCfg) + tlvStruct->length) ;
1466
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301467/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1468 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1469 tlvStruct->length = sizeof(tANI_U32);
1470 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1471 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1472 configDataValue ) != eSIR_SUCCESS)
1473 {
1474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1475 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1476 goto handle_failure;
1477 }
1478
1479 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1480 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301481#ifdef FEATURE_WLAN_TDLS
1482 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1483 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1484 tlvStruct->length = sizeof(tANI_U32);
1485 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1486 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1487 configDataValue ) != eSIR_SUCCESS)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1490 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1491 goto handle_failure;
1492 }
1493 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1494 + sizeof(tHalCfg) + tlvStruct->length) ;
1495
1496 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1497 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1498 tlvStruct->length = sizeof(tANI_U32);
1499 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1500 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1501 configDataValue ) != eSIR_SUCCESS)
1502 {
1503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1504 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1505 goto handle_failure;
1506 }
1507 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1508 + sizeof(tHalCfg) + tlvStruct->length) ;
1509 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1510 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1511 tlvStruct->length = sizeof(tANI_U32);
1512 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1513 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1514 configDataValue ) != eSIR_SUCCESS)
1515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1517 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1518 goto handle_failure;
1519 }
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1523 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1524 tlvStruct->length = sizeof(tANI_U32);
1525 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1526 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1527 configDataValue ) != eSIR_SUCCESS)
1528 {
1529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1530 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1531 goto handle_failure;
1532 }
1533 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1534 + sizeof(tHalCfg) + tlvStruct->length) ;
1535#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301536
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001538#ifdef WLAN_DEBUG
1539 {
1540 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1542 "****** Dumping CFG TLV ***** ");
1543 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1544 {
1545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1546 "%02x %02x %02x %02x %02x %02x %02x %02x",
1547 tlvStructStart[i],
1548 tlvStructStart[i+1],
1549 tlvStructStart[i+2],
1550 tlvStructStart[i+3],
1551 tlvStructStart[i+4],
1552 tlvStructStart[i+5],
1553 tlvStructStart[i+6],
1554 tlvStructStart[i+7]);
1555 }
1556 /* Dump the bytes in the last line*/
1557 for (; i < wdiStartParams->usConfigBufferLen; i++)
1558 {
1559 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1560 "%02x ",tlvStructStart[i]);
1561 }
1562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1563 "**************************** ");
1564 }
1565#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001567handle_failure:
1568 vos_mem_free(configParam);
1569 return VOS_STATUS_E_FAILURE;
1570}
Jeff Johnson295189b2012-06-20 16:38:30 -07001571/*
1572 * FUNCTION: WDA_wdiCompleteCB
1573 * call the voss call back function
1574 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001575void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001576{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1578 tWDA_CbContext *wdaContext;
1579
1580 if(NULL == pWdaParams)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001584 VOS_ASSERT(0) ;
1585 return ;
1586 }
1587
1588 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1589
Jeff Johnson295189b2012-06-20 16:38:30 -07001590 if (NULL == wdaContext)
1591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001593 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 return ;
1595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001596
Jeff Johnson295189b2012-06-20 16:38:30 -07001597 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001598 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001600 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001601 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001602 vos_mem_free(pWdaParams);
1603
Jeff Johnson295189b2012-06-20 16:38:30 -07001604 if(WDI_STATUS_SUCCESS != status)
1605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1607 "WDI stop callback returned failure" );
1608 VOS_ASSERT(0) ;
1609 }
1610 else
1611 {
1612 wdaContext->wdaState = WDA_STOP_STATE;
1613 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001614
Jeff Johnson295189b2012-06-20 16:38:30 -07001615 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001616 vos_WDAComplete_cback(wdaContext->pVosContext);
1617
Jeff Johnson295189b2012-06-20 16:38:30 -07001618 return ;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_stop
1622 * call WDI_stop
1623 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001624VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1625{
1626 WDI_Status wdiStatus;
1627 VOS_STATUS status = VOS_STATUS_SUCCESS;
1628 WDI_StopReqParamsType *wdiStopReq;
1629 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001630 tWDA_ReqParams *pWdaParams ;
1631
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 if (NULL == pWDA)
1633 {
1634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001635 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001636 VOS_ASSERT(0);
1637 return VOS_STATUS_E_FAILURE;
1638 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001639 if (pWDA->wdiFailed == true)
1640 {
1641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001642 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001643 return VOS_STATUS_E_ALREADY;
1644 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001645
Jeff Johnson295189b2012-06-20 16:38:30 -07001646 /* FTM mode stay START_STATE */
1647 if( (WDA_READY_STATE != pWDA->wdaState) &&
1648 (WDA_INIT_STATE != pWDA->wdaState) &&
1649 (WDA_START_STATE != pWDA->wdaState) )
1650 {
1651 VOS_ASSERT(0);
1652 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 wdiStopReq = (WDI_StopReqParamsType *)
1654 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1655 if(NULL == wdiStopReq)
1656 {
1657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001659 VOS_ASSERT(0);
1660 return VOS_STATUS_E_NOMEM;
1661 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001662
Jeff Johnson295189b2012-06-20 16:38:30 -07001663 wdiStopReq->wdiStopReason = reason;
1664 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001665
1666 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1667 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 {
1669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001670 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001671 VOS_ASSERT(0);
1672 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001673 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001674 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001675
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001676 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1677 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001678 {
1679 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001680 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001681 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001682
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001683 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1684 pWdaParams->wdaMsgParam = NULL;
1685 pWdaParams->pWdaContext = pWDA;
1686
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 /* call WDI stop */
1688 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001689 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1690
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1696 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 status = VOS_STATUS_E_FAILURE;
1698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 return status;
1700}
Jeff Johnson295189b2012-06-20 16:38:30 -07001701/*
1702 * FUNCTION: WDA_close
1703 * call WDI_close and free the WDA context
1704 */
1705VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1706{
Jeff Johnson43971f52012-07-17 12:26:56 -07001707 VOS_STATUS status = VOS_STATUS_SUCCESS;
1708 WDI_Status wstatus;
1709 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001710 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 if (NULL == wdaContext)
1712 {
1713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 return VOS_STATUS_E_FAILURE;
1716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1718 (WDA_STOP_STATE != wdaContext->wdaState))
1719 {
1720 VOS_ASSERT(0);
1721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001723 wstatus = WDI_Close();
1724 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001725 {
1726 status = VOS_STATUS_E_FAILURE;
1727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001729 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001730 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1731 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001732 {
1733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1734 "WDI Sync Event destroy failed - status = %d\n", status);
1735 status = VOS_STATUS_E_FAILURE;
1736 }
1737
Jeff Johnson43971f52012-07-17 12:26:56 -07001738 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001739 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001740 {
1741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1742 "VOS Event destroy failed - status = %d\n", status);
1743 status = VOS_STATUS_E_FAILURE;
1744 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001745 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001746 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001747 {
1748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1749 "VOS Event destroy failed - status = %d\n", status);
1750 status = VOS_STATUS_E_FAILURE;
1751 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001752 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001753 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001754 {
1755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1756 "VOS Event destroy failed - status = %d\n", status);
1757 status = VOS_STATUS_E_FAILURE;
1758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001760 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001761 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "error in WDA close " );
1765 status = VOS_STATUS_E_FAILURE;
1766 }
1767 return status;
1768}
Jeff Johnson295189b2012-06-20 16:38:30 -07001769/*
1770 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1771 * returns 1 if the compiled version is greater than or equal to the input version
1772 */
1773
1774uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1775{
1776 VOS_STATUS status = VOS_STATUS_SUCCESS;
1777 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1778 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001779 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1781 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1782 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1783 (compiledVersion.revision >= revision)))
1784 return 1;
1785 else
1786 return 0;
1787}
Jeff Johnson295189b2012-06-20 16:38:30 -07001788/*
1789 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1790 * returns 1 if the compiled version is greater than or equal to the input version
1791 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001792uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1793{
1794 VOS_STATUS status = VOS_STATUS_SUCCESS;
1795 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1796 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001797 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1799 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1800 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1801 (reportedVersion.revision >= revision)))
1802 return 1;
1803 else
1804 return 0;
1805}
Jeff Johnson295189b2012-06-20 16:38:30 -07001806/*
1807 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1808 * Returns the version of the WCNSS WLAN API with which the HOST
1809 * device driver was compiled
1810 */
1811VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1812 tSirVersionType *pVersion)
1813{
1814 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001815 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001816 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001817 if ((NULL == pvosGCtx) || (NULL == pVersion))
1818 {
1819 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001820 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001821 VOS_ASSERT(0);
1822 return VOS_STATUS_E_FAILURE;
1823 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1825 if (NULL == pWDA )
1826 {
1827 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001828 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 VOS_ASSERT(0);
1830 return VOS_STATUS_E_FAILURE;
1831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001832 *pVersion = pWDA->wcnssWlanCompiledVersion;
1833 return VOS_STATUS_SUCCESS;
1834}
Jeff Johnson295189b2012-06-20 16:38:30 -07001835/*
1836 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1837 * Returns the version of the WCNSS WLAN API with which the WCNSS
1838 * device driver was compiled
1839 */
1840VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1841 tSirVersionType *pVersion)
1842{
1843 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001845 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001846 if ((NULL == pvosGCtx) || (NULL == pVersion))
1847 {
1848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001849 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001850 VOS_ASSERT(0);
1851 return VOS_STATUS_E_FAILURE;
1852 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001853 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1854 if (NULL == pWDA )
1855 {
1856 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001857 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001858 VOS_ASSERT(0);
1859 return VOS_STATUS_E_FAILURE;
1860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 *pVersion = pWDA->wcnssWlanReportedVersion;
1862 return VOS_STATUS_SUCCESS;
1863}
Jeff Johnson295189b2012-06-20 16:38:30 -07001864/*
1865 * FUNCTION: WDA_GetWcnssSoftwareVersion
1866 * Returns the WCNSS Software version string
1867 */
1868VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1869 tANI_U8 *pVersion,
1870 tANI_U32 versionBufferSize)
1871{
1872 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001874 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001875 if ((NULL == pvosGCtx) || (NULL == pVersion))
1876 {
1877 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001878 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001879 VOS_ASSERT(0);
1880 return VOS_STATUS_E_FAILURE;
1881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001882 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1883 if (NULL == pWDA )
1884 {
1885 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001886 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 VOS_ASSERT(0);
1888 return VOS_STATUS_E_FAILURE;
1889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001890 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1891 return VOS_STATUS_SUCCESS;
1892}
Jeff Johnson295189b2012-06-20 16:38:30 -07001893/*
1894 * FUNCTION: WDA_GetWcnssHardwareVersion
1895 * Returns the WCNSS Hardware version string
1896 */
1897VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1898 tANI_U8 *pVersion,
1899 tANI_U32 versionBufferSize)
1900{
1901 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001903 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 if ((NULL == pvosGCtx) || (NULL == pVersion))
1905 {
1906 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001907 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001908 VOS_ASSERT(0);
1909 return VOS_STATUS_E_FAILURE;
1910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001911 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1912 if (NULL == pWDA )
1913 {
1914 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001915 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 VOS_ASSERT(0);
1917 return VOS_STATUS_E_FAILURE;
1918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001919 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1920 return VOS_STATUS_SUCCESS;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_WniCfgDnld
1924 * Trigger CFG Download
1925 */
1926VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1927{
1928 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001930 v_VOID_t *pFileImage = NULL;
1931 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 v_VOID_t *pCfgBinary = NULL;
1933 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07001935
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 if (NULL == pMac )
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001939 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001940 VOS_ASSERT(0);
1941 return VOS_STATUS_E_FAILURE;
1942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 /* get the number of bytes in the CFG Binary... */
1944 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1945 &cbFileImageSize );
1946 if ( VOS_STATUS_E_NOMEM != vosStatus )
1947 {
1948 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1949 "Error obtaining binary size" );
1950 goto fail;
1951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 // malloc a buffer to read in the Configuration binary file.
1953 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001954 if ( NULL == pFileImage )
1955 {
1956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1957 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1958 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001959 vosStatus = VOS_STATUS_E_NOMEM;
1960 goto fail;
1961 }
1962
1963 /* Get the entire CFG file image... */
1964 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1965 &cbFileImageSize );
1966 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1967 {
1968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1969 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1970 cbFileImageSize );
1971 goto fail;
1972 }
1973
1974 /*
1975 * Validate the binary image. This function will return a pointer
1976 * and length where the CFG binary is located within the binary image file.
1977 */
1978 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1979 &pCfgBinary, &cbCfgBinarySize );
1980 if ( VOS_FALSE == bStatus )
1981 {
1982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1983 "Error: Cannot find STA CFG in binary image file" );
1984 vosStatus = VOS_STATUS_E_FAILURE;
1985 goto fail;
1986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001987 /*
1988 * TODO: call the config download function
1989 * for now calling the existing cfg download API
1990 */
1991 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07001992 vosStatus = VOS_STATUS_SUCCESS;
1993
1994 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07001995
1996fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07001997 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07001998 return vosStatus;
1999}
Jeff Johnson295189b2012-06-20 16:38:30 -07002000/* -----------------------------------------------------------------
2001 * WDI interface
2002 * -----------------------------------------------------------------
2003 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002004/*
2005 * FUNCTION: WDA_suspendDataTxCallback
2006 * call back function called from TL after suspend Transmission
2007 */
2008VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2009 v_U8_t* ucSTAId,
2010 VOS_STATUS vosStatus)
2011{
2012 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002014 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002015 if (NULL == pWDA )
2016 {
2017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002018 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 VOS_ASSERT(0);
2020 return VOS_STATUS_E_FAILURE;
2021 }
2022 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2023 {
2024 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2025 }
2026 else
2027 {
2028 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 /* Trigger the event to bring the WDA TL suspend function to come
2031 * out of wait*/
2032 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2033 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2034 {
2035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2036 "NEW VOS Event Set failed - status = %d \n", vosStatus);
2037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 /* If TL suspended had timedout before this callback was called, resume back
2039 * TL.*/
2040 if (pWDA->txSuspendTimedOut)
2041 {
2042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2043 "Late TLSuspendCallback, resuming TL back again\n");
2044 WDA_ResumeDataTx(pWDA);
2045 pWDA->txSuspendTimedOut = FALSE;
2046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 return VOS_STATUS_SUCCESS;
2048}
Jeff Johnson295189b2012-06-20 16:38:30 -07002049/*
2050 * FUNCTION: WDA_suspendDataTx
2051 * Update TL to suspend the data Transmission
2052 */
2053VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2054{
2055 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2056 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002057
2058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002059 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002061 if (pWDA->txSuspendTimedOut)
2062 {
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2064 "TL suspend timedout previously, CB not called yet\n");
2065 return status;
2066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002067 /* Reset the event to be not signalled */
2068 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2069 if(!VOS_IS_STATUS_SUCCESS(status))
2070 {
2071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2072 "VOS Event reset failed - status = %d\n",status);
2073 return VOS_STATUS_E_FAILURE;
2074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002075 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002076 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 WDA_SuspendDataTxCallback);
2078 if(status != VOS_STATUS_SUCCESS)
2079 {
2080 return status;
2081 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002082 /* Wait for the event to be set by the TL, to get the response of
2083 * suspending the TX queues, this event should be set by the Callback
2084 * function called by TL*/
2085 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2086 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2087 if(!VOS_IS_STATUS_SUCCESS(status))
2088 {
2089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2090 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002091 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 /* Set this flag to true when TL suspend times out, so that when TL
2093 * suspend eventually happens and calls the callback, TL can be resumed
2094 * right away by looking at this flag when true.*/
2095 pWDA->txSuspendTimedOut = TRUE;
2096 }
2097 else
2098 {
2099 pWDA->txSuspendTimedOut = FALSE;
2100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2102 {
2103 status = VOS_STATUS_SUCCESS;
2104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002105 return status;
2106}
Jeff Johnson295189b2012-06-20 16:38:30 -07002107/*
2108 * FUNCTION: WDA_resumeDataTx
2109 * Update TL to resume the data Transmission
2110 */
2111VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2112{
2113 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002114
2115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002116 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002117
2118 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return status;
2120}
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_InitScanReqCallback
2123 * Trigger Init SCAN callback
2124 */
2125void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2126{
2127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2128 tWDA_CbContext *pWDA;
2129 tInitScanParams *pWDA_ScanParam ;
2130 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002132 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 if(NULL == pWdaParams)
2134 {
2135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002136 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 VOS_ASSERT(0) ;
2138 return ;
2139 }
2140 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2141 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002142 if(NULL == pWDA_ScanParam)
2143 {
2144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002145 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002146 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2148 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 return ;
2150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002151 if(WDI_STATUS_SUCCESS != wdiStatus)
2152 {
2153 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 if(VOS_STATUS_SUCCESS != status)
2155 {
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002157 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 }
2159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002160 /* free WDI command buffer */
2161 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002163
Jeff Johnson295189b2012-06-20 16:38:30 -07002164
2165 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002166 /* without converting the Status to Failure or Success Just
2167 pass the same status to lim */
2168 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 /* send SCAN RSP message back to PE */
2170 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 return ;
2172}
2173
2174/*
2175 * FUNCTION: WDA_ProcessInitScanReq
2176 * Trigger Init SCAN in DAL
2177 */
2178VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2179 tInitScanParams *initScanParams)
2180{
2181 WDI_Status status = WDI_STATUS_SUCCESS ;
2182 WDI_InitScanReqParamsType *wdiInitScanParam =
2183 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2184 sizeof(WDI_InitScanReqParamsType)) ;
2185 tWDA_ReqParams *pWdaParams;
2186 tANI_U8 i = 0;
2187
2188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if(NULL == wdiInitScanParam)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0);
2195 return VOS_STATUS_E_NOMEM;
2196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2198 if(NULL == pWdaParams)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 VOS_ASSERT(0);
2203 vos_mem_free(wdiInitScanParam);
2204 return VOS_STATUS_E_NOMEM;
2205 }
2206
2207 /* Copy init Scan params to WDI structure */
2208 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2209 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2210 sizeof(tSirMacAddr)) ;
2211 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2212 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2213 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2215 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2217 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2219 {
2220 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2221 initScanParams->scanEntry.bssIdx[i] ;
2222 }
2223
2224 /* if Frame length, copy macMgmtHdr or WDI structure */
2225 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2226 {
2227 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2228 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2229 }
2230 wdiInitScanParam->wdiReqStatusCB = NULL ;
2231
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 /* Store Init Req pointer, as this will be used for response */
2233 pWdaParams->pWdaContext = pWDA;
2234 pWdaParams->wdaMsgParam = initScanParams;
2235 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 /* first try to suspend TX */
2237 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002238 if(WDI_STATUS_SUCCESS != status)
2239 {
2240 goto handleWdiFailure;
2241 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 /* call DAL API to pass init scan request to DAL */
2243 status = WDI_InitScanReq(wdiInitScanParam,
2244 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 if(IS_WDI_STATUS_FAILURE(status))
2246 {
2247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2248 "error in WDA Init Scan, Resume Tx " );
2249 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0) ;
2251
2252 goto handleWdiFailure;
2253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255handleWdiFailure:
2256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2257 "Failure in WDI Api, free all the memory " );
2258 /* free WDI command buffer */
2259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2260 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 /* send Failure to PE */
2262 initScanParams->status = eSIR_FAILURE ;
2263 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 return CONVERT_WDI2VOS_STATUS(status) ;
2265}
2266
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_StartScanReqCallback
2269 * send Start SCAN RSP back to PE
2270 */
2271void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2272 void* pUserData)
2273{
2274 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2275 tWDA_CbContext *pWDA;
2276 tStartScanParams *pWDA_ScanParam;
2277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002278 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002279 if(NULL == pWdaParams)
2280 {
2281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002282 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 VOS_ASSERT(0) ;
2284 return ;
2285 }
2286 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2287 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002288 if(NULL == pWDA_ScanParam)
2289 {
2290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002291 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002292 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002293 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 return ;
2295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002296 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2297 {
2298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002299 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002300 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002301 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 return ;
2303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2305 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002306
Jeff Johnson295189b2012-06-20 16:38:30 -07002307
2308 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002309 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 /* send SCAN RSP message back to PE */
2311 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 return ;
2313}
2314
Jeff Johnson295189b2012-06-20 16:38:30 -07002315/*
2316 * FUNCTION: WDA_ProcessStartScanReq
2317 * Trigger start SCAN in WDI
2318 */
2319VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2320 tStartScanParams *startScanParams)
2321{
2322 WDI_Status status = WDI_STATUS_SUCCESS;
2323 WDI_StartScanReqParamsType *wdiStartScanParams =
2324 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2325 sizeof(WDI_StartScanReqParamsType)) ;
2326 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002329 if(NULL == wdiStartScanParams)
2330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 VOS_ASSERT(0);
2334 return VOS_STATUS_E_NOMEM;
2335 }
2336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2337 if(NULL == pWdaParams)
2338 {
2339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 VOS_ASSERT(0);
2342 vos_mem_free(wdiStartScanParams);
2343 return VOS_STATUS_E_NOMEM;
2344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002345 /* Copy init Scan params to WDI structure */
2346 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2347 wdiStartScanParams->wdiReqStatusCB = NULL ;
2348
Jeff Johnson295189b2012-06-20 16:38:30 -07002349 /* Store Init Req pointer, as this will be used for response */
2350 /* store Params pass it to WDI */
2351 pWdaParams->pWdaContext = pWDA;
2352 pWdaParams->wdaMsgParam = startScanParams;
2353 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 /* call DAL API to pass init scan request to DAL */
2355 status = WDI_StartScanReq(wdiStartScanParams,
2356 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 /* failure returned by WDI API */
2358 if(IS_WDI_STATUS_FAILURE(status))
2359 {
2360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2361 "Failure in Start Scan WDI API, free all the memory "
2362 "It should be due to previous abort scan." );
2363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2364 vos_mem_free(pWdaParams) ;
2365 startScanParams->status = eSIR_FAILURE ;
2366 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 return CONVERT_WDI2VOS_STATUS(status) ;
2369}
Jeff Johnson295189b2012-06-20 16:38:30 -07002370/*
2371 * FUNCTION: WDA_EndScanReqCallback
2372 * END SCAN callback
2373 */
2374void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2375{
2376 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2377 tWDA_CbContext *pWDA;
2378 tEndScanParams *endScanParam;
2379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002380 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002381 if(NULL == pWdaParams)
2382 {
2383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 VOS_ASSERT(0) ;
2386 return ;
2387 }
2388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2389 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 if(NULL == endScanParam)
2391 {
2392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002393 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002394 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002395 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2396 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002397 return ;
2398 }
2399
2400 /* Free WDI command buffer */
2401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2402 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002404 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 /* send response back to PE */
2406 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2407 return ;
2408}
2409
Jeff Johnson295189b2012-06-20 16:38:30 -07002410/*
2411 * FUNCTION: WDA_ProcessEndScanReq
2412 * Trigger END SCAN in WDI
2413 */
2414VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2415 tEndScanParams *endScanParams)
2416{
2417 WDI_Status status = WDI_STATUS_SUCCESS;
2418 WDI_EndScanReqParamsType *wdiEndScanParams =
2419 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2420 sizeof(WDI_EndScanReqParamsType)) ;
2421 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002423 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 if(NULL == wdiEndScanParams)
2425 {
2426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002428 VOS_ASSERT(0);
2429 return VOS_STATUS_E_NOMEM;
2430 }
2431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2432 if(NULL == pWdaParams)
2433 {
2434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 VOS_ASSERT(0);
2437 vos_mem_free(wdiEndScanParams);
2438 return VOS_STATUS_E_NOMEM;
2439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /* Copy init Scan params to WDI structure */
2441 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2442 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 /* Store Init Req pointer, as this will be used for response */
2444 /* store Params pass it to WDI */
2445 pWdaParams->pWdaContext = pWDA;
2446 pWdaParams->wdaMsgParam = endScanParams;
2447 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002448 /* call DAL API to pass init scan request to DAL */
2449 status = WDI_EndScanReq(wdiEndScanParams,
2450 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 if(IS_WDI_STATUS_FAILURE(status))
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2454 "Failure in End Scan WDI API, free all the memory "
2455 "It should be due to previous abort scan." );
2456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2457 vos_mem_free(pWdaParams) ;
2458 endScanParams->status = eSIR_FAILURE ;
2459 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 return CONVERT_WDI2VOS_STATUS(status) ;
2462}
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_FinishScanReqCallback
2465 * Trigger Finish SCAN callback
2466 */
2467void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2468{
2469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2470 tWDA_CbContext *pWDA;
2471 tFinishScanParams *finishScanParam;
2472 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002474 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(NULL == pWdaParams)
2476 {
2477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002478 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 VOS_ASSERT(0) ;
2480 return ;
2481 }
2482
2483 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2484 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 if(NULL == finishScanParam)
2486 {
2487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002490 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2491 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 return ;
2493 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2495 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 /*
2497 * Now Resume TX, if we reached here means, TX is already suspended, we
2498 * have to resume it unconditionaly
2499 */
2500 status = WDA_ResumeDataTx(pWDA) ;
2501
2502 if(VOS_STATUS_SUCCESS != status)
2503 {
2504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002505 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002507 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002508 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2509 return ;
2510}
Jeff Johnson295189b2012-06-20 16:38:30 -07002511/*
2512 * FUNCTION: WDA_ProcessFinshScanReq
2513 * Trigger Finish SCAN in WDI
2514 */
2515VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2516 tFinishScanParams *finishScanParams)
2517{
2518 WDI_Status status = WDI_STATUS_SUCCESS;
2519 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2520 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2521 sizeof(WDI_FinishScanReqParamsType)) ;
2522 tWDA_ReqParams *pWdaParams ;
2523 tANI_U8 i = 0;
2524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002525 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 if(NULL == wdiFinishScanParams)
2527 {
2528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002530 VOS_ASSERT(0);
2531 return VOS_STATUS_E_NOMEM;
2532 }
2533 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2534 if(NULL == pWdaParams)
2535 {
2536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 VOS_ASSERT(0);
2539 vos_mem_free(wdiFinishScanParams);
2540 return VOS_STATUS_E_NOMEM;
2541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 /* Copy init Scan params to WDI structure */
2543 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2544 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2545 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2547 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2548 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2549 finishScanParams->frameLength ;
2550 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2551 finishScanParams->currentOperChannel ;
2552 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2553 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2554 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002555 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2556 {
2557 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2558 finishScanParams->scanEntry.bssIdx[i] ;
2559 }
2560
2561
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* if Frame length, copy macMgmtHdr ro WDI structure */
2563 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2564 {
2565 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2566 &finishScanParams->macMgmtHdr,
2567 sizeof(WDI_MacMgmtHdr)) ;
2568 }
2569 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002570 /* Store Init Req pointer, as this will be used for response */
2571 /* store Params pass it to WDI */
2572 pWdaParams->pWdaContext = pWDA;
2573 pWdaParams->wdaMsgParam = finishScanParams;
2574 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 /* call DAL API to pass init scan request to DAL */
2576 status = WDI_FinishScanReq(wdiFinishScanParams,
2577 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002578
Jeff Johnson295189b2012-06-20 16:38:30 -07002579
2580 /*
2581 * WDI API returns failure..
2582 */
2583 if(IS_WDI_STATUS_FAILURE( status))
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "Failure in Finish Scan WDI API, free all the memory " );
2587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2588 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002589 finishScanParams->status = eSIR_FAILURE ;
2590 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return CONVERT_WDI2VOS_STATUS(status) ;
2593}
Jeff Johnson295189b2012-06-20 16:38:30 -07002594/*---------------------------------------------------------------------
2595 * ASSOC API's
2596 *---------------------------------------------------------------------
2597 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002598/*
2599 * FUNCTION: WDA_JoinReqCallback
2600 * Trigger Init SCAN callback
2601 */
2602void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2603{
2604 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2605 tWDA_CbContext *pWDA;
2606 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002608 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 if(NULL == pWdaParams)
2610 {
2611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002612 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 VOS_ASSERT(0) ;
2614 return ;
2615 }
2616 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2617 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2619 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 /* reset macBSSID */
2621 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 /* reset macSTASelf */
2623 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002624 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 return ;
2627}
Jeff Johnson295189b2012-06-20 16:38:30 -07002628/*
2629 * FUNCTION: WDA_ProcessJoinReq
2630 * Trigger Join REQ in WDI
2631 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002632VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2633 tSwitchChannelParams* joinReqParam)
2634{
2635 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002636 WDI_JoinReqParamsType *wdiJoinReqParam =
2637 (WDI_JoinReqParamsType *)vos_mem_malloc(
2638 sizeof(WDI_JoinReqParamsType)) ;
2639 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002641 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 if(NULL == wdiJoinReqParam)
2643 {
2644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002645 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002647 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002648 return VOS_STATUS_E_NOMEM;
2649 }
2650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2651 if(NULL == pWdaParams)
2652 {
2653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002655 VOS_ASSERT(0);
2656 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002657 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002658 return VOS_STATUS_E_NOMEM;
2659 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002660
2661 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2662 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2663 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2664 {
2665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2666 "%s: received join request when BSSID or self-STA is NULL "
2667 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002668 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002669 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2670 VOS_ASSERT(0);
2671 vos_mem_free(wdiJoinReqParam);
2672 vos_mem_free(pWdaParams);
2673 joinReqParam->status = eSIR_FAILURE ;
2674 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2675 return VOS_STATUS_E_INVAL;
2676 }
2677
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 /* copy the BSSID for pWDA */
2679 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2680 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2682 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2684 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002685#ifdef WLAN_FEATURE_VOWIFI
2686 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2687 joinReqParam->maxTxPower ;
2688#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002689 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2690 joinReqParam->localPowerConstraint ;
2691#endif
2692 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2693 joinReqParam->secondaryChannelOffset ;
2694 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2695
2696 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 /* Store Init Req pointer, as this will be used for response */
2698 /* store Params pass it to WDI */
2699 pWdaParams->pWdaContext = pWDA;
2700 pWdaParams->wdaMsgParam = joinReqParam;
2701 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 status = WDI_JoinReq(wdiJoinReqParam,
2703 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(IS_WDI_STATUS_FAILURE(status))
2705 {
2706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2707 "Failure in Join WDI API, free all the memory " );
2708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2709 vos_mem_free(pWdaParams) ;
2710 joinReqParam->status = eSIR_FAILURE ;
2711 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002713 return CONVERT_WDI2VOS_STATUS(status) ;
2714}
Jeff Johnson295189b2012-06-20 16:38:30 -07002715/*
2716 * FUNCTION: WDA_SwitchChannelReqCallback
2717 * send Switch channel RSP back to PE
2718 */
2719void WDA_SwitchChannelReqCallback(
2720 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2721{
2722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2723 tWDA_CbContext *pWDA;
2724 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002726 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 if(NULL == pWdaParams)
2728 {
2729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002730 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 VOS_ASSERT(0) ;
2732 return ;
2733 }
2734 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2735 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2736
2737#ifdef WLAN_FEATURE_VOWIFI
2738 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2739#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002740 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2741 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002743 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002744 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002745 return ;
2746}
Jeff Johnson295189b2012-06-20 16:38:30 -07002747/*
2748 * FUNCTION: WDA_ProcessChannelSwitchReq
2749 * Request to WDI to switch channel REQ params.
2750 */
2751VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2752 tSwitchChannelParams *pSwitchChanParams)
2753{
2754 WDI_Status status = WDI_STATUS_SUCCESS ;
2755 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2756 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2757 sizeof(WDI_SwitchChReqParamsType)) ;
2758 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002760 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 if(NULL == wdiSwitchChanParam)
2762 {
2763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002764 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 VOS_ASSERT(0);
2766 return VOS_STATUS_E_NOMEM;
2767 }
2768 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2769 if(NULL == pWdaParams)
2770 {
2771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 VOS_ASSERT(0);
2774 vos_mem_free(wdiSwitchChanParam);
2775 return VOS_STATUS_E_NOMEM;
2776 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2778#ifndef WLAN_FEATURE_VOWIFI
2779 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2780 pSwitchChanParams->localPowerConstraint;
2781#endif
2782 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2783 pSwitchChanParams->secondaryChannelOffset;
2784 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 /* Store req pointer, as this will be used for response */
2786 /* store Params pass it to WDI */
2787 pWdaParams->pWdaContext = pWDA;
2788 pWdaParams->wdaMsgParam = pSwitchChanParams;
2789 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790#ifdef WLAN_FEATURE_VOWIFI
2791 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2792 = pSwitchChanParams->maxTxPower;
2793 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2794 pSwitchChanParams ->selfStaMacAddr,
2795 sizeof(tSirMacAddr));
2796#endif
2797 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2798 pSwitchChanParams->bssId,
2799 sizeof(tSirMacAddr));
2800
2801 status = WDI_SwitchChReq(wdiSwitchChanParam,
2802 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 if(IS_WDI_STATUS_FAILURE(status))
2804 {
2805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2806 "Failure in process channel switch Req WDI API, free all the memory " );
2807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2808 vos_mem_free(pWdaParams) ;
2809 pSwitchChanParams->status = eSIR_FAILURE ;
2810 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 return CONVERT_WDI2VOS_STATUS(status) ;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_ConfigBssReqCallback
2816 * config BSS Req Callback, called by WDI
2817 */
2818void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2819 ,void* pUserData)
2820{
2821 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2822 tWDA_CbContext *pWDA;
2823 tAddBssParams *configBssReqParam;
2824 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 if(NULL == pWdaParams)
2828 {
2829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002830 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002831 VOS_ASSERT(0) ;
2832 return ;
2833 }
2834 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2835 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2836 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002838 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002839 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2840 {
2841 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2842 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2844 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2845 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2846
2847 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2848 {
2849 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2850 {
2851 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2852 staConfigBssParam->staType = STA_ENTRY_BSSID;
2853 }
2854 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2855 (staConfigBssParam->staType == STA_ENTRY_SELF))
2856 {
2857 /* This is the 1st add BSS Req for the BTAMP STA */
2858 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2859 staConfigBssParam->staType = STA_ENTRY_BSSID;
2860 }
2861 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2862 (staConfigBssParam->staType == STA_ENTRY_PEER))
2863 {
2864 /* This is the 2nd ADD BSS Request that is sent
2865 * on the BTAMP STA side. The Sta type is
2866 * set to STA_ENTRY_PEER here.*/
2867 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2868 }
2869 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2870 (staConfigBssParam->staType == STA_ENTRY_SELF))
2871 {
2872 /* statype is already set by PE.
2873 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2874 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2875 staConfigBssParam->staType = STA_ENTRY_BSSID;
2876 }
2877 else
2878 {
2879 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2880 staConfigBssParam->staType = STA_ENTRY_PEER;
2881 }
2882 }
2883 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2884 {
2885 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2886 staConfigBssParam->staType = STA_ENTRY_SELF;
2887 }
2888 else
2889 {
2890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2891 "Invalid operation mode specified");
2892 VOS_ASSERT(0);
2893 }
2894
2895 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2900 sizeof(tSirMacAddr));
2901 staConfigBssParam->txChannelWidthSet =
2902 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2904 staConfigBssParam->htCapable)
2905 {
2906 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2907 wdiConfigBssRsp->ucBSSIdx;
2908 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2909 WDA_VALID_STA_INDEX ;
2910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002911 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2912 wdiConfigBssRsp->ucBSSIdx,
2913 wdiConfigBssRsp->ucSTAIdx))
2914 {
2915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002916 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 VOS_ASSERT(0) ;
2918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002919 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2920 {
2921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002922 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 VOS_ASSERT(0) ;
2924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002925#ifdef WLAN_FEATURE_VOWIFI
2926 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2927#endif
2928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2930 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 return ;
2933}
Jeff Johnson295189b2012-06-20 16:38:30 -07002934/*
2935 * FUNCTION: WDA_UpdateEdcaParamsForAC
2936 * Update WDI EDCA params with PE edca params
2937 */
2938void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2939 WDI_EdcaParamRecord *wdiEdcaParam,
2940 tSirMacEdcaParamRecord *macEdcaParam)
2941{
2942 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2943 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2944 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2945 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2946 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2947 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2948}
Jeff Johnson295189b2012-06-20 16:38:30 -07002949/*
2950 * FUNCTION: WDA_ProcessConfigBssReq
2951 * Configure BSS before starting Assoc with AP
2952 */
2953VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2954 tAddBssParams* configBssReqParam)
2955{
2956 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2958 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2959 sizeof(WDI_ConfigBSSReqParamsType)) ;
2960 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002962 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 if(NULL == wdiConfigBssReqParam)
2964 {
2965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 VOS_ASSERT(0);
2968 return VOS_STATUS_E_NOMEM;
2969 }
2970 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2971 if(NULL == pWdaParams)
2972 {
2973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002974 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 VOS_ASSERT(0);
2976 vos_mem_free(wdiConfigBssReqParam);
2977 return VOS_STATUS_E_NOMEM;
2978 }
Kiran4a17ebe2013-01-31 10:43:43 -08002979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
2980 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2983 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 /* Store Init Req pointer, as this will be used for response */
2985 /* store Params pass it to WDI */
2986 pWdaParams->pWdaContext = pWDA;
2987 pWdaParams->wdaMsgParam = configBssReqParam;
2988 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2990 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(IS_WDI_STATUS_FAILURE(status))
2992 {
2993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2994 "Failure in Config BSS WDI API, free all the memory " );
2995 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2996 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return CONVERT_WDI2VOS_STATUS(status) ;
3001}
Jeff Johnson295189b2012-06-20 16:38:30 -07003002#ifdef ENABLE_HAL_COMBINED_MESSAGES
3003/*
3004 * FUNCTION: WDA_PostAssocReqCallback
3005 * Post ASSOC req callback, send RSP back to PE
3006 */
3007void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3008 void* pUserData)
3009{
3010 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3011 tPostAssocParams *postAssocReqParam =
3012 (tPostAssocParams *)pWDA->wdaMsgParam ;
3013 /*STA context within the BSS Params*/
3014 tAddStaParams *staPostAssocParam =
3015 &postAssocReqParam->addBssParams.staContext ;
3016 /*STA Params for self STA*/
3017 tAddStaParams *selfStaPostAssocParam =
3018 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003022 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3024 {
3025 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3026 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3027 sizeof(tSirMacAddr)) ;
3028 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3029 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3030 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003031 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3032 }
3033 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3034 pWDA->wdaWdiApiMsgParam = NULL;
3035 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 return ;
3038}
Jeff Johnson295189b2012-06-20 16:38:30 -07003039/*
3040 * FUNCTION: WDA_ProcessPostAssocReq
3041 * Trigger POST ASSOC processing in WDI
3042 */
3043VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3044 tPostAssocParams *postAssocReqParam)
3045{
Jeff Johnson295189b2012-06-20 16:38:30 -07003046 WDI_Status status = WDI_STATUS_SUCCESS ;
3047
3048 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3049 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3050 sizeof(WDI_PostAssocReqParamsType)) ;
3051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003052 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003053
Jeff Johnson295189b2012-06-20 16:38:30 -07003054 if(NULL == wdiPostAssocReqParam)
3055 {
3056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 VOS_ASSERT(0);
3059 return VOS_STATUS_E_NOMEM;
3060 }
3061
3062 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3063 {
3064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003065 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 VOS_ASSERT(0);
3067 return VOS_STATUS_E_FAILURE;
3068 }
3069
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 /* update BSS params into WDI structure */
3071 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3072 &postAssocReqParam->addBssParams) ;
3073 /* update STA params into WDI structure */
3074 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3075 &postAssocReqParam->addStaParams) ;
3076
3077 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3078 postAssocReqParam->addBssParams.highPerformance;
3079 WDA_UpdateEdcaParamsForAC(pWDA,
3080 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3081 &postAssocReqParam->addBssParams.acbe);
3082 WDA_UpdateEdcaParamsForAC(pWDA,
3083 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3084 &postAssocReqParam->addBssParams.acbk);
3085 WDA_UpdateEdcaParamsForAC(pWDA,
3086 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3087 &postAssocReqParam->addBssParams.acvi);
3088 WDA_UpdateEdcaParamsForAC(pWDA,
3089 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3090 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 /* Store Init Req pointer, as this will be used for response */
3092 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 /* store Params pass it to WDI */
3094 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3096 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003097 if(IS_WDI_STATUS_FAILURE(status))
3098 {
3099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3100 "Failure in Post Assoc WDI API, free all the memory " );
3101 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3102 pWDA->wdaWdiApiMsgParam = NULL;
3103 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 return CONVERT_WDI2VOS_STATUS(status) ;
3108}
3109#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003110/*
3111 * FUNCTION: WDA_AddStaReqCallback
3112 * ADD STA req callback, send RSP back to PE
3113 */
3114void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3115 void* pUserData)
3116{
3117 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3118 tWDA_CbContext *pWDA;
3119 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003121 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 if(NULL == pWdaParams)
3123 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 VOS_ASSERT(0) ;
3126 return ;
3127 }
3128 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3129 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003131 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3133 {
3134 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3135 /*TODO: UMAC structure doesn't have these fields*/
3136 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3137 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3138 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3139 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3140 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3141 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003142#ifdef FEATURE_WLAN_TDLS
3143 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3144 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3145#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003146 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003147#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 {
3149 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3150 wdiConfigStaRsp->ucBssIdx;
3151 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3152 WDA_VALID_STA_INDEX ;
3153 }
3154 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3155 {
3156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003157 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_ASSERT(0) ;
3159 return ;
3160 }
3161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3163 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 return ;
3166}
Jeff Johnson295189b2012-06-20 16:38:30 -07003167/*
3168 * FUNCTION: WDA_ConfigStaReq
3169 * Trigger Config STA processing in WDI
3170 */
3171VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3172 tAddStaParams *addStaReqParam)
3173{
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3176 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3177 sizeof(WDI_ConfigSTAReqParamsType)) ;
3178 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003180 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 if(NULL == wdiConfigStaReqParam)
3182 {
3183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003184 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003185 VOS_ASSERT(0);
3186 return VOS_STATUS_E_NOMEM;
3187 }
3188 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3189 if(NULL == pWdaParams)
3190 {
3191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003193 VOS_ASSERT(0);
3194 vos_mem_free(wdiConfigStaReqParam);
3195 return VOS_STATUS_E_NOMEM;
3196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003197 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 /* update STA params into WDI structure */
3199 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3200 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 /* Store Init Req pointer, as this will be used for response */
3202 /* store Params pass it to WDI */
3203 pWdaParams->pWdaContext = pWDA;
3204 pWdaParams->wdaMsgParam = addStaReqParam;
3205 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3207 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(IS_WDI_STATUS_FAILURE(status))
3209 {
3210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3211 "Failure in Config STA WDI API, free all the memory " );
3212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3213 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 return CONVERT_WDI2VOS_STATUS(status) ;
3218}
Jeff Johnson295189b2012-06-20 16:38:30 -07003219/*
3220 * FUNCTION: WDA_DelBSSReqCallback
3221 * Dens DEL BSS RSP back to PE
3222 */
3223void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3224 void* pUserData)
3225{
3226 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3227 tWDA_CbContext *pWDA;
3228 tDeleteBssParams *delBssReqParam;
3229 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 if(NULL == pWdaParams)
3233 {
3234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003235 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 VOS_ASSERT(0) ;
3237 return ;
3238 }
3239 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3240 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003241 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3243 {
3244 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3245 sizeof(tSirMacAddr)) ;
3246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3248 {
3249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003250 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_ASSERT(0) ;
3252 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003256 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_ASSERT(0) ;
3258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003259 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3260 {
3261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003262 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003263 VOS_ASSERT(0) ;
3264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* reset the the system role*/
3268 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3269
3270 /* Reset the BA related information */
3271 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3272 {
3273 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3274 {
3275 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3276 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3277 /* Reset framesTxed counters here */
3278 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3279 {
3280 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3281 }
3282 }
3283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 return ;
3286}
3287
Jeff Johnson295189b2012-06-20 16:38:30 -07003288/*
3289 * FUNCTION: WDA_ProcessDelBssReq
3290 * Init DEL BSS req with WDI
3291 */
3292VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3293 tDeleteBssParams *delBssParam)
3294{
3295 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3297 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3298 sizeof(WDI_DelBSSReqParamsType)) ;
3299 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == wdiDelBssReqParam)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0);
3307 return VOS_STATUS_E_NOMEM;
3308 }
3309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3310 if(NULL == pWdaParams)
3311 {
3312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003313 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_ASSERT(0);
3315 vos_mem_free(wdiDelBssReqParam);
3316 return VOS_STATUS_E_NOMEM;
3317 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3319 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3320
3321 /* Store Init Req pointer, as this will be used for response */
3322 /* store Params pass it to WDI */
3323 pWdaParams->pWdaContext = pWDA;
3324 pWdaParams->wdaMsgParam = delBssParam;
3325 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 status = WDI_DelBSSReq(wdiDelBssReqParam,
3327 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(IS_WDI_STATUS_FAILURE(status))
3329 {
3330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3331 "Failure in Del BSS WDI API, free all the memory " );
3332 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3333 vos_mem_free(pWdaParams) ;
3334 delBssParam->status = eSIR_FAILURE ;
3335 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 return CONVERT_WDI2VOS_STATUS(status) ;
3338}
Jeff Johnson295189b2012-06-20 16:38:30 -07003339/*
3340 * FUNCTION: WDA_DelSTAReqCallback
3341 * Dens DEL STA RSP back to PE
3342 */
3343void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3344 void* pUserData)
3345{
3346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3347 tWDA_CbContext *pWDA;
3348 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 if(NULL == pWdaParams)
3352 {
3353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 VOS_ASSERT(0) ;
3356 return ;
3357 }
3358 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3359 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003360 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3362 {
3363 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3364 {
3365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003366 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003367 VOS_ASSERT(0) ;
3368 }
3369 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3370 }
3371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3372 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 /*Reset the BA information corresponding to this STAIdx */
3374 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3375 WDA_INVALID_STA_INDEX;
3376 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3377
3378 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 return ;
3380}
Jeff Johnson295189b2012-06-20 16:38:30 -07003381/*
3382 * FUNCTION: WDA_ProcessDelStaReq
3383 * Init DEL STA req with WDI
3384 */
3385VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3386 tDeleteStaParams *delStaParam)
3387{
3388 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003389 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3390 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3391 sizeof(WDI_DelSTAReqParamsType)) ;
3392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003394 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 if(NULL == wdiDelStaReqParam)
3396 {
3397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 VOS_ASSERT(0);
3400 return VOS_STATUS_E_NOMEM;
3401 }
3402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3403 if(NULL == pWdaParams)
3404 {
3405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 VOS_ASSERT(0);
3408 vos_mem_free(wdiDelStaReqParam);
3409 return VOS_STATUS_E_NOMEM;
3410 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003411 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3412 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003413 /* Store Init Req pointer, as this will be used for response */
3414 /* store Params pass it to WDI */
3415 pWdaParams->pWdaContext = pWDA;
3416 pWdaParams->wdaMsgParam = delStaParam;
3417 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 status = WDI_DelSTAReq(wdiDelStaReqParam,
3419 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 if(IS_WDI_STATUS_FAILURE(status))
3421 {
3422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3423 "Failure in Del STA WDI API, free all the memory status = %d",
3424 status );
3425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3426 vos_mem_free(pWdaParams) ;
3427 delStaParam->status = eSIR_FAILURE ;
3428 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003430 return CONVERT_WDI2VOS_STATUS(status) ;
3431}
Jeff Johnson295189b2012-06-20 16:38:30 -07003432void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3433{
3434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3435 tWDA_CbContext *pWDA;
3436 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003438 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 if(NULL == pWdaParams)
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003442 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 VOS_ASSERT(0) ;
3444 return ;
3445 }
3446 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3447 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3449 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3451 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3452 pwdiAddSTASelfRsp->macSelfSta,
3453 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003454 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 return ;
3456}
Jeff Johnson295189b2012-06-20 16:38:30 -07003457/*
3458 * FUNCTION: WDA_ProcessAddStaSelfReq
3459 *
3460 */
3461VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3462{
3463 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003464 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3466 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3467 sizeof(WDI_AddSTASelfReqParamsType)) ;
3468 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 if( NULL == wdiAddStaSelfReq )
3472 {
3473 VOS_ASSERT( 0 );
3474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003475 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 return( VOS_STATUS_E_NOMEM );
3477 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 if( NULL == pWdaParams )
3480 {
3481 VOS_ASSERT( 0 );
3482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003483 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 vos_mem_free(wdiAddStaSelfReq) ;
3485 return( VOS_STATUS_E_NOMEM );
3486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003487 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3489 /* Store Init Req pointer, as this will be used for response */
3490 /* store Params pass it to WDI */
3491 pWdaParams->pWdaContext = pWDA;
3492 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3493 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003494 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003495
Jeff Johnson43971f52012-07-17 12:26:56 -07003496 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 {
3498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3499 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003500 wstatus );
3501 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3503 vos_mem_free(pWdaParams) ;
3504 pAddStaSelfReq->status = eSIR_FAILURE ;
3505 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3506 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003507 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508}
Jeff Johnson295189b2012-06-20 16:38:30 -07003509/*
3510 * FUNCTION: WDA_DelSTASelfRespCallback
3511 *
3512 */
3513void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3514 wdiDelStaSelfRspParams , void* pUserData)
3515{
3516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3517 tWDA_CbContext *pWDA;
3518 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003520 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 if (NULL == pWdaParams)
3522 {
3523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003524 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003525 VOS_ASSERT(0);
3526 return;
3527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3529 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003531 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532
3533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3534 vos_mem_free(pWdaParams) ;
3535
3536 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 return ;
3538}
Jeff Johnson295189b2012-06-20 16:38:30 -07003539/*
3540 * FUNCTION: WDA_DelSTASelfReqCallback
3541 *
3542 */
3543void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3544 void* pUserData)
3545{
3546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3547 tWDA_CbContext *pWDA;
3548 tDelStaSelfParams *delStaSelfParams;
3549
3550 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303551 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003552 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003553
3554 if (NULL == pWdaParams)
3555 {
3556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003557 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 VOS_ASSERT(0);
3559 return;
3560 }
3561
3562 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3563 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3564
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003565 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566
3567 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3568 {
3569 VOS_ASSERT(0);
3570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3571 vos_mem_free(pWdaParams) ;
3572 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3573 }
3574
3575 return ;
3576}
3577
3578/*
3579 * FUNCTION: WDA_DelSTASelfReq
3580 * Trigger Config STA processing in WDI
3581 */
3582VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3583 tDelStaSelfParams* pDelStaSelfReqParam)
3584{
3585 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003586 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 tWDA_ReqParams *pWdaParams = NULL;
3588 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3589 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3590 sizeof(WDI_DelSTASelfReqParamsType)) ;
3591
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003593 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 if( NULL == wdiDelStaSelfReq )
3595 {
3596 VOS_ASSERT( 0 );
3597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003598 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003599 return( VOS_STATUS_E_NOMEM );
3600 }
3601
3602 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3603 if( NULL == pWdaParams )
3604 {
3605 VOS_ASSERT( 0 );
3606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003607 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003608 vos_mem_free(wdiDelStaSelfReq) ;
3609 return( VOS_STATUS_E_NOMEM );
3610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003611 pWdaParams->pWdaContext = pWDA;
3612 /* Store param pointer as passed in by caller */
3613 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3614 /* store Params pass it to WDI */
3615 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3617 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3618
3619 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3620 wdiDelStaSelfReq->pUserData = pWdaParams;
3621
Jeff Johnson43971f52012-07-17 12:26:56 -07003622 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3624
Jeff Johnson43971f52012-07-17 12:26:56 -07003625 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 {
3627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3628 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3629 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003630 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3632 vos_mem_free(pWdaParams) ;
3633 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3634 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3635 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003636 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003637}
3638
Jeff Johnson295189b2012-06-20 16:38:30 -07003639/*
3640 * FUNCTION: WDA_SendMsg
3641 * Send Message back to PE
3642 */
3643void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3644 void *pBodyptr, tANI_U32 bodyVal)
3645{
3646 tSirMsgQ msg = {0} ;
3647 tANI_U32 status = VOS_STATUS_SUCCESS ;
3648 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 msg.type = msgType;
3650 msg.bodyval = bodyVal;
3651 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003652 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003653 if (VOS_STATUS_SUCCESS != status)
3654 {
3655 if(NULL != pBodyptr)
3656 {
3657 vos_mem_free(pBodyptr);
3658 }
3659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003660 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 VOS_ASSERT(0) ;
3662 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003663 return ;
3664}
Jeff Johnson295189b2012-06-20 16:38:30 -07003665/*
3666 * FUNCTION: WDA_UpdateBSSParams
3667 * Translated WDA/PE BSS info into WDI BSS info..
3668 */
3669void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3670 WDI_ConfigBSSReqInfoType *wdiBssParams,
3671 tAddBssParams *wdaBssParams)
3672{
3673 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003674 /* copy bssReq Params to WDI structure */
3675 vos_mem_copy(wdiBssParams->macBSSID,
3676 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3677 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3678 sizeof(tSirMacAddr)) ;
3679 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3680 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3681 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 wdiBssParams->ucShortSlotTimeSupported =
3683 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3685 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3686 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3687 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3688 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3689
3690 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3691 wdiBssParams->ucTXOPProtectionFullSupport =
3692 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3694 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003696 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3697 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3698 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3699 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3700
Chet Lanctot186b5732013-03-18 10:26:30 -07003701 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3702
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 /* copy SSID into WDI structure */
3704 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3705 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3706 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3708 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003710#ifdef WLAN_FEATURE_VOWIFI
3711 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3712#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003713 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003715#ifdef WLAN_FEATURE_VOWIFI_11R
3716 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003717 if(wdiBssParams->bExtSetStaKeyParamValid)
3718 {
3719 /* copy set STA key params to WDI structure */
3720 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3721 wdaBssParams->extSetStaKeyParam.staIdx;
3722 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3723 wdaBssParams->extSetStaKeyParam.encType;
3724 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3725 wdaBssParams->extSetStaKeyParam.wepType;
3726 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3727 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003728 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3729 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003730 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3732 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3733 {
3734 WDA_GetWepKeysFromCfg( pWDA,
3735 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3736 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3737 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3738 }
3739 else
3740 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003741 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3742 keyIndex++)
3743 {
3744 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3745 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3746 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3747 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3748 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3749 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3751 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3752 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3753 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3754 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3755 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3756 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3757 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003759 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3760 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003761 }
3762 }
3763 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3764 }
3765 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3766 {
3767 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3768 sizeof(wdaBssParams->extSetStaKeyParam) );
3769 }
3770#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003771#ifdef WLAN_FEATURE_11AC
3772 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3773 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3774#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003775
3776 return ;
3777}
Jeff Johnson295189b2012-06-20 16:38:30 -07003778/*
3779 * FUNCTION: WDA_UpdateSTAParams
3780 * Translated WDA/PE BSS info into WDI BSS info..
3781 */
3782void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3783 WDI_ConfigStaReqInfoType *wdiStaParams,
3784 tAddStaParams *wdaStaParams)
3785{
3786 tANI_U8 i = 0;
3787 /* Update STA params */
3788 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3789 sizeof(tSirMacAddr)) ;
3790 wdiStaParams->usAssocId = wdaStaParams->assocId;
3791 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003792 wdiStaParams->staIdx = wdaStaParams->staIdx;
3793
Jeff Johnson295189b2012-06-20 16:38:30 -07003794 wdiStaParams->ucShortPreambleSupported =
3795 wdaStaParams->shortPreambleSupported;
3796 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3797 sizeof(tSirMacAddr)) ;
3798 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3799
3800 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3801
3802 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3803 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3804 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3805 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3806 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3807 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3808 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3809
3810 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3811 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 wdiStaParams->wdiSupportedRates.opRateMode =
3813 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003814 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3815 {
3816 wdiStaParams->wdiSupportedRates.llbRates[i] =
3817 wdaStaParams->supportedRates.llbRates[i];
3818 }
3819 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3820 {
3821 wdiStaParams->wdiSupportedRates.llaRates[i] =
3822 wdaStaParams->supportedRates.llaRates[i];
3823 }
3824 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3825 {
3826 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3827 wdaStaParams->supportedRates.aniLegacyRates[i];
3828 }
3829 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3830 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003831#ifdef WLAN_FEATURE_11AC
3832 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3833 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3834 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3835 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3836#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003837 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3838 {
3839 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3840 wdaStaParams->supportedRates.supportedMCSSet[i];
3841 }
3842 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3843 wdaStaParams->supportedRates.rxHighestDataRate;
3844
3845 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3846
3847 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3848
3849 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3850 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3851 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3852
3853 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3854 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3855 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3856 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07003858#ifdef WLAN_FEATURE_11AC
3859 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3860 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08003861 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07003862#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08003863 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
3864 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 return ;
3866}
Jeff Johnson295189b2012-06-20 16:38:30 -07003867/*
3868 * -------------------------------------------------------------------------
3869 * CFG update to WDI
3870 * -------------------------------------------------------------------------
3871 */
3872
3873 /*
3874 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3875 * Convert the WNI CFG ID to HAL CFG ID
3876 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003877static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003878{
3879 switch(wniCfgId)
3880 {
3881 case WNI_CFG_STA_ID:
3882 return QWLAN_HAL_CFG_STA_ID;
3883 case WNI_CFG_CURRENT_TX_ANTENNA:
3884 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3885 case WNI_CFG_CURRENT_RX_ANTENNA:
3886 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3887 case WNI_CFG_LOW_GAIN_OVERRIDE:
3888 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3889 case WNI_CFG_POWER_STATE_PER_CHAIN:
3890 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3891 case WNI_CFG_CAL_PERIOD:
3892 return QWLAN_HAL_CFG_CAL_PERIOD;
3893 case WNI_CFG_CAL_CONTROL:
3894 return QWLAN_HAL_CFG_CAL_CONTROL;
3895 case WNI_CFG_PROXIMITY:
3896 return QWLAN_HAL_CFG_PROXIMITY;
3897 case WNI_CFG_NETWORK_DENSITY:
3898 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3899 case WNI_CFG_MAX_MEDIUM_TIME:
3900 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3901 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3902 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3903 case WNI_CFG_RTS_THRESHOLD:
3904 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3905 case WNI_CFG_SHORT_RETRY_LIMIT:
3906 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3907 case WNI_CFG_LONG_RETRY_LIMIT:
3908 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3909 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3910 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3911 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3912 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3913 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3914 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3915 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3916 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3917 case WNI_CFG_FIXED_RATE:
3918 return QWLAN_HAL_CFG_FIXED_RATE;
3919 case WNI_CFG_RETRYRATE_POLICY:
3920 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3921 case WNI_CFG_RETRYRATE_SECONDARY:
3922 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3923 case WNI_CFG_RETRYRATE_TERTIARY:
3924 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3925 case WNI_CFG_FORCE_POLICY_PROTECTION:
3926 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3927 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3928 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3929 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3930 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3931 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3932 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3933 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3934 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3935 case WNI_CFG_MAX_BA_SESSIONS:
3936 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3937 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3938 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3939 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3940 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3941 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3942 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3943 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3944 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3945 case WNI_CFG_STATS_PERIOD:
3946 return QWLAN_HAL_CFG_STATS_PERIOD;
3947 case WNI_CFG_CFP_MAX_DURATION:
3948 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3949#if 0 /*This is not part of CFG*/
3950 case WNI_CFG_FRAME_TRANS_ENABLED:
3951 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3952#endif
3953 case WNI_CFG_DTIM_PERIOD:
3954 return QWLAN_HAL_CFG_DTIM_PERIOD;
3955 case WNI_CFG_EDCA_WME_ACBK:
3956 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3957 case WNI_CFG_EDCA_WME_ACBE:
3958 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3959 case WNI_CFG_EDCA_WME_ACVI:
3960 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3961 case WNI_CFG_EDCA_WME_ACVO:
3962 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3963#if 0
3964 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3965 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3966 case WNI_CFG_TELE_BCN_TRANS_LI:
3967 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3968 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3969 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3970 case WNI_CFG_TELE_BCN_MAX_LI:
3971 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3972 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3973 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3974#endif
3975 case WNI_CFG_ENABLE_CLOSE_LOOP:
3976 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003977 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3978 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003979 default:
3980 {
3981 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3982 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3983 wniCfgId);
3984 return VOS_STATUS_E_INVAL;
3985 }
3986 }
3987}
Jeff Johnson295189b2012-06-20 16:38:30 -07003988/*
3989 * FUNCTION: WDA_UpdateCfgCallback
3990 *
3991 */
3992void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3993{
3994 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3995 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3996 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003999 /*
4000 * currently there is no response message is expected between PE and
4001 * WDA, Failure return from WDI is a ASSERT condition
4002 */
4003 if(WDI_STATUS_SUCCESS != wdiStatus)
4004 {
4005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004006 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004007 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4008 }
4009
4010 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4011 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4012 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 return ;
4014}
Jeff Johnson295189b2012-06-20 16:38:30 -07004015/*
4016 * FUNCTION: WDA_UpdateCfg
4017 *
4018 */
4019VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4020{
4021
4022 WDI_Status status = WDI_STATUS_SUCCESS ;
4023 tANI_U32 val =0;
4024 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4025 tHalCfg *configData;
4026 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4027 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004029 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 if (NULL == pMac )
4031 {
4032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004033 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 return VOS_STATUS_E_FAILURE;
4035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004036 if(WDA_START_STATE != pWDA->wdaState)
4037 {
4038 return VOS_STATUS_E_FAILURE;
4039 }
4040
4041 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4042 {
4043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004044 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 VOS_ASSERT(0);
4046 return VOS_STATUS_E_FAILURE;
4047 }
4048
4049 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4050 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 if(NULL == wdiCfgReqParam)
4052 {
4053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004054 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_ASSERT(0);
4056 return VOS_STATUS_E_NOMEM;
4057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004058 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4059 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 if(NULL == wdiCfgReqParam->pConfigBuffer)
4061 {
4062 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004063 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 vos_mem_free(wdiCfgReqParam);
4065 VOS_ASSERT(0);
4066 return VOS_STATUS_E_NOMEM;
4067 }
4068
4069 /*convert the WNI CFG Id to HAL CFG Id*/
4070 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4071 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4072
4073 /*TODO: revisit this for handling string parameters */
4074 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4075 &val) != eSIR_SUCCESS)
4076 {
4077 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4078 "Failed to cfg get id %d\n", cfgParam->bodyval);
4079 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4080 vos_mem_free(wdiCfgReqParam);
4081 return eSIR_FAILURE;
4082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4084 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4085 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4086 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4087 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4088
4089 /* store Params pass it to WDI */
4090 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004091#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4092 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4093 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 if(IS_WDI_STATUS_FAILURE(status))
4095 {
4096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4097 "Failure in Update CFG WDI API, free all the memory " );
4098 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4099 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4100 pWDA->wdaWdiCfgApiMsgParam = NULL;
4101 /* Failure is not expected */
4102 VOS_ASSERT(0) ;
4103 }
4104#else
4105 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4106 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4107 pWDA->wdaWdiCfgApiMsgParam = NULL;
4108#endif
4109 return CONVERT_WDI2VOS_STATUS(status) ;
4110}
4111
Jeff Johnson295189b2012-06-20 16:38:30 -07004112VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4113 v_U8_t *pDefaultKeyId,
4114 v_U8_t *pNumKeys,
4115 WDI_KeysType *pWdiKeys )
4116{
4117 v_U32_t i, j, defKeyId = 0;
4118 v_U32_t val = SIR_MAC_KEY_LENGTH;
4119 VOS_STATUS status = WDI_STATUS_SUCCESS;
4120 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 if (NULL == pMac )
4122 {
4123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004124 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 return VOS_STATUS_E_FAILURE;
4126 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004127 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4128 &defKeyId ))
4129 {
4130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4131 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4132 }
4133
4134 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 /* Need to extract ALL of the configured WEP Keys */
4136 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4137 {
4138 val = SIR_MAC_KEY_LENGTH;
4139 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4140 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4141 pWdiKeys[j].key,
4142 &val ))
4143 {
4144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4145 "WEP Key index [%d] may not configured in CFG\n",i);
4146 }
4147 else
4148 {
4149 pWdiKeys[j].keyId = (tANI_U8) i;
4150 /*
4151 * Actually, a DC (Don't Care) because
4152 * this is determined (and set) by PE/MLME
4153 */
4154 pWdiKeys[j].unicast = 0;
4155 /*
4156 * Another DC (Don't Care)
4157 */
4158 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4159 /* Another DC (Don't Care). Unused for WEP */
4160 pWdiKeys[j].paeRole = 0;
4161 /* Determined from wlan_cfgGetStr() above.*/
4162 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 j++;
4164 *pNumKeys = (tANI_U8) j;
4165 }
4166 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 return status;
4168}
Jeff Johnson295189b2012-06-20 16:38:30 -07004169/*
4170 * FUNCTION: WDA_SetBssKeyReqCallback
4171 * send SET BSS key RSP back to PE
4172 */
4173void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4174{
4175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4176 tWDA_CbContext *pWDA;
4177 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004179 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 if(NULL == pWdaParams)
4181 {
4182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004183 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004184 VOS_ASSERT(0) ;
4185 return ;
4186 }
4187 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4188 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4190 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004191 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004192 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 return ;
4194}
Jeff Johnson295189b2012-06-20 16:38:30 -07004195/*
4196 * FUNCTION: WDA_ProcessSetBssKeyReq
4197 * Request to WDI for programming the BSS key( key for
4198 * broadcast/multicast frames Encryption)
4199 */
4200VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4201 tSetBssKeyParams *setBssKeyParams )
4202{
4203 WDI_Status status = WDI_STATUS_SUCCESS ;
4204 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4205 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4206 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4207 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004210 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 if(NULL == wdiSetBssKeyParam)
4212 {
4213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 VOS_ASSERT(0);
4216 return VOS_STATUS_E_NOMEM;
4217 }
4218 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4219 if(NULL == pWdaParams)
4220 {
4221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 VOS_ASSERT(0);
4224 vos_mem_free(wdiSetBssKeyParam);
4225 return VOS_STATUS_E_NOMEM;
4226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004228 /* copy set BSS params to WDI structure */
4229 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4230 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4231 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 if(setBssKeyParams->encType != eSIR_ED_NONE)
4233 {
4234 if( setBssKeyParams->numKeys == 0 &&
4235 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4236 setBssKeyParams->encType == eSIR_ED_WEP104))
4237 {
4238 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4240 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4241 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4242 }
4243 else
4244 {
4245 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4246 {
4247 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4248 setBssKeyParams->key[keyIndex].keyId;
4249 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4250 setBssKeyParams->key[keyIndex].unicast;
4251 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4252 setBssKeyParams->key[keyIndex].keyDirection;
4253 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4254 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4255 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4256 setBssKeyParams->key[keyIndex].paeRole;
4257 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4258 setBssKeyParams->key[keyIndex].keyLength;
4259 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4260 setBssKeyParams->key[keyIndex].key,
4261 SIR_MAC_MAX_KEY_LENGTH);
4262 }
4263 }
4264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4266 setBssKeyParams->singleTidRc;
4267 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 /* Store set key pointer, as this will be used for response */
4269 /* store Params pass it to WDI */
4270 pWdaParams->pWdaContext = pWDA;
4271 pWdaParams->wdaMsgParam = setBssKeyParams;
4272 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4274 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4275
4276 if(IS_WDI_STATUS_FAILURE(status))
4277 {
4278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4279 "Failure in Set BSS Key Req WDI API, free all the memory " );
4280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4281 vos_mem_free(pWdaParams) ;
4282 setBssKeyParams->status = eSIR_FAILURE ;
4283 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 return CONVERT_WDI2VOS_STATUS(status) ;
4286}
Jeff Johnson295189b2012-06-20 16:38:30 -07004287/*
4288 * FUNCTION: WDA_RemoveBssKeyReqCallback
4289 * send SET BSS key RSP back to PE
4290 */
4291void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4292{
4293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4294 tWDA_CbContext *pWDA;
4295 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 if(NULL == pWdaParams)
4299 {
4300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 VOS_ASSERT(0) ;
4303 return ;
4304 }
4305 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4306 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4308 vos_mem_free(pWdaParams) ;
4309
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004310 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004311 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 return ;
4313}
Jeff Johnson295189b2012-06-20 16:38:30 -07004314/*
4315 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4316 * Request to WDI to remove the BSS key( key for broadcast/multicast
4317 * frames Encryption)
4318 */
4319VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4320 tRemoveBssKeyParams *removeBssKeyParams )
4321{
4322 WDI_Status status = WDI_STATUS_SUCCESS ;
4323 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4324 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4325 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4326 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 if(NULL == wdiRemoveBssKeyParam)
4330 {
4331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 VOS_ASSERT(0);
4334 return VOS_STATUS_E_NOMEM;
4335 }
4336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4337 if(NULL == pWdaParams)
4338 {
4339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004341 VOS_ASSERT(0);
4342 vos_mem_free(wdiRemoveBssKeyParam);
4343 return VOS_STATUS_E_NOMEM;
4344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004345 /* copy Remove BSS key params to WDI structure*/
4346 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4347 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4348 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4349 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4350 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004351 /* Store remove key pointer, as this will be used for response */
4352 /* store Params pass it to WDI */
4353 pWdaParams->pWdaContext = pWDA;
4354 pWdaParams->wdaMsgParam = removeBssKeyParams;
4355 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004356 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4357 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004358 if(IS_WDI_STATUS_FAILURE(status))
4359 {
4360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4361 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4363 vos_mem_free(pWdaParams) ;
4364 removeBssKeyParams->status = eSIR_FAILURE ;
4365 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 return CONVERT_WDI2VOS_STATUS(status) ;
4368}
Jeff Johnson295189b2012-06-20 16:38:30 -07004369/*
4370 * FUNCTION: WDA_SetBssKeyReqCallback
4371 * send SET BSS key RSP back to PE
4372 */
4373void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4374{
4375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4376 tWDA_CbContext *pWDA;
4377 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004379 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004380 if(NULL == pWdaParams)
4381 {
4382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004383 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 VOS_ASSERT(0) ;
4385 return ;
4386 }
4387 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4388 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4390 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004391 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 return ;
4394}
Jeff Johnson295189b2012-06-20 16:38:30 -07004395/*
4396 * FUNCTION: WDA_ProcessSetStaKeyReq
4397 * Request to WDI for programming the STA key( key for Unicast frames
4398 * Encryption)
4399 */
4400VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4401 tSetStaKeyParams *setStaKeyParams )
4402{
4403 WDI_Status status = WDI_STATUS_SUCCESS ;
4404 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4405 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4406 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4407 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004410 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 if(NULL == wdiSetStaKeyParam)
4412 {
4413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004414 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 VOS_ASSERT(0);
4416 return VOS_STATUS_E_NOMEM;
4417 }
4418 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4419 if(NULL == pWdaParams)
4420 {
4421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 VOS_ASSERT(0);
4424 vos_mem_free(wdiSetStaKeyParam);
4425 return VOS_STATUS_E_NOMEM;
4426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 /* copy set STA key params to WDI structure */
4430 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4431 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4432 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4433 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 if(setStaKeyParams->encType != eSIR_ED_NONE)
4435 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004436 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004437 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4438 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4439 {
4440 WDA_GetWepKeysFromCfg( pWDA,
4441 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4442 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4443 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4444 }
4445 else
4446 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4448 keyIndex++)
4449 {
4450 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4451 setStaKeyParams->key[keyIndex].keyId;
4452 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4453 setStaKeyParams->key[keyIndex].unicast;
4454 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4455 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004456 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4457 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4458 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4459 setStaKeyParams->key[keyIndex].paeRole;
4460 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4461 setStaKeyParams->key[keyIndex].keyLength;
4462 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4463 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4464 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4465 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4466 {
4467 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4468 }
4469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004470 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4471 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 }
4473 }
4474 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4475 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 /* Store set key pointer, as this will be used for response */
4477 /* store Params pass it to WDI */
4478 pWdaParams->pWdaContext = pWDA;
4479 pWdaParams->wdaMsgParam = setStaKeyParams;
4480 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4482 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 if(IS_WDI_STATUS_FAILURE(status))
4484 {
4485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4486 "Failure in set STA Key Req WDI API, free all the memory " );
4487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4488 vos_mem_free(pWdaParams) ;
4489 setStaKeyParams->status = eSIR_FAILURE ;
4490 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 return CONVERT_WDI2VOS_STATUS(status) ;
4493}
Jeff Johnson295189b2012-06-20 16:38:30 -07004494/*
4495 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4496 * send SET Bcast STA key RSP back to PE
4497 */
4498void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4499{
4500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4501 tWDA_CbContext *pWDA;
4502 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(NULL == pWdaParams)
4506 {
4507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 VOS_ASSERT(0) ;
4510 return ;
4511 }
4512 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4513 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4515 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004516 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004517 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 return ;
4519}
4520
Jeff Johnson295189b2012-06-20 16:38:30 -07004521/*
4522 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4523 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4524 * Encryption)
4525 */
4526VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4527 tSetStaKeyParams *setStaKeyParams )
4528{
4529 WDI_Status status = WDI_STATUS_SUCCESS ;
4530 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4531 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4532 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4533 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 if(NULL == wdiSetStaKeyParam)
4538 {
4539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 VOS_ASSERT(0);
4542 return VOS_STATUS_E_NOMEM;
4543 }
4544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4545 if(NULL == pWdaParams)
4546 {
4547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 VOS_ASSERT(0);
4550 vos_mem_free(wdiSetStaKeyParam);
4551 return VOS_STATUS_E_NOMEM;
4552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 /* copy set STA key params to WDI structure */
4556 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4557 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4558 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4559 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 if(setStaKeyParams->encType != eSIR_ED_NONE)
4561 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4563 keyIndex++)
4564 {
4565 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4566 setStaKeyParams->key[keyIndex].keyId;
4567 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4568 setStaKeyParams->key[keyIndex].unicast;
4569 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4570 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4572 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4573 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4574 setStaKeyParams->key[keyIndex].paeRole;
4575 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4576 setStaKeyParams->key[keyIndex].keyLength;
4577 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4578 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4579 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004580 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4581 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004582 }
4583 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 /* Store set key pointer, as this will be used for response */
4585 /* store Params pass it to WDI */
4586 pWdaParams->pWdaContext = pWDA;
4587 pWdaParams->wdaMsgParam = setStaKeyParams;
4588 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4590 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004591 if(IS_WDI_STATUS_FAILURE(status))
4592 {
4593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4594 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4595 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4596 vos_mem_free(pWdaParams) ;
4597 setStaKeyParams->status = eSIR_FAILURE ;
4598 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4599 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 return CONVERT_WDI2VOS_STATUS(status) ;
4601}
Jeff Johnson295189b2012-06-20 16:38:30 -07004602/*
4603 * FUNCTION: WDA_RemoveStaKeyReqCallback
4604 * send SET BSS key RSP back to PE
4605 */
4606void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4607{
4608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4609 tWDA_CbContext *pWDA;
4610 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004612 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 if(NULL == pWdaParams)
4614 {
4615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004616 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004617 VOS_ASSERT(0) ;
4618 return ;
4619 }
4620 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4621 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4623 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004624 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004626 return ;
4627}
4628
Jeff Johnson295189b2012-06-20 16:38:30 -07004629/*
4630 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4631 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4632 */
4633VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4634 tRemoveStaKeyParams *removeStaKeyParams )
4635{
4636 WDI_Status status = WDI_STATUS_SUCCESS ;
4637 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4638 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4639 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4640 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004642 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004643 if(NULL == wdiRemoveStaKeyParam)
4644 {
4645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004646 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 VOS_ASSERT(0);
4648 return VOS_STATUS_E_NOMEM;
4649 }
4650 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4651 if(NULL == pWdaParams)
4652 {
4653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004654 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004655 VOS_ASSERT(0);
4656 vos_mem_free(wdiRemoveStaKeyParam);
4657 return VOS_STATUS_E_NOMEM;
4658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 /* copy remove STA key params to WDI structure*/
4660 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4661 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4662 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4663 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4664 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 /* Store remove key pointer, as this will be used for response */
4666 /* store Params pass it to WDI */
4667 pWdaParams->pWdaContext = pWDA;
4668 pWdaParams->wdaMsgParam = removeStaKeyParams;
4669 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4671 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 if(IS_WDI_STATUS_FAILURE(status))
4673 {
4674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4675 "Failure in remove STA Key Req WDI API, free all the memory " );
4676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4677 vos_mem_free(pWdaParams) ;
4678 removeStaKeyParams->status = eSIR_FAILURE ;
4679 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 return CONVERT_WDI2VOS_STATUS(status) ;
4682}
Jeff Johnson295189b2012-06-20 16:38:30 -07004683/*
4684 * FUNCTION: WDA_IsHandleSetLinkStateReq
4685 * Update the WDA state and return the status to handle this message or not
4686 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004687WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4688 tWDA_CbContext *pWDA,
4689 tLinkStateParams *linkStateParams)
4690{
4691 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 switch(linkStateParams->state)
4693 {
4694 case eSIR_LINK_PREASSOC_STATE:
4695 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4696 /*
4697 * set the WDA state to PRE ASSOC
4698 * copy the BSSID into pWDA to use it in join request and return,
4699 * No need to handle these messages.
4700 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004701 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4702 {
4703 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004704 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004705 }
4706 else
4707 {
4708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004709 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004710 VOS_ASSERT(0);
4711 }
4712
4713 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4714 {
4715 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004717 }
4718 else
4719 {
4720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004721 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004722 VOS_ASSERT(0);
4723 }
4724
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4726 *channel and after ) so reset the WDA state to ready when the second
4727 * time UMAC issue the link state with PREASSOC
4728 */
4729 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4730 {
4731 /* RESET WDA state back to WDA_READY_STATE */
4732 pWDA->wdaState = WDA_READY_STATE;
4733 }
4734 else
4735 {
4736 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4737 }
4738 //populate linkState info in WDACbCtxt
4739 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004740 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 default:
4742 if(pWDA->wdaState != WDA_READY_STATE)
4743 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004744 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4745 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4746 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4747 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4748 *the ASSERT in WDA_Stop during module unload.*/
4749 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4750 {
4751 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004752 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004753 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004754 else
4755 {
4756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004757 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004758 status = WDA_IGNORE_SET_LINK_STATE;
4759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 }
4761 break;
4762 }
4763
4764 return status;
4765}
Jeff Johnson295189b2012-06-20 16:38:30 -07004766/*
4767 * FUNCTION: WDA_SetLinkStateCallback
4768 * call back function for set link state from WDI
4769 */
4770void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4771{
4772 tWDA_CbContext *pWDA;
4773 tLinkStateParams *linkStateParams;
4774 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004776 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004777 if(NULL == pWdaParams)
4778 {
4779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004780 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004781 VOS_ASSERT(0) ;
4782 return ;
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004786 /*
4787 * In STA mode start the BA activity check timer after association
4788 * and in AP mode start BA activity check timer after BSS start */
4789 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4790 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004791 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4792 ((status == WDI_STATUS_SUCCESS) &&
4793 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 {
4795 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 /*
4799 * No respone required for WDA_SET_LINK_STATE so free the request
4800 * param here
4801 */
4802 if( pWdaParams != NULL )
4803 {
4804 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4805 {
4806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4807 }
4808 vos_mem_free(pWdaParams);
4809 }
4810 return ;
4811}
Jeff Johnson295189b2012-06-20 16:38:30 -07004812/*
4813 * FUNCTION: WDA_ProcessSetLinkState
4814 * Request to WDI to set the link status.
4815 */
4816VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4817 tLinkStateParams *linkStateParams)
4818{
4819 WDI_Status status = WDI_STATUS_SUCCESS ;
4820 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4821 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4822 sizeof(WDI_SetLinkReqParamsType)) ;
4823 tWDA_ReqParams *pWdaParams ;
4824 tpAniSirGlobal pMac;
4825 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4826
4827 if(NULL == pMac)
4828 {
4829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004832 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004833 return VOS_STATUS_E_FAILURE;
4834 }
4835
4836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004837 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 if(NULL == wdiSetLinkStateParam)
4839 {
4840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 VOS_ASSERT(0);
4843 return VOS_STATUS_E_NOMEM;
4844 }
4845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4846 if(NULL == pWdaParams)
4847 {
4848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004850 VOS_ASSERT(0);
4851 vos_mem_free(wdiSetLinkStateParam);
4852 return VOS_STATUS_E_NOMEM;
4853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 if(WDA_IGNORE_SET_LINK_STATE ==
4855 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4856 {
4857 status = WDI_STATUS_E_FAILURE;
4858 }
4859 else
4860 {
4861 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4862 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4864 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4866 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 pWdaParams->pWdaContext = pWDA;
4868 /* Store remove key pointer, as this will be used for response */
4869 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 /* store Params pass it to WDI */
4871 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4872 /* Stop Timer only other than GO role and concurrent session */
4873 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07004874 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4876 {
4877 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4878 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4880 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 if(IS_WDI_STATUS_FAILURE(status))
4882 {
4883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4884 "Failure in set link state Req WDI API, free all the memory " );
4885 }
4886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 if(IS_WDI_STATUS_FAILURE(status))
4888 {
4889 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004890 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 vos_mem_free(pWdaParams);
4892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 return CONVERT_WDI2VOS_STATUS(status) ;
4894}
Jeff Johnson295189b2012-06-20 16:38:30 -07004895/*
4896 * FUNCTION: WDA_GetStatsReqParamsCallback
4897 * send the response to PE with Stats received from WDI
4898 */
4899void WDA_GetStatsReqParamsCallback(
4900 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4901 void* pUserData)
4902{
4903 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4904 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4905
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 pGetPEStatsRspParams =
4909 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4910 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4911
4912 if(NULL == pGetPEStatsRspParams)
4913 {
4914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004915 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 VOS_ASSERT(0);
4917 return;
4918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4920 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4921 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4922 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004923
4924 //Fill the Session Id Properly in PE
4925 pGetPEStatsRspParams->sessionId = 0;
4926 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004927 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4929 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 vos_mem_copy( pGetPEStatsRspParams + 1,
4931 wdiGetStatsRsp + 1,
4932 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 /* send response to UMAC*/
4934 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4935
4936 return;
4937}
4938
Jeff Johnson295189b2012-06-20 16:38:30 -07004939/*
4940 * FUNCTION: WDA_ProcessGetStatsReq
4941 * Request to WDI to get the statistics
4942 */
4943VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4944 tAniGetPEStatsReq *pGetStatsParams)
4945{
4946 WDI_Status status = WDI_STATUS_SUCCESS ;
4947 WDI_GetStatsReqParamsType wdiGetStatsParam;
4948 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4952 pGetStatsParams->staId;
4953 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4954 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 status = WDI_GetStatsReq(&wdiGetStatsParam,
4957 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 if(IS_WDI_STATUS_FAILURE(status))
4959 {
4960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4961 "Failure in Get Stats Req WDI API, free all the memory " );
4962 pGetPEStatsRspParams =
4963 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4964 if(NULL == pGetPEStatsRspParams)
4965 {
4966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004969 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 return VOS_STATUS_E_NOMEM;
4971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004972 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4973 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4974 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4975 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4976 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4977 (void *)pGetPEStatsRspParams, 0) ;
4978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 /* Free the request message */
4980 vos_mem_free(pGetStatsParams);
4981 return CONVERT_WDI2VOS_STATUS(status);
4982}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08004983
4984#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
4985/*
4986 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
4987 * send the response to PE with roam Rssi received from WDI
4988 */
4989void WDA_GetRoamRssiReqParamsCallback(
4990 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
4991 void* pUserData)
4992{
4993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4994 tWDA_CbContext *pWDA = NULL;
4995 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
4996 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
4997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
4998 "<------ %s " ,__func__);
4999 if(NULL == pWdaParams)
5000 {
5001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5002 "%s: pWdaParams received NULL", __func__);
5003 VOS_ASSERT(0) ;
5004 return ;
5005 }
5006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5007 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5008
5009 if(NULL == pGetRoamRssiReqParams)
5010 {
5011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5012 "%s: pGetRoamRssiReqParams received NULL", __func__);
5013 VOS_ASSERT(0);
5014 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5015 vos_mem_free(pWdaParams);
5016 return ;
5017 }
5018 pGetRoamRssiRspParams =
5019 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5020
5021 if(NULL == pGetRoamRssiRspParams)
5022 {
5023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5024 "%s: VOS MEM Alloc Failure", __func__);
5025 VOS_ASSERT(0);
5026 return;
5027 }
5028 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5029 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005030 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005031 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5032 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5033
5034 /* Assign get roam rssi req (backup) in to the response */
5035 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5036
5037 /* free WDI command buffer */
5038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5039 vos_mem_free(pWdaParams) ;
5040
5041 /* send response to UMAC*/
5042 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5043
5044 return;
5045}
5046
5047
5048
5049/*
5050 * FUNCTION: WDA_ProcessGetRoamRssiReq
5051 * Request to WDI to get the statistics
5052 */
5053VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5054 tAniGetRssiReq *pGetRoamRssiParams)
5055{
5056 WDI_Status status = WDI_STATUS_SUCCESS ;
5057 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5058 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5059 tWDA_ReqParams *pWdaParams = NULL;
5060
5061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5062 "------> %s " ,__func__);
5063 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5064 pGetRoamRssiParams->staId;
5065 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5066
5067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5068 if(NULL == pWdaParams)
5069 {
5070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5071 "%s: VOS MEM Alloc Failure", __func__);
5072 VOS_ASSERT(0);
5073 return VOS_STATUS_E_NOMEM;
5074 }
5075
5076 /* Store Init Req pointer, as this will be used for response */
5077 pWdaParams->pWdaContext = pWDA;
5078
5079 /* Take Get roam Rssi req backup as it stores the callback to be called after
5080 receiving the response */
5081 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5082 pWdaParams->wdaWdiApiMsgParam = NULL;
5083
5084 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5085 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5086 if(IS_WDI_STATUS_FAILURE(status))
5087 {
5088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5089 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5090 pGetRoamRssiRspParams =
5091 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5092 if(NULL == pGetRoamRssiRspParams)
5093 {
5094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5095 "%s: VOS MEM Alloc Failure", __func__);
5096 VOS_ASSERT(0);
5097 vos_mem_free(pGetRoamRssiParams);
5098 vos_mem_free(pWdaParams);
5099 return VOS_STATUS_E_NOMEM;
5100 }
5101 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5102 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5103 pGetRoamRssiRspParams->rssi = 0;
5104 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5105 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5106 (void *)pGetRoamRssiRspParams, 0) ;
5107 }
5108 return CONVERT_WDI2VOS_STATUS(status);
5109}
5110#endif
5111
5112
Jeff Johnson295189b2012-06-20 16:38:30 -07005113/*
5114 * FUNCTION: WDA_UpdateEDCAParamCallback
5115 * call back function for Update EDCA params from WDI
5116 */
5117void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5118{
5119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5120 tEdcaParams *pEdcaParams;
5121
5122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005123 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 if(NULL == pWdaParams)
5125 {
5126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005127 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 VOS_ASSERT(0) ;
5129 return ;
5130 }
5131 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5133 vos_mem_free(pWdaParams);
5134 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 return ;
5136}
Jeff Johnson295189b2012-06-20 16:38:30 -07005137/*
5138 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5139 * Request to WDI to Update the EDCA params.
5140 */
5141VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5142 tEdcaParams *pEdcaParams)
5143{
5144 WDI_Status status = WDI_STATUS_SUCCESS ;
5145 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5146 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5147 sizeof(WDI_UpdateEDCAParamsType)) ;
5148 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 if(NULL == wdiEdcaParam)
5152 {
5153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005156 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 return VOS_STATUS_E_NOMEM;
5158 }
5159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5160 if(NULL == pWdaParams)
5161 {
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 VOS_ASSERT(0);
5165 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005166 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 return VOS_STATUS_E_NOMEM;
5168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
5170 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
5171 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5172 &pEdcaParams->acbe);
5173 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5174 &pEdcaParams->acbk);
5175 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5176 &pEdcaParams->acvi);
5177 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5178 &pEdcaParams->acvo);
5179 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 pWdaParams->pWdaContext = pWDA;
5181 /* Store remove key pointer, as this will be used for response */
5182 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 /* store Params pass it to WDI */
5184 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5186 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 if(IS_WDI_STATUS_FAILURE(status))
5188 {
5189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5190 "Failure in Update EDCA Params WDI API, free all the memory " );
5191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5192 vos_mem_free(pWdaParams);
5193 vos_mem_free(pEdcaParams);
5194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 return CONVERT_WDI2VOS_STATUS(status) ;
5196}
Jeff Johnson295189b2012-06-20 16:38:30 -07005197/*
5198 * FUNCTION: WDA_AddBAReqCallback
5199 * send ADD BA RSP back to PE
5200 */
5201void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5202 void* pUserData)
5203{
5204 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5205 tWDA_CbContext *pWDA;
5206 tAddBAParams *pAddBAReqParams;
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 == pWdaParams)
5210 {
5211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005212 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 VOS_ASSERT(0) ;
5214 return ;
5215 }
5216 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5217 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5219 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005220 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005221 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 return ;
5223}
5224
Jeff Johnson295189b2012-06-20 16:38:30 -07005225/*
5226 * FUNCTION: WDA_ProcessAddBAReq
5227 * Request to WDI to Update the ADDBA REQ params.
5228 */
5229VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5230 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5231{
Jeff Johnson43971f52012-07-17 12:26:56 -07005232 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005233 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5234 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5235 sizeof(WDI_AddBAReqParamsType)) ;
5236 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 if(NULL == wdiAddBAReqParam)
5240 {
5241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005243 VOS_ASSERT(0);
5244 return VOS_STATUS_E_NOMEM;
5245 }
5246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5247 if(NULL == pWdaParams)
5248 {
5249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 VOS_ASSERT(0);
5252 vos_mem_free(wdiAddBAReqParam);
5253 return VOS_STATUS_E_NOMEM;
5254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 do
5256 {
5257 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 wdiAddBaInfo->ucSTAIdx = staIdx ;
5259 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5260 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005261 } while(0) ;
5262 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005263 pWdaParams->pWdaContext = pWDA;
5264 /* store Params pass it to WDI */
5265 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5266 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005267 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5268 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005269
Jeff Johnson43971f52012-07-17 12:26:56 -07005270 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 {
5272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005273 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5274 status = CONVERT_WDI2VOS_STATUS(wstatus);
5275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 vos_mem_free(pWdaParams);
5277 pAddBAReqParams->status = eSIR_FAILURE;
5278 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5279 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005280 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281}
Jeff Johnson295189b2012-06-20 16:38:30 -07005282/*
5283 * FUNCTION: WDA_AddBASessionReqCallback
5284 * send ADD BA SESSION RSP back to PE/(or TL)
5285 */
5286void WDA_AddBASessionReqCallback(
5287 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5288{
5289 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5290 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5291 tWDA_CbContext *pWDA;
5292 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005294 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 if(NULL == pWdaParams)
5296 {
5297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005298 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005299 VOS_ASSERT(0) ;
5300 return ;
5301 }
5302 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5303 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 if( NULL == pAddBAReqParams )
5305 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005307 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005309 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5310 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 return ;
5312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5314 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 /*
5316 * if WDA in update TL state, update TL with BA session parama and send
5317 * another request to HAL(/WDI) (ADD_BA_REQ)
5318 */
5319
5320 if((VOS_STATUS_SUCCESS ==
5321 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5322 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5323 {
5324 /* Update TL with BA info received from HAL/WDI */
5325 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5326 wdiAddBaSession->usBaSessionID,
5327 wdiAddBaSession->ucSTAIdx,
5328 wdiAddBaSession->ucBaTID,
5329 wdiAddBaSession->ucBaBufferSize,
5330 wdiAddBaSession->ucWinSize,
5331 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5333 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5334 }
5335 else
5336 {
5337 pAddBAReqParams->status =
5338 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5339
5340 /* Setting Flag to indicate that Set BA is success */
5341 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5342 {
5343 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5344 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5345 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5348 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 /*Reset the WDA state to READY */
5350 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 return ;
5352}
5353
Jeff Johnson295189b2012-06-20 16:38:30 -07005354/*
5355 * FUNCTION: WDA_ProcessAddBASessionReq
5356 * Request to WDI to Update the ADDBA REQ params.
5357 */
5358VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5359 tAddBAParams *pAddBAReqParams)
5360{
5361 WDI_Status status = WDI_STATUS_SUCCESS ;
5362 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5363 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5364 sizeof(WDI_AddBASessionReqParamsType)) ;
5365 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005366 WLANTL_STAStateType tlSTAState = 0;
5367
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005369 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 if(NULL == wdiAddBASessionReqParam)
5371 {
5372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 VOS_ASSERT(0);
5375 return VOS_STATUS_E_NOMEM;
5376 }
5377 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5378 if(NULL == pWdaParams)
5379 {
5380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 VOS_ASSERT(0);
5383 vos_mem_free(wdiAddBASessionReqParam);
5384 return VOS_STATUS_E_NOMEM;
5385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 /*
5387 * Populate ADD BA parameters and pass these paarmeters to WDI.
5388 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5389 * the state to track if these is BA recipient case or BA initiator
5390 * case.
5391 */
5392 do
5393 {
5394 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5395 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5396 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5397 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5398 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5399 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5400 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005402 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5403 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5404 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5405 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5406 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005407 /* check the BA direction and update state accordingly */
5408 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5409 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5410 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5411
5412 }while(0) ;
5413 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 pWdaParams->pWdaContext = pWDA;
5415 /* Store ADD BA pointer, as this will be used for response */
5416 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5417 /* store Params pass it to WDI */
5418 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005419
5420 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5421 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5422 */
5423 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5424 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5425 {
5426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5427 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.\n", pAddBAReqParams->staIdx, tlSTAState );
5428 status = WDI_STATUS_E_NOT_ALLOWED;
5429 pAddBAReqParams->status =
5430 CONVERT_WDI2SIR_STATUS(status) ;
5431 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5432 /*Reset the WDA state to READY */
5433 pWDA->wdaState = WDA_READY_STATE;
5434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5435 vos_mem_free(pWdaParams);
5436
5437 return CONVERT_WDI2VOS_STATUS(status) ;
5438 }
5439
Jeff Johnson295189b2012-06-20 16:38:30 -07005440 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5441 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005442 if(IS_WDI_STATUS_FAILURE(status))
5443 {
5444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005445 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d\n", status);
5446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5447 "Send ADD BA failure response to PE\n");
5448 pAddBAReqParams->status =
5449 CONVERT_WDI2SIR_STATUS(status) ;
5450 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005451 /*Reset the WDA state to READY */
5452 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 vos_mem_free(pWdaParams);
5455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005457}
Jeff Johnson295189b2012-06-20 16:38:30 -07005458/*
5459 * FUNCTION: WDA_DelBANotifyTL
5460 * send DEL BA IND to TL
5461 */
5462void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5463 tDelBAParams *pDelBAReqParams)
5464{
5465 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5466 //tSirMsgQ msg;
5467 vos_msg_t vosMsg;
5468 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 if(NULL == pDelBAInd)
5470 {
5471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005473 VOS_ASSERT(0) ;
5474 return;
5475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5477 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5478 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5479 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005480
Jeff Johnson295189b2012-06-20 16:38:30 -07005481
5482 vosMsg.type = WDA_DELETEBA_IND;
5483 vosMsg.bodyptr = pDelBAInd;
5484 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5485 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5486 {
5487 vosStatus = VOS_STATUS_E_BADMSG;
5488 }
5489}
Jeff Johnson295189b2012-06-20 16:38:30 -07005490/*
5491 * FUNCTION: WDA_DelBAReqCallback
5492 * send DEL BA RSP back to PE
5493 */
5494void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5495{
5496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5497 tWDA_CbContext *pWDA;
5498 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 if(NULL == pWdaParams)
5502 {
5503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 VOS_ASSERT(0) ;
5506 return ;
5507 }
5508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5509 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 /* Notify TL about DEL BA in case of recipinet */
5511 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5512 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5513 {
5514 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 /*
5517 * No respone required for WDA_DELBA_IND so just free the request
5518 * param here
5519 */
5520 vos_mem_free(pDelBAReqParams);
5521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5522 vos_mem_free(pWdaParams);
5523 return ;
5524}
5525
Jeff Johnson295189b2012-06-20 16:38:30 -07005526/*
5527 * FUNCTION: WDA_ProcessDelBAReq
5528 * Request to WDI to Update the DELBA REQ params.
5529 */
5530VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5531 tDelBAParams *pDelBAReqParams)
5532{
5533 WDI_Status status = WDI_STATUS_SUCCESS ;
5534 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5535 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5536 sizeof(WDI_DelBAReqParamsType)) ;
5537 tWDA_ReqParams *pWdaParams ;
5538 tANI_U16 staIdx = 0;
5539 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 if(NULL == wdiDelBAReqParam)
5543 {
5544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005546 VOS_ASSERT(0);
5547 return VOS_STATUS_E_NOMEM;
5548 }
5549 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5550 if(NULL == pWdaParams)
5551 {
5552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005553 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 VOS_ASSERT(0);
5555 vos_mem_free(wdiDelBAReqParam);
5556 return VOS_STATUS_E_NOMEM;
5557 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5559 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5560 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5561 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 pWdaParams->pWdaContext = pWDA;
5563 /* Store DEL BA pointer, as this will be used for response */
5564 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 /* store Params pass it to WDI */
5566 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5568 * maintained in WDA, so that WDA can retry for another BA session
5569 */
5570 staIdx = pDelBAReqParams->staIdx;
5571 tid = pDelBAReqParams->baTID;
5572 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 status = WDI_DelBAReq(wdiDelBAReqParam,
5574 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005575 if(IS_WDI_STATUS_FAILURE(status))
5576 {
5577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5578 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5579 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5580 vos_mem_free(pWdaParams->wdaMsgParam);
5581 vos_mem_free(pWdaParams);
5582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005584}
Jeff Johnson295189b2012-06-20 16:38:30 -07005585/*
5586 * FUNCTION: WDA_AddTSReqCallback
5587 * send ADD TS RSP back to PE
5588 */
5589void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5590{
5591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5592 tWDA_CbContext *pWDA;
5593 tAddTsParams *pAddTsReqParams;
5594
5595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 if(NULL == pWdaParams)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0) ;
5602 return ;
5603 }
5604 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5605 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5607 vos_mem_free(pWdaParams);
5608
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005609 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005611 return ;
5612}
5613
Jeff Johnson295189b2012-06-20 16:38:30 -07005614/*
5615 * FUNCTION: WDA_ProcessAddTSReq
5616 * Request to WDI to Update the ADD TS REQ params.
5617 */
5618VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5619 tAddTsParams *pAddTsReqParams)
5620{
5621 WDI_Status status = WDI_STATUS_SUCCESS ;
5622 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5623 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5624 sizeof(WDI_AddTSReqParamsType)) ;
5625 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005627 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005628 if(NULL == wdiAddTSReqParam)
5629 {
5630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005631 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 VOS_ASSERT(0);
5633 return VOS_STATUS_E_NOMEM;
5634 }
5635 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5636 if(NULL == pWdaParams)
5637 {
5638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005639 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 VOS_ASSERT(0);
5641 vos_mem_free(wdiAddTSReqParam);
5642 return VOS_STATUS_E_NOMEM;
5643 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5645 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 //TS IE
5647 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5648 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5649 pAddTsReqParams->tspec.length;
5650
5651 //TS IE : TS INFO : TRAFFIC
5652 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5653 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5654 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5655 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5656 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5657 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5658 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5659 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5660 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5661 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5662 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5663 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5664 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5665 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5666 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5667 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5668
5669 //TS IE : TS INFO : SCHEDULE
5670 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5671 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5672 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5673 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005674 //TS IE
5675 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5676 pAddTsReqParams->tspec.nomMsduSz;
5677 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5678 pAddTsReqParams->tspec.maxMsduSz;
5679 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5680 pAddTsReqParams->tspec.minSvcInterval;
5681 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5682 pAddTsReqParams->tspec.maxSvcInterval;
5683 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5684 pAddTsReqParams->tspec.inactInterval;
5685 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5686 pAddTsReqParams->tspec.suspendInterval;
5687 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5688 pAddTsReqParams->tspec.svcStartTime;
5689 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5690 pAddTsReqParams->tspec.minDataRate;
5691 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5692 pAddTsReqParams->tspec.meanDataRate;
5693 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5694 pAddTsReqParams->tspec.peakDataRate;
5695 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5696 pAddTsReqParams->tspec.maxBurstSz;
5697 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5698 pAddTsReqParams->tspec.delayBound;
5699 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5700 pAddTsReqParams->tspec.minPhyRate;
5701 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5702 pAddTsReqParams->tspec.surplusBw;
5703 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5704 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 /* TODO: tAddTsParams doesn't have the following fields */
5706#if 0
5707 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5708 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5709 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5710 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5711#endif
5712 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5713
5714 pWdaParams->pWdaContext = pWDA;
5715 /* Store ADD TS pointer, as this will be used for response */
5716 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 /* store Params pass it to WDI */
5718 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005719 status = WDI_AddTSReq(wdiAddTSReqParam,
5720 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 if(IS_WDI_STATUS_FAILURE(status))
5722 {
5723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5724 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5726 vos_mem_free(pWdaParams);
5727 pAddTsReqParams->status = eSIR_FAILURE ;
5728 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731}
5732
Jeff Johnson295189b2012-06-20 16:38:30 -07005733/*
5734 * FUNCTION: WDA_DelTSReqCallback
5735 * send DEL TS RSP back to PE
5736 */
5737void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5738{
5739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005741 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5743 vos_mem_free(pWdaParams->wdaMsgParam) ;
5744 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005745 /*
5746 * No respone required for WDA_DEL_TS_REQ so just free the request
5747 * param here
5748 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005749 return ;
5750}
5751
Jeff Johnson295189b2012-06-20 16:38:30 -07005752/*
5753 * FUNCTION: WDA_ProcessDelTSReq
5754 * Request to WDI to Update the DELTS REQ params.
5755 */
5756VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5757 tDelTsParams *pDelTSReqParams)
5758{
5759 WDI_Status status = WDI_STATUS_SUCCESS ;
5760 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5761 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5762 sizeof(WDI_DelTSReqParamsType)) ;
5763 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005765 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 if(NULL == wdiDelTSReqParam)
5767 {
5768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 VOS_ASSERT(0);
5771 return VOS_STATUS_E_NOMEM;
5772 }
5773 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5774 if(NULL == pWdaParams)
5775 {
5776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 VOS_ASSERT(0);
5779 vos_mem_free(wdiDelTSReqParam);
5780 return VOS_STATUS_E_NOMEM;
5781 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5783 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5784 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5785 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5786 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 pWdaParams->pWdaContext = pWDA;
5788 /* Store DEL TS pointer, as this will be used for response */
5789 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 /* store Params pass it to WDI */
5791 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 status = WDI_DelTSReq(wdiDelTSReqParam,
5793 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 if(IS_WDI_STATUS_FAILURE(status))
5795 {
5796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5797 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5798 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5799 vos_mem_free(pWdaParams->wdaMsgParam);
5800 vos_mem_free(pWdaParams);
5801 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005803}
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_UpdateBeaconParamsCallback
5806 * Free the memory. No need to send any response to PE in this case
5807 */
5808void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5809{
5810 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005812 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 if(NULL == pWdaParams)
5814 {
5815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005816 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 VOS_ASSERT(0) ;
5818 return ;
5819 }
5820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5821 vos_mem_free(pWdaParams->wdaMsgParam) ;
5822 vos_mem_free(pWdaParams);
5823 /*
5824 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5825 * param here
5826 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005827 return ;
5828}
Jeff Johnson295189b2012-06-20 16:38:30 -07005829/*
5830 * FUNCTION: WDA_ProcessUpdateBeaconParams
5831 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5832 */
5833VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5834 tUpdateBeaconParams *pUpdateBeaconParams)
5835{
5836 WDI_Status status = WDI_STATUS_SUCCESS ;
5837 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5838 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5839 sizeof(WDI_UpdateBeaconParamsType)) ;
5840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005843 if(NULL == wdiUpdateBeaconParams)
5844 {
5845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 VOS_ASSERT(0);
5848 return VOS_STATUS_E_NOMEM;
5849 }
5850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5851 if(NULL == pWdaParams)
5852 {
5853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 VOS_ASSERT(0);
5856 vos_mem_free(wdiUpdateBeaconParams);
5857 return VOS_STATUS_E_NOMEM;
5858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5860 pUpdateBeaconParams->bssIdx;
5861 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5862 pUpdateBeaconParams->fShortPreamble;
5863 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5864 pUpdateBeaconParams->fShortSlotTime;
5865 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5866 pUpdateBeaconParams->beaconInterval;
5867 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5868 pUpdateBeaconParams->llaCoexist;
5869 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5870 pUpdateBeaconParams->llbCoexist;
5871 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5872 pUpdateBeaconParams->llgCoexist;
5873 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5874 pUpdateBeaconParams->ht20MhzCoexist;
5875 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5876 pUpdateBeaconParams->llnNonGFCoexist;
5877 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5878 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5879 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5880 pUpdateBeaconParams->fRIFSMode;
5881 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5882 pUpdateBeaconParams->paramChangeBitmap;
5883 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5884
5885 pWdaParams->pWdaContext = pWDA;
5886 /* Store UpdateBeacon Req pointer, as this will be used for response */
5887 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 /* store Params pass it to WDI */
5889 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5891 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5892 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 if(IS_WDI_STATUS_FAILURE(status))
5894 {
5895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5896 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5898 vos_mem_free(pWdaParams->wdaMsgParam);
5899 vos_mem_free(pWdaParams);
5900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005901 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005902}
Jeff Johnson295189b2012-06-20 16:38:30 -07005903#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005904/*
5905 * FUNCTION: WDA_TSMStatsReqCallback
5906 * send TSM Stats RSP back to PE
5907 */
5908void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5909{
5910 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5911 tWDA_CbContext *pWDA = NULL;
5912 tTSMStats *pTsmRspParams = NULL;
5913
5914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005915 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 if(NULL == pWdaParams)
5917 {
5918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005919 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 VOS_ASSERT(0) ;
5921 return ;
5922 }
5923 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5924 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 if( NULL == pTsmRspParams )
5926 {
5927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005928 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 VOS_ASSERT( 0 );
5930 return ;
5931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5933 vos_mem_free(pWdaParams);
5934
5935 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5936 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5937 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5938 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5939 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5940 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5941 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5942 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5943 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5944 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 return ;
5947}
5948
5949
Jeff Johnson295189b2012-06-20 16:38:30 -07005950/*
5951 * FUNCTION: WDA_ProcessTsmStatsReq
5952 * Request to WDI to get the TSM Stats params.
5953 */
5954VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5955 tTSMStats *pTsmStats)
5956{
5957 WDI_Status status = WDI_STATUS_SUCCESS ;
5958 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5959 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005961 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5963 sizeof(WDI_TSMStatsReqParamsType));
5964 if(NULL == wdiTSMReqParam)
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 VOS_ASSERT(0);
5969 return VOS_STATUS_E_NOMEM;
5970 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5972 if(NULL == pWdaParams)
5973 {
5974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 VOS_ASSERT(0);
5977 vos_mem_free(wdiTSMReqParam);
5978 return VOS_STATUS_E_NOMEM;
5979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5981 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5982 pTsmStats->bssId,
5983 sizeof(wpt_macAddr));
5984 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5985
5986 pWdaParams->pWdaContext = pWDA;
5987 /* Store TSM Stats pointer, as this will be used for response */
5988 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005989 /* store Params pass it to WDI */
5990 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 status = WDI_TSMStatsReq(wdiTSMReqParam,
5992 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005993 if(IS_WDI_STATUS_FAILURE(status))
5994 {
5995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5996 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5998 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005999 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 return CONVERT_WDI2VOS_STATUS(status) ;
6002}
6003#endif
6004/*
6005 * FUNCTION: WDA_SendBeaconParamsCallback
6006 * No need to send any response to PE in this case
6007 */
6008void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6009{
6010
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006012 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 return ;
6014}
Jeff Johnson295189b2012-06-20 16:38:30 -07006015/*
6016 * FUNCTION: WDA_ProcessSendBeacon
6017 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6018 * start beacon trasmission
6019 */
6020VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6021 tSendbeaconParams *pSendbeaconParams)
6022{
6023 WDI_Status status = WDI_STATUS_SUCCESS ;
6024 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006026 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6028 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6029 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6030 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6032 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306033 /* p2pIeOffset should be atleast greater than timIeOffset */
6034 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6035 (pSendbeaconParams->p2pIeOffset <
6036 pSendbeaconParams->timIeOffset))
6037 {
6038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6039 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6040 VOS_ASSERT( 0 );
6041 return WDI_STATUS_E_FAILURE;
6042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6044 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 /* Copy the beacon template to local buffer */
6046 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6047 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6048 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6049
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6051 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 if(IS_WDI_STATUS_FAILURE(status))
6053 {
6054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6055 "Failure in SEND BEACON REQ Params WDI API" );
6056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006057 vos_mem_free(pSendbeaconParams);
6058 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006059}
Jeff Johnson295189b2012-06-20 16:38:30 -07006060/*
6061 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6062 * No need to send any response to PE in this case
6063 */
6064void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6065{
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 return ;
6069}
6070
Jeff Johnson295189b2012-06-20 16:38:30 -07006071/*
6072 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6073 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6074 * send probe response
6075 */
6076VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6077 tSendProbeRespParams *pSendProbeRspParams)
6078{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006079 WDI_Status status = WDI_STATUS_SUCCESS;
6080 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6081 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006083 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006084
6085 if (!wdiSendProbeRspParam)
6086 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6087
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006089 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006091 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006092 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 /* Copy the Probe Response template to local buffer */
6094 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006095 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006096 pSendProbeRspParams->pProbeRespTemplate,
6097 pSendProbeRspParams->probeRespTemplateLen);
6098 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006099 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006100 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6101 WDI_PROBE_REQ_BITMAP_IE_LEN);
6102
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006103 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006104
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006105 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006106 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 if(IS_WDI_STATUS_FAILURE(status))
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6110 "Failure in SEND Probe RSP Params WDI API" );
6111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006113 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115}
Jeff Johnson295189b2012-06-20 16:38:30 -07006116#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6117/*
6118 * FUNCTION: WDA_SetMaxTxPowerCallBack
6119 * send the response to PE with power value received from WDI
6120 */
6121void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6122 void* pUserData)
6123{
6124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6125 tWDA_CbContext *pWDA = NULL;
6126 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6127
6128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006129 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 if(NULL == pWdaParams)
6131 {
6132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006133 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006134 VOS_ASSERT(0) ;
6135 return ;
6136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006137 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6138 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 if( NULL == pMaxTxPowerParams )
6140 {
6141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006142 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006143 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006144 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6145 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 return ;
6147 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006148
Jeff Johnson295189b2012-06-20 16:38:30 -07006149
6150 /*need to free memory for the pointers used in the
6151 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006152 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6153 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006154 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006155
Jeff Johnson295189b2012-06-20 16:38:30 -07006156
6157 /* send response to UMAC*/
6158 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6159
6160 return;
6161}
Jeff Johnson295189b2012-06-20 16:38:30 -07006162/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006163 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 * Request to WDI to send set Max Tx Power Request
6165 */
6166 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6167 tMaxTxPowerParams *MaxTxPowerParams)
6168{
6169 WDI_Status status = WDI_STATUS_SUCCESS;
6170 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6171 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006172
Jeff Johnson295189b2012-06-20 16:38:30 -07006173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006174 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006175
Jeff Johnson295189b2012-06-20 16:38:30 -07006176 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6177 sizeof(WDI_SetMaxTxPowerParamsType));
6178 if(NULL == wdiSetMaxTxPowerParams)
6179 {
6180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006181 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006182 VOS_ASSERT(0);
6183 return VOS_STATUS_E_NOMEM;
6184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6186 if(NULL == pWdaParams)
6187 {
6188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006190 vos_mem_free(wdiSetMaxTxPowerParams);
6191 VOS_ASSERT(0);
6192 return VOS_STATUS_E_NOMEM;
6193 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006194 /* Copy.Max.Tx.Power Params to WDI structure */
6195 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6196 MaxTxPowerParams->bssId,
6197 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006198 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6199 MaxTxPowerParams->selfStaMacAddr,
6200 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006201 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6202 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006203 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 pWdaParams->pWdaContext = pWDA;
6205 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006206 /* store Params pass it to WDI */
6207 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006208 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6209 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 if(IS_WDI_STATUS_FAILURE(status))
6211 {
6212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6213 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6215 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006216 /* send response to UMAC*/
6217 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006218 }
6219 return CONVERT_WDI2VOS_STATUS(status);
6220
6221}
Jeff Johnson295189b2012-06-20 16:38:30 -07006222#endif
schang86c22c42013-03-13 18:41:24 -07006223
6224/*
6225 * FUNCTION: WDA_SetTxPowerCallBack
6226 * send the response to PE with power value received from WDI
6227 */
6228void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6229 void* pUserData)
6230{
6231 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6232 tWDA_CbContext *pWDA = NULL;
6233 tSirSetTxPowerReq *pTxPowerParams = NULL;
6234
6235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6236 "<------ %s ", __func__);
6237 if(NULL == pWdaParams)
6238 {
6239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6240 "%s: pWdaParams received NULL", __func__);
6241 VOS_ASSERT(0) ;
6242 return ;
6243 }
6244 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6245 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6246 if(NULL == pTxPowerParams)
6247 {
6248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6249 "%s: pTxPowerParams received NULL " ,__func__);
6250 VOS_ASSERT(0);
6251 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6252 vos_mem_free(pWdaParams);
6253 return ;
6254 }
6255
6256 /*need to free memory for the pointers used in the
6257 WDA Process.Set Max Tx Power Req function*/
6258 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6259 vos_mem_free(pWdaParams);
6260
6261 /* send response to UMAC*/
6262 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6263 return;
6264}
6265
6266/*
6267 * FUNCTION: WDA_ProcessSetTxPowerReq
6268 * Request to WDI to send set Tx Power Request
6269 */
6270 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6271 tSirSetTxPowerReq *txPowerParams)
6272{
6273 WDI_Status status = WDI_STATUS_SUCCESS;
6274 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6275 tWDA_ReqParams *pWdaParams = NULL;
6276
6277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6278 "------> %s ", __func__);
6279
6280 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6281 sizeof(WDI_SetTxPowerParamsType));
6282 if(NULL == wdiSetTxPowerParams)
6283 {
6284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6285 "%s: VOS MEM Alloc Failure", __func__);
6286 VOS_ASSERT(0);
6287 return VOS_STATUS_E_NOMEM;
6288 }
6289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6290 if(NULL == pWdaParams)
6291 {
6292 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6293 "%s: VOS MEM Alloc Failure", __func__);
6294 vos_mem_free(wdiSetTxPowerParams);
6295 VOS_ASSERT(0);
6296 return VOS_STATUS_E_NOMEM;
6297 }
6298 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6299 txPowerParams->bssIdx;
6300 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6301 txPowerParams->mwPower;
6302 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6303 pWdaParams->pWdaContext = pWDA;
6304 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6305 /* store Params pass it to WDI */
6306 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6307 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6308 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6309 if(IS_WDI_STATUS_FAILURE(status))
6310 {
6311 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6312 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6314 vos_mem_free(pWdaParams);
6315 /* send response to UMAC*/
6316 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6317 }
6318 return CONVERT_WDI2VOS_STATUS(status);
6319}
6320
Jeff Johnson295189b2012-06-20 16:38:30 -07006321/*
6322 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6323 * Free the memory. No need to send any response to PE in this case
6324 */
6325void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6326{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006327 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6328
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006330 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006331
6332 if(NULL == pWdaParams)
6333 {
6334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006335 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006336 VOS_ASSERT(0) ;
6337 return ;
6338 }
6339
6340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6341 vos_mem_free(pWdaParams->wdaMsgParam) ;
6342 vos_mem_free(pWdaParams);
6343
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 /*
6345 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6346 * so just free the request param here
6347 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 return ;
6349}
6350
Jeff Johnson295189b2012-06-20 16:38:30 -07006351/*
6352 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6353 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6354 */
6355VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6356 tP2pPsParams *pP2pPsConfigParams)
6357{
6358 WDI_Status status = WDI_STATUS_SUCCESS ;
6359 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6360 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6361 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006362 tWDA_ReqParams *pWdaParams = NULL;
6363
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006365 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 if(NULL == wdiSetP2PGONOAReqParam)
6367 {
6368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006370 VOS_ASSERT(0);
6371 return VOS_STATUS_E_NOMEM;
6372 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006373
6374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6375 if(NULL == pWdaParams)
6376 {
6377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006378 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006379 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006380 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006381 VOS_ASSERT(0);
6382 return VOS_STATUS_E_NOMEM;
6383 }
6384
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6386 pP2pPsConfigParams->opp_ps;
6387 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6388 pP2pPsConfigParams->ctWindow;
6389 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6390 pP2pPsConfigParams->count;
6391 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6392 pP2pPsConfigParams->duration;
6393 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6394 pP2pPsConfigParams->interval;
6395 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6396 pP2pPsConfigParams->single_noa_duration;
6397 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6398 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6401 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006402 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6403
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006405 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6406 pWdaParams->pWdaContext = pWDA;
6407
Jeff Johnson295189b2012-06-20 16:38:30 -07006408 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006409 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6410
Jeff Johnson295189b2012-06-20 16:38:30 -07006411 if(IS_WDI_STATUS_FAILURE(status))
6412 {
6413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6414 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6416 vos_mem_free(pWdaParams->wdaMsgParam);
6417 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 return CONVERT_WDI2VOS_STATUS(status);
6420
Jeff Johnson295189b2012-06-20 16:38:30 -07006421}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306422
6423#ifdef FEATURE_WLAN_TDLS
6424/*
6425 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6426 * Free the memory. No need to send any response to PE in this case
6427 */
6428void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_Status status, void* pUserData)
6429{
6430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6431 tWDA_CbContext *pWDA = NULL;
6432
6433
6434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6435 "<------ %s " ,__func__);
6436 if(NULL == pWdaParams)
6437 {
6438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6439 "%s: pWdaParams received NULL", __func__);
6440 VOS_ASSERT(0) ;
6441 return ;
6442 }
6443 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6444
6445 if(NULL == pWdaParams)
6446 {
6447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6448 "%s: pWdaParams received NULL", __func__);
6449 VOS_ASSERT(0) ;
6450 return ;
6451 }
6452 /* send response to UMAC*/
6453 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, NULL , 0) ;
6454
6455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6456 vos_mem_free(pWdaParams->wdaMsgParam) ;
6457 vos_mem_free(pWdaParams);
6458 return ;
6459}
6460
6461VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6462 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6463{
6464 WDI_Status status = WDI_STATUS_SUCCESS ;
6465 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6466 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6467 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6468 tWDA_ReqParams *pWdaParams = NULL;
6469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6470 "------> %s " ,__func__);
6471 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6472 {
6473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6474 "%s: VOS MEM Alloc Failure", __func__);
6475 VOS_ASSERT(0);
6476 return VOS_STATUS_E_NOMEM;
6477 }
6478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6479 if(NULL == pWdaParams)
6480 {
6481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6482 "%s: VOS MEM Alloc Failure", __func__);
6483 vos_mem_free(pTdlsLinkEstablishParams);
6484 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6485 VOS_ASSERT(0);
6486 return VOS_STATUS_E_NOMEM;
6487 }
6488 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
6489 pTdlsLinkEstablishParams->sta_idx;
6490 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
6491 pTdlsLinkEstablishParams->is_responder;
6492 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
6493 pTdlsLinkEstablishParams->uapsd_queues;
6494 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
6495 pTdlsLinkEstablishParams->max_sp;
6496 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
6497 pTdlsLinkEstablishParams->is_bufsta;
6498
6499 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6500 /* Store msg pointer from PE, as this will be used for response */
6501 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6502 /* store Params pass it to WDI */
6503 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6504 pWdaParams->pWdaContext = pWDA;
6505
6506 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6507 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6508 WDA_SetTDLSLinkEstablishReqParamsCallback,
6509 pWdaParams);
6510 if(IS_WDI_STATUS_FAILURE(status))
6511 {
6512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6513 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6515 vos_mem_free(pWdaParams->wdaMsgParam);
6516 vos_mem_free(pWdaParams);
6517 }
6518 return CONVERT_WDI2VOS_STATUS(status);
6519}
6520#endif
6521
6522
Jeff Johnson295189b2012-06-20 16:38:30 -07006523#ifdef WLAN_FEATURE_VOWIFI_11R
6524/*
6525 * FUNCTION: WDA_AggrAddTSReqCallback
6526 * send ADD AGGREGATED TS RSP back to PE
6527 */
6528void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6529{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6531 tWDA_CbContext *pWDA;
6532 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006535 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006536 if(NULL == pWdaParams)
6537 {
6538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006539 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006540 VOS_ASSERT(0) ;
6541 return ;
6542 }
6543
6544 pWDA = pWdaParams->pWdaContext;
6545 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006546
6547 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6548 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006549 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006551 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006552
6553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6554 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 return ;
6556}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006557/*
6558 * FUNCTION: WDA_ProcessAddTSReq
6559 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6560 */
6561VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6562 tAggrAddTsParams *pAggrAddTsReqParams)
6563{
6564 WDI_Status status = WDI_STATUS_SUCCESS ;
6565 int i;
6566 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006567 tWDA_ReqParams *pWdaParams = NULL;
6568
6569
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006571 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6573 sizeof(WDI_AggrAddTSReqParamsType)) ;
6574 if(NULL == wdiAggrAddTSReqParam)
6575 {
6576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006578 VOS_ASSERT(0);
6579 return VOS_STATUS_E_NOMEM;
6580 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006581
6582
6583 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6584 if(NULL == pWdaParams)
6585 {
6586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006587 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006588 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006589 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006590 VOS_ASSERT(0);
6591 return VOS_STATUS_E_NOMEM;
6592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006593 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6594 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6595 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6597 {
6598 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6599 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6600 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6602 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6603 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6604 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6605 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6606 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6607 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6608 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6609 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6610 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6611 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6612 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6613 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6614 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6615 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6616 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6618 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006619 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6620 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6621 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6622 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6623 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6624 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6625 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6626 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6627 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6628 pAggrAddTsReqParams->tspec[i].inactInterval;
6629 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6630 pAggrAddTsReqParams->tspec[i].suspendInterval;
6631 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6632 pAggrAddTsReqParams->tspec[i].svcStartTime;
6633 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6634 pAggrAddTsReqParams->tspec[i].minDataRate;
6635 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6636 pAggrAddTsReqParams->tspec[i].meanDataRate;
6637 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6638 pAggrAddTsReqParams->tspec[i].peakDataRate;
6639 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6640 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6641 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6642 pAggrAddTsReqParams->tspec[i].delayBound;
6643 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6644 pAggrAddTsReqParams->tspec[i].minPhyRate;
6645 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6646 pAggrAddTsReqParams->tspec[i].surplusBw;
6647 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6648 pAggrAddTsReqParams->tspec[i].mediumTime;
6649 }
6650
6651 /* TODO: tAggrAddTsParams doesn't have the following fields */
6652#if 0
6653 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6654 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6655 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6656 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6657#endif
6658 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6659
6660 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006661 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006663 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6664
6665 pWdaParams->pWdaContext = pWDA;
6666
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006668 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6669
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 if(IS_WDI_STATUS_FAILURE(status))
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6673 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6675 vos_mem_free(pWdaParams);
6676
6677 /* send the failure response back to PE*/
6678 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6679 {
6680 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6681 }
6682
6683 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6684 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006685 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 return CONVERT_WDI2VOS_STATUS(status) ;
6687}
6688#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006689/*
6690 * FUNCTION: WDA_EnterImpsReqCallback
6691 * send Enter IMPS RSP back to PE
6692 */
6693void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6694{
6695 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006697 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006698 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006699 return ;
6700}
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_ProcessEnterImpsReq
6703 * Request to WDI to Enter IMPS power state.
6704 */
6705VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6706{
6707 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006709 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 if(IS_WDI_STATUS_FAILURE(status))
6712 {
6713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6714 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006715 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 return CONVERT_WDI2VOS_STATUS(status) ;
6718}
Jeff Johnson295189b2012-06-20 16:38:30 -07006719/*
6720 * FUNCTION: WDA_ExitImpsReqCallback
6721 * send Exit IMPS RSP back to PE
6722 */
6723void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6724{
6725 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006727 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006728 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 return ;
6730}
Jeff Johnson295189b2012-06-20 16:38:30 -07006731/*
6732 * FUNCTION: WDA_ProcessExitImpsReq
6733 * Request to WDI to Exit IMPS power state.
6734 */
6735VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6736{
6737 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006739 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 if(IS_WDI_STATUS_FAILURE(status))
6742 {
6743 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6744 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006745 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return CONVERT_WDI2VOS_STATUS(status) ;
6748}
Jeff Johnson295189b2012-06-20 16:38:30 -07006749/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006750 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 * send Enter BMPS RSP back to PE
6752 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006753void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006754{
6755 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6756 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006757 tEnterBmpsParams *pEnterBmpsRspParams;
6758
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006760 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 if(NULL == pWdaParams)
6762 {
6763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006764 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 VOS_ASSERT(0) ;
6766 return ;
6767 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006768
6769 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6770 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6771
6772 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006773 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006774
6775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006777 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6778
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 return ;
6780}
Jeff Johnson295189b2012-06-20 16:38:30 -07006781/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006782 * FUNCTION: WDA_EnterBmpsReqCallback
6783 * Free memory and send Enter BMPS RSP back to PE.
6784 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
6785 */
6786void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6787{
6788 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6789 tWDA_CbContext *pWDA;
6790 tEnterBmpsParams *pEnterBmpsRspParams;
6791
6792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6793 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6794
6795 if(NULL == pWdaParams)
6796 {
6797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6798 "%s: pWdaParams received NULL", __func__);
6799 VOS_ASSERT(0);
6800 return;
6801 }
6802
6803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6804 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6805 pEnterBmpsRspParams->status = wdiStatus;
6806
6807 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6808 {
6809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6810 vos_mem_free(pWdaParams);
6811 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
6812 }
6813
6814 return;
6815}
6816/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 * FUNCTION: WDA_ProcessEnterBmpsReq
6818 * Request to WDI to Enter BMPS power state.
6819 */
6820VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6821 tEnterBmpsParams *pEnterBmpsReqParams)
6822{
6823 WDI_Status status = WDI_STATUS_SUCCESS;
6824 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6825 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6829 {
6830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006831 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 VOS_ASSERT(0);
6833 return VOS_STATUS_E_FAILURE;
6834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6836 if (NULL == wdiEnterBmpsReqParams)
6837 {
6838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006841 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6842 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 return VOS_STATUS_E_NOMEM;
6844 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6846 if (NULL == pWdaParams)
6847 {
6848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006849 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 VOS_ASSERT(0);
6851 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006852 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6853 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 return VOS_STATUS_E_NOMEM;
6855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006856 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6857 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6858 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6859 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 // For CCX and 11R Roaming
6861 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6862 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6863 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07006864 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
6865 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006866
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 /* Store param pointer as passed in by caller */
6868 /* store Params pass it to WDI */
6869 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006870 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006871 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07006873 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 if (IS_WDI_STATUS_FAILURE(status))
6875 {
6876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6877 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006879 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006880 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006881 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 return CONVERT_WDI2VOS_STATUS(status);
6884}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006885
6886
6887static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6888 WDI_Status wdiStatus,
6889 tExitBmpsParams *pExitBmpsReqParams)
6890{
6891 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6892
6893 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6894}
6895
6896
Jeff Johnson295189b2012-06-20 16:38:30 -07006897/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006898 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 * send Exit BMPS RSP back to PE
6900 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07006901void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006902{
6903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6904 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006905 tExitBmpsParams *pExitBmpsRspParams;
6906
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 == pWdaParams)
6910 {
6911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006912 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_ASSERT(0) ;
6914 return ;
6915 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006916
6917 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6918 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6919
6920 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006921 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006922
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6924 vos_mem_free(pWdaParams) ;
6925
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006926 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 return ;
6928}
Jeff Johnson295189b2012-06-20 16:38:30 -07006929/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07006930 * FUNCTION: WDA_ExitBmpsReqCallback
6931 * Free memory and send Exit BMPS RSP back to PE.
6932 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
6933 */
6934void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
6935{
6936 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6937 tWDA_CbContext *pWDA;
6938 tExitBmpsParams *pExitBmpsRspParams;
6939
6940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6941 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
6942
6943 if(NULL == pWdaParams)
6944 {
6945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6946 "%s: pWdaParams received NULL", __func__);
6947 VOS_ASSERT(0);
6948 return;
6949 }
6950
6951 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6952 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6953 pExitBmpsRspParams->status = wdiStatus;
6954
6955 if(IS_WDI_STATUS_FAILURE(wdiStatus))
6956 {
6957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6958 vos_mem_free(pWdaParams);
6959 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
6960 }
6961
6962 return;
6963}
6964/*
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 * FUNCTION: WDA_ProcessExitBmpsReq
6966 * Request to WDI to Exit BMPS power state.
6967 */
6968VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6969 tExitBmpsParams *pExitBmpsReqParams)
6970{
6971 WDI_Status status = WDI_STATUS_SUCCESS ;
6972 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6973 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6974 sizeof(WDI_ExitBmpsReqParamsType)) ;
6975 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006977 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 if(NULL == wdiExitBmpsReqParams)
6979 {
6980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006983 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 return VOS_STATUS_E_NOMEM;
6985 }
6986 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6987 if(NULL == pWdaParams)
6988 {
6989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006990 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 VOS_ASSERT(0);
6992 vos_mem_free(wdiExitBmpsReqParams);
6993 return VOS_STATUS_E_NOMEM;
6994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006996
6997 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6998
Yue Ma7f44bbe2013-04-12 11:47:39 -07006999 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7000 wdiExitBmpsReqParams->pUserData = pWdaParams;
7001
Jeff Johnson295189b2012-06-20 16:38:30 -07007002 /* Store param pointer as passed in by caller */
7003 /* store Params pass it to WDI */
7004 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7005 pWdaParams->pWdaContext = pWDA;
7006 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007008 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 if(IS_WDI_STATUS_FAILURE(status))
7010 {
7011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7012 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7014 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007015 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 return CONVERT_WDI2VOS_STATUS(status) ;
7018}
Jeff Johnson295189b2012-06-20 16:38:30 -07007019/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007020 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 * send Enter UAPSD RSP back to PE
7022 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007023void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007024{
7025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7026 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007027 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 if(NULL == pWdaParams)
7031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0) ;
7035 return ;
7036 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007037
7038 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7039 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7040
7041 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007042 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007043
Jeff Johnson295189b2012-06-20 16:38:30 -07007044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7045 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007046 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 return ;
7048}
Jeff Johnson295189b2012-06-20 16:38:30 -07007049/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007050 * FUNCTION: WDA_EnterUapsdReqCallback
7051 * Free memory and send Enter UAPSD RSP back to PE.
7052 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7053 */
7054void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7055{
7056 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7057 tWDA_CbContext *pWDA;
7058 tUapsdParams *pEnterUapsdRsqParams;
7059
7060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7061 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7062
7063 if(NULL == pWdaParams)
7064 {
7065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7066 "%s: pWdaParams received NULL", __func__);
7067 VOS_ASSERT(0);
7068 return;
7069 }
7070
7071 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7072 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7073 pEnterUapsdRsqParams->status = wdiStatus;
7074
7075 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7076 {
7077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7078 vos_mem_free(pWdaParams);
7079 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7080 }
7081
7082 return;
7083}
7084/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007085 * FUNCTION: WDA_ProcessEnterUapsdReq
7086 * Request to WDI to Enter UAPSD power state.
7087 */
7088VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7089 tUapsdParams *pEnterUapsdReqParams)
7090{
7091 WDI_Status status = WDI_STATUS_SUCCESS ;
7092 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7093 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7094 sizeof(WDI_EnterUapsdReqParamsType)) ;
7095 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007097 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 if(NULL == wdiEnterUapsdReqParams)
7099 {
7100 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007101 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 VOS_ASSERT(0);
7103 return VOS_STATUS_E_NOMEM;
7104 }
7105 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7106 if(NULL == pWdaParams)
7107 {
7108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007109 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 VOS_ASSERT(0);
7111 vos_mem_free(wdiEnterUapsdReqParams);
7112 return VOS_STATUS_E_NOMEM;
7113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7115 pEnterUapsdReqParams->beDeliveryEnabled;
7116 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7117 pEnterUapsdReqParams->beTriggerEnabled;
7118 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7119 pEnterUapsdReqParams->bkDeliveryEnabled;
7120 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7121 pEnterUapsdReqParams->bkTriggerEnabled;
7122 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7123 pEnterUapsdReqParams->viDeliveryEnabled;
7124 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7125 pEnterUapsdReqParams->viTriggerEnabled;
7126 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7127 pEnterUapsdReqParams->voDeliveryEnabled;
7128 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7129 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007130 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007131
Yue Ma7f44bbe2013-04-12 11:47:39 -07007132 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7133 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007134
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 /* Store param pointer as passed in by caller */
7136 /* store Params pass it to WDI */
7137 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7138 pWdaParams->pWdaContext = pWDA;
7139 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007140 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007141 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 if(IS_WDI_STATUS_FAILURE(status))
7143 {
7144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7145 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7146 vos_mem_free(pWdaParams->wdaMsgParam) ;
7147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7148 vos_mem_free(pWdaParams) ;
7149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007150 return CONVERT_WDI2VOS_STATUS(status) ;
7151}
Jeff Johnson295189b2012-06-20 16:38:30 -07007152/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007153 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007154 * send Exit UAPSD RSP back to PE
7155 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007156void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007157{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007158
7159 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7160 tWDA_CbContext *pWDA;
7161 tExitUapsdParams *pExitUapsdRspParams;
7162
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007164 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007165 if(NULL == pWdaParams)
7166 {
7167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007168 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007169 VOS_ASSERT(0);
7170 return;
7171 }
7172
7173 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7174 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7175
7176 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007177 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007178
7179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7180 vos_mem_free(pWdaParams) ;
7181
7182 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 return ;
7184}
Jeff Johnson295189b2012-06-20 16:38:30 -07007185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007186 * FUNCTION: WDA_ExitUapsdReqCallback
7187 * Free memory and send Exit UAPSD RSP back to PE.
7188 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7189 */
7190void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7191{
7192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7193 tWDA_CbContext *pWDA;
7194 tExitUapsdParams *pExitUapsdRspParams;
7195
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7197 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7198
7199 if(NULL == pWdaParams)
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7202 "%s: pWdaParams received NULL", __func__);
7203 VOS_ASSERT(0);
7204 return;
7205 }
7206
7207 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7208 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7209 pExitUapsdRspParams->status = wdiStatus;
7210
7211 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7212 {
7213 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7214 vos_mem_free(pWdaParams);
7215 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7216 }
7217
7218 return;
7219}
7220/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 * FUNCTION: WDA_ProcessExitUapsdReq
7222 * Request to WDI to Exit UAPSD power state.
7223 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007224VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7225 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007226{
7227 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007228 tWDA_ReqParams *pWdaParams ;
7229 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7230 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7231 sizeof(WDI_ExitUapsdReqParamsType)) ;
7232
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007234 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007235
7236 if(NULL == wdiExitUapsdReqParams)
7237 {
7238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007239 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007240 VOS_ASSERT(0);
7241 return VOS_STATUS_E_NOMEM;
7242 }
7243 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7244 if(NULL == pWdaParams)
7245 {
7246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007247 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007248 VOS_ASSERT(0);
7249 vos_mem_free(wdiExitUapsdReqParams);
7250 return VOS_STATUS_E_NOMEM;
7251 }
7252
7253 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007254 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7255 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007256
7257 /* Store param pointer as passed in by caller */
7258 /* store Params pass it to WDI */
7259 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7260 pWdaParams->pWdaContext = pWDA;
7261 pWdaParams->wdaMsgParam = pExitUapsdParams;
7262
Yue Ma7f44bbe2013-04-12 11:47:39 -07007263 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007264 if(IS_WDI_STATUS_FAILURE(status))
7265 {
7266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7267 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007268 vos_mem_free(pWdaParams->wdaMsgParam) ;
7269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7270 vos_mem_free(pWdaParams) ;
7271
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 return CONVERT_WDI2VOS_STATUS(status) ;
7274}
7275
Jeff Johnson295189b2012-06-20 16:38:30 -07007276/*
7277 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7278 *
7279 */
7280void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7281{
7282 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007284 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007285 if(NULL == pWdaParams)
7286 {
7287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007288 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 VOS_ASSERT(0) ;
7290 return ;
7291 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007292 if( pWdaParams != NULL )
7293 {
7294 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7295 {
7296 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7297 }
7298 if( pWdaParams->wdaMsgParam != NULL )
7299 {
7300 vos_mem_free(pWdaParams->wdaMsgParam) ;
7301 }
7302 vos_mem_free(pWdaParams) ;
7303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 return ;
7305}
Jeff Johnson295189b2012-06-20 16:38:30 -07007306/*
7307 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7308 * Request to WDI to set the power save params at start.
7309 */
7310VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7311 tSirPowerSaveCfg *pPowerSaveCfg)
7312{
7313 WDI_Status status = WDI_STATUS_SUCCESS ;
7314 tHalCfg *tlvStruct = NULL ;
7315 tANI_U8 *tlvStructStart = NULL ;
7316 v_PVOID_t *configParam;
7317 tANI_U32 configParamSize;
7318 tANI_U32 *configDataValue;
7319 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7320 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007322 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7324 {
7325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007326 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007328 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 return VOS_STATUS_E_FAILURE;
7330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007331 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7332 if (NULL == wdiPowerSaveCfg)
7333 {
7334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007336 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007337 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007338 return VOS_STATUS_E_NOMEM;
7339 }
7340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7341 if(NULL == pWdaParams)
7342 {
7343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 VOS_ASSERT(0);
7346 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007347 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007348 return VOS_STATUS_E_NOMEM;
7349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7351 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 if(NULL == configParam)
7353 {
7354 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007355 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007356 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 vos_mem_free(pWdaParams);
7358 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007359 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 return VOS_STATUS_E_NOMEM;
7361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 vos_mem_set(configParam, configParamSize, 0);
7363 wdiPowerSaveCfg->pConfigBuffer = configParam;
7364 tlvStruct = (tHalCfg *)configParam;
7365 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7367 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7368 tlvStruct->length = sizeof(tANI_U32);
7369 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7370 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7372 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007373 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7374 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7375 tlvStruct->length = sizeof(tANI_U32);
7376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7377 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7379 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7381 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7382 tlvStruct->length = sizeof(tANI_U32);
7383 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7384 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7386 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7388 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7389 tlvStruct->length = sizeof(tANI_U32);
7390 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7391 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7393 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7395 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7396 tlvStruct->length = sizeof(tANI_U32);
7397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7398 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7400 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7402 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7403 tlvStruct->length = sizeof(tANI_U32);
7404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7405 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7407 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7409 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7410 tlvStruct->length = sizeof(tANI_U32);
7411 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7412 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7414 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7416 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7417 tlvStruct->length = sizeof(tANI_U32);
7418 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7419 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7420 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7421 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007422 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7423 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7424 tlvStruct->length = sizeof(tANI_U32);
7425 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7426 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7427 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7428 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7430 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7431 tlvStruct->length = sizeof(tANI_U32);
7432 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7433 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007434 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7435 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7437 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7438 tlvStruct->length = sizeof(tANI_U32);
7439 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7440 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7442 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007443 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 /* store Params pass it to WDI */
7446 pWdaParams->wdaMsgParam = configParam;
7447 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7448 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7450 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 if(IS_WDI_STATUS_FAILURE(status))
7452 {
7453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7454 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7455 vos_mem_free(pWdaParams->wdaMsgParam);
7456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7457 vos_mem_free(pWdaParams);
7458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 return CONVERT_WDI2VOS_STATUS(status);
7461}
Jeff Johnson295189b2012-06-20 16:38:30 -07007462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007463 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 *
7465 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007466void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007467{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007468 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7469
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007471 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007472
7473 if(NULL == pWdaParams)
7474 {
7475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7476 "%s: pWdaParams received NULL", __func__);
7477 VOS_ASSERT(0);
7478 return ;
7479 }
7480
7481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 vos_mem_free(pWdaParams);
7483
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 return ;
7485}
Jeff Johnson295189b2012-06-20 16:38:30 -07007486/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007487 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7488 * Free memory.
7489 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7490 */
7491void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7492{
7493 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7494
7495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7496 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7497
7498 if(NULL == pWdaParams)
7499 {
7500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7501 "%s: pWdaParams received NULL", __func__);
7502 VOS_ASSERT(0);
7503 return;
7504 }
7505
7506 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7507 {
7508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7509 vos_mem_free(pWdaParams);
7510 }
7511
7512 return;
7513}
7514/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 * FUNCTION: WDA_SetUapsdAcParamsReq
7516 * Request to WDI to set the UAPSD params for an ac (sta mode).
7517 */
7518VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7519 tUapsdInfo *pUapsdInfo)
7520{
7521 WDI_Status status = WDI_STATUS_SUCCESS;
7522 tWDA_CbContext *pWDA = NULL ;
7523 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7524 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7525 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7526 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007528 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 if(NULL == wdiUapsdParams)
7530 {
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 VOS_ASSERT(0);
7534 return VOS_STATUS_E_NOMEM;
7535 }
7536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7537 if(NULL == pWdaParams)
7538 {
7539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007541 VOS_ASSERT(0);
7542 vos_mem_free(wdiUapsdParams);
7543 return VOS_STATUS_E_NOMEM;
7544 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007545 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7546 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7547 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7548 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7549 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7550 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007551 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7552 wdiUapsdParams->pUserData = pWdaParams;
7553
Jeff Johnson295189b2012-06-20 16:38:30 -07007554 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 pWdaParams->pWdaContext = pWDA;
7556 /* Store param pointer as passed in by caller */
7557 pWdaParams->wdaMsgParam = pUapsdInfo;
7558 /* store Params pass it to WDI */
7559 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007560 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007561 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007562 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 if(IS_WDI_STATUS_FAILURE(status))
7564 {
7565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7566 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7568 vos_mem_free(pWdaParams);
7569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007570 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7571 return VOS_STATUS_SUCCESS;
7572 else
7573 return VOS_STATUS_E_FAILURE;
7574
Jeff Johnson295189b2012-06-20 16:38:30 -07007575}
7576/*
7577 * FUNCTION: WDA_ClearUapsdAcParamsReq
7578 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7579 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7580 * and again enter the UPASD with the modified params. Hence the disable
7581 * function was kept empty.
7582 *
7583 */
7584VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7585{
7586 /* do nothing */
7587 return VOS_STATUS_SUCCESS;
7588}
Jeff Johnson295189b2012-06-20 16:38:30 -07007589/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007590 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007591 *
7592 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007593void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007594{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007595 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7596
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007598 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007599
7600 if(NULL == pWdaParams)
7601 {
7602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007603 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007604 VOS_ASSERT(0) ;
7605 return ;
7606 }
7607
7608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7609 vos_mem_free(pWdaParams->wdaMsgParam);
7610 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007611
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 //print a msg, nothing else to do
7613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007614 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007615 return ;
7616}
Jeff Johnson295189b2012-06-20 16:38:30 -07007617/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007618 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7619 * Free memory.
7620 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7621 */
7622void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7623{
7624 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7625
7626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7627 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7628
7629 if(NULL == pWdaParams)
7630 {
7631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7632 "%s: pWdaParams received NULL", __func__);
7633 VOS_ASSERT(0);
7634 return;
7635 }
7636
7637 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7638 {
7639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7640 vos_mem_free(pWdaParams->wdaMsgParam);
7641 vos_mem_free(pWdaParams);
7642 }
7643
7644 return;
7645}
7646/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007647 * FUNCTION: WDA_UpdateUapsdParamsReq
7648 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7649 */
7650VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7651 tUpdateUapsdParams* pUpdateUapsdInfo)
7652{
7653 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007654 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007655 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7656 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7657 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007658 tWDA_ReqParams *pWdaParams = NULL;
7659
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007661 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007662 if(NULL == wdiUpdateUapsdParams)
7663 {
7664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 VOS_ASSERT(0);
7667 return VOS_STATUS_E_NOMEM;
7668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7670 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7671 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007672 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
7673 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007674
7675 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7676 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 {
7678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007679 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007680 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007681 vos_mem_free(pUpdateUapsdInfo);
7682 vos_mem_free(wdiUpdateUapsdParams);
7683 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007686 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007688 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7689 pWdaParams->pWdaContext = pWDA;
7690
Jeff Johnson43971f52012-07-17 12:26:56 -07007691 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007692 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007693 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007694
Jeff Johnson43971f52012-07-17 12:26:56 -07007695 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 {
7697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7698 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007699 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7701 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007702 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007704 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007705}
Jeff Johnson295189b2012-06-20 16:38:30 -07007706/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007707 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 *
7709 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007710void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007711{
7712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007714 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 if(WDI_STATUS_SUCCESS != wdiStatus)
7716 {
7717 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007718 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007719 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007720 if(NULL == pWdaParams)
7721 {
7722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007723 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_ASSERT(0) ;
7725 return ;
7726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007727 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7728 vos_mem_free(pWdaParams->wdaMsgParam);
7729 vos_mem_free(pWdaParams);
7730 return ;
7731}
Jeff Johnson295189b2012-06-20 16:38:30 -07007732/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007733 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
7734 * Free memory.
7735 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
7736 */
7737void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
7738{
7739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7740
7741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7742 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7743
7744 if(NULL == pWdaParams)
7745 {
7746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7747 "%s: pWdaParams received NULL", __func__);
7748 VOS_ASSERT(0);
7749 return;
7750 }
7751
7752 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7753 {
7754 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7755 vos_mem_free(pWdaParams->wdaMsgParam);
7756 vos_mem_free(pWdaParams);
7757 }
7758
7759 return;
7760}
7761/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007762 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7763 *
7764 */
7765VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7766 tSirWlanSetRxpFilters *pWlanSuspendParam)
7767{
Jeff Johnson295189b2012-06-20 16:38:30 -07007768 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007769 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7771 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7772 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7773 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007775 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007776 if(NULL == wdiRxpFilterParams)
7777 {
7778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 VOS_ASSERT(0);
7781 vos_mem_free(pWlanSuspendParam);
7782 return VOS_STATUS_E_NOMEM;
7783 }
7784 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7785 if(NULL == pWdaParams)
7786 {
7787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007788 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 VOS_ASSERT(0);
7790 vos_mem_free(wdiRxpFilterParams);
7791 vos_mem_free(pWlanSuspendParam);
7792 return VOS_STATUS_E_NOMEM;
7793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7795 pWlanSuspendParam->setMcstBcstFilter;
7796 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7797 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7798
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
7800 wdiRxpFilterParams->pUserData = pWdaParams;
7801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 pWdaParams->pWdaContext = pWDA;
7803 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7804 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007805 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007806 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007808 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 {
7810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7811 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007812 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7814 vos_mem_free(pWdaParams->wdaMsgParam);
7815 vos_mem_free(pWdaParams);
7816 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007817 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007818}
Jeff Johnson295189b2012-06-20 16:38:30 -07007819/*
7820 * FUNCTION: WDA_WdiIndicationCallback
7821 *
7822 */
7823void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7824 void* pUserData)
7825{
7826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007827 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007828}
Jeff Johnson295189b2012-06-20 16:38:30 -07007829/*
7830 * FUNCTION: WDA_ProcessWlanSuspendInd
7831 *
7832 */
7833VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7834 tSirWlanSuspendParam *pWlanSuspendParam)
7835{
7836 WDI_Status wdiStatus;
7837 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007839 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007840 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7841 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7842 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7843 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7846 if(WDI_STATUS_PENDING == wdiStatus)
7847 {
7848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007849 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007850 }
7851 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7852 {
7853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007854 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 vos_mem_free(pWlanSuspendParam);
7857 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7858}
7859
Chet Lanctot186b5732013-03-18 10:26:30 -07007860#ifdef WLAN_FEATURE_11W
7861/*
7862 * FUNCTION: WDA_ProcessExcludeUnecryptInd
7863 *
7864 */
7865VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
7866 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
7867{
7868 WDI_Status wdiStatus;
7869 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
7870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7871 "------> %s ", __func__);
7872
7873 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
7874 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
7875 sizeof(tSirMacAddr));
7876
7877 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
7878 wdiExclUnencryptParams.pUserData = pWDA;
7879
7880 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
7881 if(WDI_STATUS_PENDING == wdiStatus)
7882 {
7883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7884 "Pending received for %s:%d ", __func__, __LINE__ );
7885 }
7886 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7887 {
7888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7889 "Failure in %s:%d ", __func__, __LINE__ );
7890 }
7891 vos_mem_free(pExclUnencryptParam);
7892 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7893}
7894#endif
7895
Jeff Johnson295189b2012-06-20 16:38:30 -07007896/*
7897 * FUNCTION: WDA_ProcessWlanResumeCallback
7898 *
7899 */
7900void WDA_ProcessWlanResumeCallback(
7901 WDI_SuspendResumeRspParamsType *resumeRspParams,
7902 void* pUserData)
7903{
7904 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007907 if(NULL == pWdaParams)
7908 {
7909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007910 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 VOS_ASSERT(0) ;
7912 return ;
7913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7915 {
7916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007917 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7920 vos_mem_free(pWdaParams->wdaMsgParam);
7921 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 return ;
7923}
Jeff Johnson295189b2012-06-20 16:38:30 -07007924/*
7925 * FUNCTION: WDA_ProcessWlanResumeReq
7926 *
7927 */
7928VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7929 tSirWlanResumeParam *pWlanResumeParam)
7930{
7931 WDI_Status wdiStatus;
7932 WDI_ResumeParamsType *wdiResumeParams =
7933 (WDI_ResumeParamsType *)vos_mem_malloc(
7934 sizeof(WDI_ResumeParamsType) ) ;
7935 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007937 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007938 if(NULL == wdiResumeParams)
7939 {
7940 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007941 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 VOS_ASSERT(0);
7943 return VOS_STATUS_E_NOMEM;
7944 }
7945 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7946 if(NULL == pWdaParams)
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 VOS_ASSERT(0);
7951 vos_mem_free(wdiResumeParams);
7952 return VOS_STATUS_E_NOMEM;
7953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7955 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 wdiResumeParams->wdiReqStatusCB = NULL;
7958 pWdaParams->wdaMsgParam = pWlanResumeParam;
7959 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7960 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007961 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7962 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7963 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007964 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7965 {
7966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7967 "Failure in Host Resume REQ WDI API, free all the memory " );
7968 VOS_ASSERT(0);
7969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7970 vos_mem_free(pWdaParams->wdaMsgParam);
7971 vos_mem_free(pWdaParams);
7972 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7974}
7975
Jeff Johnson295189b2012-06-20 16:38:30 -07007976/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007977 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 *
7979 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007980void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007981{
7982 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 if(NULL == pWdaParams)
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007988 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 VOS_ASSERT(0) ;
7990 return ;
7991 }
7992
7993 vos_mem_free(pWdaParams->wdaMsgParam) ;
7994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7995 vos_mem_free(pWdaParams) ;
7996 /*
7997 * No respone required for SetBeaconFilter req so just free the request
7998 * param here
7999 */
8000
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 return ;
8002}
Jeff Johnson295189b2012-06-20 16:38:30 -07008003/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008004 * FUNCTION: WDA_SetBeaconFilterReqCallback
8005 * Free memory.
8006 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8007 */
8008void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8009{
8010 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8011
8012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8013 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8014
8015 if(NULL == pWdaParams)
8016 {
8017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8018 "%s: pWdaParams received NULL", __func__);
8019 VOS_ASSERT(0);
8020 return;
8021 }
8022
8023 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8024 {
8025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8026 vos_mem_free(pWdaParams->wdaMsgParam);
8027 vos_mem_free(pWdaParams);
8028 }
8029
8030 return;
8031}
8032/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 * FUNCTION: WDA_SetBeaconFilterReq
8034 * Request to WDI to send the beacon filtering related information.
8035 */
8036VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8037 tBeaconFilterMsg* pBeaconFilterInfo)
8038{
8039 WDI_Status status = WDI_STATUS_SUCCESS;
8040 tANI_U8 *dstPtr, *srcPtr;
8041 tANI_U8 filterLength;
8042 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8043 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8044 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8045 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 if(NULL == wdiBeaconFilterInfo)
8049 {
8050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 VOS_ASSERT(0);
8053 return VOS_STATUS_E_NOMEM;
8054 }
8055 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8056 if(NULL == pWdaParams)
8057 {
8058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008059 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 VOS_ASSERT(0);
8061 vos_mem_free(wdiBeaconFilterInfo);
8062 return VOS_STATUS_E_NOMEM;
8063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8065 pBeaconFilterInfo->beaconInterval;
8066 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8067 pBeaconFilterInfo->capabilityInfo;
8068 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8069 pBeaconFilterInfo->capabilityMask;
8070 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008071
8072 //Fill the BssIdx
8073 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8074
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 //Fill structure with info contained in the beaconFilterTable
8076 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8077 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8078 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8079 if(WDI_BEACON_FILTER_LEN < filterLength)
8080 {
8081 filterLength = WDI_BEACON_FILTER_LEN;
8082 }
8083 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008084 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8085 wdiBeaconFilterInfo->pUserData = pWdaParams;
8086
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 /* Store param pointer as passed in by caller */
8088 /* store Params pass it to WDI */
8089 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8090 pWdaParams->pWdaContext = pWDA;
8091 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8092
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008094 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 if(IS_WDI_STATUS_FAILURE(status))
8096 {
8097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8098 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8099 vos_mem_free(pWdaParams->wdaMsgParam) ;
8100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8101 vos_mem_free(pWdaParams) ;
8102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 return CONVERT_WDI2VOS_STATUS(status) ;
8104}
Jeff Johnson295189b2012-06-20 16:38:30 -07008105/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008106 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 *
8108 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008109void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008110{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008111 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8112
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008114 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008115
8116 if(NULL == pWdaParams)
8117 {
8118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008119 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008120 VOS_ASSERT(0) ;
8121 return ;
8122 }
8123
8124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8125 vos_mem_free(pWdaParams->wdaMsgParam);
8126 vos_mem_free(pWdaParams);
8127
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 //print a msg, nothing else to do
8129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008130 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008131 return ;
8132}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008133/*
8134 * FUNCTION: WDA_RemBeaconFilterReqCallback
8135 * Free memory.
8136 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8137 */
8138void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8139{
8140 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8141
8142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8143 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8144
8145 if(NULL == pWdaParams)
8146 {
8147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8148 "%s: pWdaParams received NULL", __func__);
8149 VOS_ASSERT(0);
8150 return;
8151 }
8152
8153 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8154 {
8155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8156 vos_mem_free(pWdaParams->wdaMsgParam);
8157 vos_mem_free(pWdaParams);
8158 }
8159
8160 return;
8161}
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 // TODO: PE does not have this feature for now implemented,
8163 // but the support for removing beacon filter exists between
8164 // HAL and FW. This function can be called whenever PE defines
8165 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008166/*
8167 * FUNCTION: WDA_RemBeaconFilterReq
8168 * Request to WDI to send the removal of beacon filtering related information.
8169 */
8170VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8171 tRemBeaconFilterMsg* pBeaconFilterInfo)
8172{
8173 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008174 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8176 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8177 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008178 tWDA_ReqParams *pWdaParams ;
8179
Jeff Johnson295189b2012-06-20 16:38:30 -07008180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008181 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008182 if(NULL == wdiBeaconFilterInfo)
8183 {
8184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008185 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008186 VOS_ASSERT(0);
8187 return VOS_STATUS_E_NOMEM;
8188 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8190 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 {
8192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008194 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008195 vos_mem_free(wdiBeaconFilterInfo);
8196 vos_mem_free(pBeaconFilterInfo);
8197 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008198 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008199
8200 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8201 pBeaconFilterInfo->ucIeCount;
8202 //Fill structure with info contained in the ucRemIeId
8203 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8204 pBeaconFilterInfo->ucRemIeId,
8205 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8206 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8207 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008208
8209 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008210 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008211 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008212 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8213
8214 pWdaParams->pWdaContext = pWDA;
8215
Jeff Johnson43971f52012-07-17 12:26:56 -07008216 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008217 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008218 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 {
8220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8221 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008222 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8224 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008225 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008227 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008228}
Jeff Johnson295189b2012-06-20 16:38:30 -07008229/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008230 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 *
8232 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008233void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008234{
8235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008237 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008238 if(NULL == pWdaParams)
8239 {
8240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008241 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008242 VOS_ASSERT(0) ;
8243 return ;
8244 }
8245
8246 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8247 vos_mem_free(pWdaParams) ;
8248
Jeff Johnson295189b2012-06-20 16:38:30 -07008249 return ;
8250}
Jeff Johnson295189b2012-06-20 16:38:30 -07008251/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008252 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8253 * Free memory.
8254 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8255 */
8256void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8257{
8258 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8259
8260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8261 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8262
8263 if(NULL == pWdaParams)
8264 {
8265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8266 "%s: pWdaParams received NULL", __func__);
8267 VOS_ASSERT(0);
8268 return;
8269 }
8270
8271 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8272 {
8273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8274 vos_mem_free(pWdaParams);
8275 }
8276
8277 return;
8278}
8279/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 * FUNCTION: WDA_SetRSSIThresholdsReq
8281 * Request to WDI to set the RSSI thresholds (sta mode).
8282 */
8283VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8284{
8285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008286 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 tWDA_CbContext *pWDA = NULL ;
8288 v_PVOID_t pVosContext = NULL;
8289 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8290 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8291 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8292 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008294 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 if(NULL == wdiRSSIThresholdsInfo)
8296 {
8297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008299 VOS_ASSERT(0);
8300 return VOS_STATUS_E_NOMEM;
8301 }
8302 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8303 if(NULL == pWdaParams)
8304 {
8305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 VOS_ASSERT(0);
8308 vos_mem_free(wdiRSSIThresholdsInfo);
8309 return VOS_STATUS_E_NOMEM;
8310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8313 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8314 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8316 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8317 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8319 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8320 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008321 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8322 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8324 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8325
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 /* Store param pointer as passed in by caller */
8327 /* store Params pass it to WDI */
8328 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8329 pWdaParams->pWdaContext = pWDA;
8330 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008331 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008332 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008333 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 {
8335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8336 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008337 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008338 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8339 vos_mem_free(pWdaParams) ;
8340 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008341 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008342
8343}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008344/*
Yue Madb90ac12013-04-04 13:39:13 -07008345 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 *
8347 */
Yue Madb90ac12013-04-04 13:39:13 -07008348void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008349{
8350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8351
8352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008353 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 if(NULL == pWdaParams)
8355 {
8356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008357 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 VOS_ASSERT(0) ;
8359 return ;
8360 }
8361
8362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8363 vos_mem_free(pWdaParams->wdaMsgParam);
8364 vos_mem_free(pWdaParams) ;
8365
8366 //print a msg, nothing else to do
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008368 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 return ;
8370}
Jeff Johnson295189b2012-06-20 16:38:30 -07008371/*
Yue Madb90ac12013-04-04 13:39:13 -07008372 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008373 * Free memory.
8374 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008375 */
8376void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8377{
8378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8379
8380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8381 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8382
8383 if(NULL == pWdaParams)
8384 {
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8386 "%s: Invalid pWdaParams pointer", __func__);
8387 VOS_ASSERT(0);
8388 return;
8389 }
8390
8391 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8392 {
8393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8394 vos_mem_free(pWdaParams->wdaMsgParam);
8395 vos_mem_free(pWdaParams);
8396 }
8397
8398 return;
8399}
8400/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 * FUNCTION: WDA_ProcessHostOffloadReq
8402 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8403 * to broadcast traffic (sta mode).
8404 */
8405VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8406 tSirHostOffloadReq *pHostOffloadParams)
8407{
8408 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008409 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8411 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8412 sizeof(WDI_HostOffloadReqParamsType)) ;
8413 tWDA_ReqParams *pWdaParams ;
8414
8415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008416 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008417
8418 if(NULL == wdiHostOffloadInfo)
8419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 VOS_ASSERT(0);
8423 return VOS_STATUS_E_NOMEM;
8424 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8426 if(NULL == pWdaParams)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_ASSERT(0);
8431 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008432 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008433 return VOS_STATUS_E_NOMEM;
8434 }
8435
8436 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8437 pHostOffloadParams->offloadType;
8438 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8439 pHostOffloadParams->enableOrDisable;
8440
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008441 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8442 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8443
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8445 {
8446 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8447 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8448 pHostOffloadParams->params.hostIpv4Addr,
8449 4);
8450 break;
8451 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8452 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8453 pHostOffloadParams->params.hostIpv6Addr,
8454 16);
8455 break;
8456 case SIR_IPV6_NS_OFFLOAD:
8457 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8458 pHostOffloadParams->params.hostIpv6Addr,
8459 16);
8460
8461#ifdef WLAN_NS_OFFLOAD
8462 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8463 {
8464 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8465 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8466 16);
8467 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8468 }
8469 else
8470 {
8471 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8472 }
8473
8474 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8475 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8476 16);
8477 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8478 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8479 6);
8480
8481 //Only two are supported so let's go through them without a loop
8482 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8483 {
8484 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8485 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8486 16);
8487 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8488 }
8489 else
8490 {
8491 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8492 }
8493
8494 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8495 {
8496 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8497 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8498 16);
8499 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8500 }
8501 else
8502 {
8503 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8504 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308505 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8506 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 break;
8508#endif //WLAN_NS_OFFLOAD
8509 default:
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "No Handling for Offload Type %x in WDA "
8513 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8514 //WDA_VOS_ASSERT(0) ;
8515 }
8516 }
Yue Madb90ac12013-04-04 13:39:13 -07008517 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8518 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008519
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008521 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008522 /* store Params pass it to WDI */
8523 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8524 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008525
Jeff Johnson295189b2012-06-20 16:38:30 -07008526
Jeff Johnson43971f52012-07-17 12:26:56 -07008527 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008528 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008529
Jeff Johnson43971f52012-07-17 12:26:56 -07008530 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008531 {
8532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8533 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008534 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8536 vos_mem_free(pWdaParams->wdaMsgParam);
8537 vos_mem_free(pWdaParams) ;
8538 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008539 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008540
8541}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008542/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008543 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 *
8545 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008546void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008547{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8549
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008551 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008552
8553 if(NULL == pWdaParams)
8554 {
8555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008556 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008557 VOS_ASSERT(0) ;
8558 return ;
8559 }
8560
8561 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8562 vos_mem_free(pWdaParams->wdaMsgParam);
8563 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008564
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 //print a msg, nothing else to do
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008567 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 return ;
8569}
Jeff Johnson295189b2012-06-20 16:38:30 -07008570/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008571 * FUNCTION: WDA_KeepAliveReqCallback
8572 * Free memory.
8573 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8574 */
8575void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8576{
8577 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8578
8579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8580 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8581
8582 if(NULL == pWdaParams)
8583 {
8584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8585 "%s: pWdaParams received NULL", __func__);
8586 VOS_ASSERT(0);
8587 return;
8588 }
8589
8590 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8591 {
8592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8593 vos_mem_free(pWdaParams->wdaMsgParam);
8594 vos_mem_free(pWdaParams);
8595 }
8596
8597 return;
8598}
8599/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008600 * FUNCTION: WDA_ProcessKeepAliveReq
8601 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8602 * wakeup due to broadcast traffic (sta mode).
8603 */
8604VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8605 tSirKeepAliveReq *pKeepAliveParams)
8606{
8607 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008608 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008609 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8610 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8611 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008612 tWDA_ReqParams *pWdaParams;
8613
Jeff Johnson295189b2012-06-20 16:38:30 -07008614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008615 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008616 if(NULL == wdiKeepAliveInfo)
8617 {
8618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008619 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 return VOS_STATUS_E_NOMEM;
8623 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008624
8625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8626 if(NULL == pWdaParams)
8627 {
8628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008629 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008630 VOS_ASSERT(0);
8631 vos_mem_free(wdiKeepAliveInfo);
8632 vos_mem_free(pKeepAliveParams);
8633 return VOS_STATUS_E_NOMEM;
8634 }
8635
Jeff Johnson295189b2012-06-20 16:38:30 -07008636 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8637 pKeepAliveParams->packetType;
8638 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8639 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008640
8641 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8642 pKeepAliveParams->bssId,
8643 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008644
8645 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8646 {
8647 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8648 pKeepAliveParams->hostIpv4Addr,
8649 SIR_IPV4_ADDR_LEN);
8650 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8651 pKeepAliveParams->destIpv4Addr,
8652 SIR_IPV4_ADDR_LEN);
8653 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8654 pKeepAliveParams->destMacAddr,
8655 SIR_MAC_ADDR_LEN);
8656 }
8657 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
8658 {
8659 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8660 SIR_IPV4_ADDR_LEN,
8661 0);
8662 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
8663 SIR_IPV4_ADDR_LEN,
8664 0);
8665 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
8666 SIR_MAC_ADDR_LEN,
8667 0);
8668 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008669 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
8670 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008671
Jeff Johnson295189b2012-06-20 16:38:30 -07008672 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008673 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008674 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008675 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
8676 pWdaParams->pWdaContext = pWDA;
8677
Jeff Johnson295189b2012-06-20 16:38:30 -07008678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
8679 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
8680 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
8681 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
8682 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
8684 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
8685 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
8686 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
8687 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
8688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8689 "WDA DMAC : %d:%d:%d:%d:%d:%d",
8690 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
8691 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
8692 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
8693 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
8694 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
8695 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
8696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8697 "TimePeriod %d PacketType %d",
8698 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
8699 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07008700 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008701 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008702
Jeff Johnson43971f52012-07-17 12:26:56 -07008703 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 {
8705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8706 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008707 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8709 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008710 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008712 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008713
8714}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008715/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008716 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008717 *
8718 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008719void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008720 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
8721 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008722{
8723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008725 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008726 if(NULL == pWdaParams)
8727 {
8728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008729 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 VOS_ASSERT(0) ;
8731 return ;
8732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8734 vos_mem_free(pWdaParams->wdaMsgParam);
8735 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 return ;
8737}
Jeff Johnson295189b2012-06-20 16:38:30 -07008738/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008739 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
8740 * Free memory.
8741 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
8742 */
8743void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8744{
8745 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8746
8747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8748 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8749
8750 if(NULL == pWdaParams)
8751 {
8752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8753 "%s: pWdaParams received NULL", __func__);
8754 VOS_ASSERT(0);
8755 return;
8756 }
8757
8758 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8759 {
8760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8761 vos_mem_free(pWdaParams->wdaMsgParam);
8762 vos_mem_free(pWdaParams);
8763 }
8764
8765 return;
8766}
8767
8768/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008769 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
8770 * Request to WDI to add WOWL Bcast pattern
8771 */
8772VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
8773 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
8774{
8775 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008776 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008777 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
8778 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
8779 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
8780 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008782 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 if(NULL == wdiWowlAddBcPtrnInfo)
8784 {
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 VOS_ASSERT(0);
8788 return VOS_STATUS_E_NOMEM;
8789 }
8790 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8791 if(NULL == pWdaParams)
8792 {
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008794 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 VOS_ASSERT(0);
8796 vos_mem_free(wdiWowlAddBcPtrnInfo);
8797 return VOS_STATUS_E_NOMEM;
8798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
8800 pWowlAddBcPtrnParams->ucPatternId;
8801 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
8802 pWowlAddBcPtrnParams->ucPatternByteOffset;
8803 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
8804 pWowlAddBcPtrnParams->ucPatternMaskSize;
8805 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
8806 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07008807 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
8808 {
8809 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8810 pWowlAddBcPtrnParams->ucPattern,
8811 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
8812 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8813 pWowlAddBcPtrnParams->ucPatternMask,
8814 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
8815 }
8816 else
8817 {
8818 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
8819 pWowlAddBcPtrnParams->ucPattern,
8820 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8821 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
8822 pWowlAddBcPtrnParams->ucPatternMask,
8823 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8824
8825 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
8826 pWowlAddBcPtrnParams->ucPatternExt,
8827 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8828 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
8829 pWowlAddBcPtrnParams->ucPatternMaskExt,
8830 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
8831 }
8832
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008833 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
8834 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
8835
Yue Ma7f44bbe2013-04-12 11:47:39 -07008836 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
8837 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008838 /* Store param pointer as passed in by caller */
8839 /* store Params pass it to WDI */
8840 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
8841 pWdaParams->pWdaContext = pWDA;
8842 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008843 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008844 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008845 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008846 {
8847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8848 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008849 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008850 vos_mem_free(pWdaParams->wdaMsgParam) ;
8851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8852 vos_mem_free(pWdaParams) ;
8853 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008854 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008855
8856}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008857/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008858 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008859 *
8860 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008861void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008862 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
8863 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008864{
8865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008867 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008868 if(NULL == pWdaParams)
8869 {
8870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008871 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 VOS_ASSERT(0) ;
8873 return ;
8874 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008875 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8876 vos_mem_free(pWdaParams->wdaMsgParam);
8877 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008878 return ;
8879}
Jeff Johnson295189b2012-06-20 16:38:30 -07008880/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008881 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
8882 * Free memory.
8883 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
8884 */
8885void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
8886{
8887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8888
8889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8890 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8891
8892 if(NULL == pWdaParams)
8893 {
8894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8895 "%s: pWdaParams received NULL", __func__);
8896 VOS_ASSERT(0);
8897 return;
8898 }
8899
8900 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8901 {
8902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8903 vos_mem_free(pWdaParams->wdaMsgParam);
8904 vos_mem_free(pWdaParams);
8905 }
8906
8907 return;
8908}
8909/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008910 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
8911 * Request to WDI to delete WOWL Bcast pattern
8912 */
8913VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
8914 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
8915{
8916 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008917 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
8919 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
8920 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
8921 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008923 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008924 if(NULL == wdiWowlDelBcPtrnInfo)
8925 {
8926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008928 VOS_ASSERT(0);
8929 return VOS_STATUS_E_NOMEM;
8930 }
8931 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8932 if(NULL == pWdaParams)
8933 {
8934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 VOS_ASSERT(0);
8937 vos_mem_free(wdiWowlDelBcPtrnInfo);
8938 return VOS_STATUS_E_NOMEM;
8939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8941 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008942
8943 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8944 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8945
Yue Ma7f44bbe2013-04-12 11:47:39 -07008946 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
8947 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* Store param pointer as passed in by caller */
8949 /* store Params pass it to WDI */
8950 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8951 pWdaParams->pWdaContext = pWDA;
8952 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008953 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008954 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008955 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 {
8957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8958 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008959 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008960 vos_mem_free(pWdaParams->wdaMsgParam) ;
8961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8962 vos_mem_free(pWdaParams) ;
8963 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008964 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008965
8966}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008967/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008968 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008969 *
8970 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008971void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008972{
8973 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8974 tWDA_CbContext *pWDA;
8975 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008977 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 if(NULL == pWdaParams)
8979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 VOS_ASSERT(0) ;
8983 return ;
8984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008985 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8986 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8987
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008988 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8989
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8991 vos_mem_free(pWdaParams) ;
8992
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008993 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008994 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008995 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 return ;
8997}
Jeff Johnson295189b2012-06-20 16:38:30 -07008998/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008999 * FUNCTION: WDA_WowlEnterReqCallback
9000 * Free memory and send WOWL Enter RSP back to PE.
9001 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9002 */
9003void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9004{
9005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9006 tWDA_CbContext *pWDA;
9007 tSirHalWowlEnterParams *pWowlEnterParams;
9008
9009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9010 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9011
9012 if(NULL == pWdaParams)
9013 {
9014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "%s: pWdaParams received NULL", __func__);
9016 VOS_ASSERT(0);
9017 return;
9018 }
9019
9020 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9021 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9022 pWowlEnterParams->status = wdiStatus;
9023
9024 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9025 {
9026 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9027 vos_mem_free(pWdaParams);
9028 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9029 }
9030
9031 return;
9032}
9033/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 * FUNCTION: WDA_ProcessWowlEnterReq
9035 * Request to WDI to enter WOWL
9036 */
9037VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9038 tSirHalWowlEnterParams *pWowlEnterParams)
9039{
9040 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009041 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9043 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9044 sizeof(WDI_WowlEnterReqParamsType)) ;
9045 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 if(NULL == wdiWowlEnterInfo)
9049 {
9050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 VOS_ASSERT(0);
9053 return VOS_STATUS_E_NOMEM;
9054 }
9055 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9056 if(NULL == pWdaParams)
9057 {
9058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009059 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 VOS_ASSERT(0);
9061 vos_mem_free(wdiWowlEnterInfo);
9062 return VOS_STATUS_E_NOMEM;
9063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9065 pWowlEnterParams->magicPtrn,
9066 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9068 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9070 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009071 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9072 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009073 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9074 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9076 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009077 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9078 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9080 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009081 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9082 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009083#ifdef WLAN_WAKEUP_EVENTS
9084 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9085 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9086
9087 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9088 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9089
9090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9091 pWowlEnterParams->ucWowNetScanOffloadMatch;
9092
9093 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9094 pWowlEnterParams->ucWowGTKRekeyError;
9095
9096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9097 pWowlEnterParams->ucWoWBSSConnLoss;
9098#endif // WLAN_WAKEUP_EVENTS
9099
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009100 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9101 pWowlEnterParams->bssIdx;
9102
Yue Ma7f44bbe2013-04-12 11:47:39 -07009103 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9104 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009105 /* Store param pointer as passed in by caller */
9106 /* store Params pass it to WDI */
9107 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9108 pWdaParams->pWdaContext = pWDA;
9109 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009110 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009111 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009112 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009113 {
9114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9115 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009116 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009117 vos_mem_free(pWdaParams->wdaMsgParam) ;
9118 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9119 vos_mem_free(pWdaParams) ;
9120 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009121 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009122
9123}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009124/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009125 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 *
9127 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009128void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009129{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009130 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9131 tWDA_CbContext *pWDA;
9132 tSirHalWowlExitParams *pWowlExitParams;
9133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009134 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009135 if(NULL == pWdaParams)
9136 {
9137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009138 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009139 VOS_ASSERT(0) ;
9140 return ;
9141 }
9142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9143 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9144
9145 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009146 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009147
9148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9149 vos_mem_free(pWdaParams) ;
9150
Jeff Johnson295189b2012-06-20 16:38:30 -07009151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009152 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009153 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 return ;
9155}
Jeff Johnson295189b2012-06-20 16:38:30 -07009156/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009157 * FUNCTION: WDA_WowlExitReqCallback
9158 * Free memory and send WOWL Exit RSP back to PE.
9159 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9160 */
9161void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9162{
9163 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9164 tWDA_CbContext *pWDA;
9165 tSirHalWowlExitParams *pWowlExitParams;
9166
9167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9168 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9169
9170 if(NULL == pWdaParams)
9171 {
9172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9173 "%s: pWdaParams received NULL", __func__);
9174 VOS_ASSERT(0);
9175 return;
9176 }
9177
9178 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9179 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9180 pWowlExitParams->status = wdiStatus;
9181
9182 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9183 {
9184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9185 vos_mem_free(pWdaParams);
9186 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9187 }
9188
9189 return;
9190}
9191/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009192 * FUNCTION: WDA_ProcessWowlExitReq
9193 * Request to WDI to add WOWL Bcast pattern
9194 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009195VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9196 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009197{
9198 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009199 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009200 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9201 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9202 sizeof(WDI_WowlExitReqParamsType)) ;
9203 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009206 if(NULL == wdiWowlExitInfo)
9207 {
9208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009209 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009210 VOS_ASSERT(0);
9211 return VOS_STATUS_E_NOMEM;
9212 }
9213 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9214 if(NULL == pWdaParams)
9215 {
9216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009217 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009218 VOS_ASSERT(0);
9219 vos_mem_free(wdiWowlExitInfo);
9220 return VOS_STATUS_E_NOMEM;
9221 }
9222
9223 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9224 pWowlExitParams->bssIdx;
9225
Yue Ma7f44bbe2013-04-12 11:47:39 -07009226 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9227 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009228
9229 /* Store param pointer as passed in by caller */
9230 /* store Params pass it to WDI */
9231 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9232 pWdaParams->pWdaContext = pWDA;
9233 pWdaParams->wdaMsgParam = pWowlExitParams;
9234
9235 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009236 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009237
Jeff Johnson43971f52012-07-17 12:26:56 -07009238 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 {
9240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9241 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009242 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9244 vos_mem_free(pWdaParams->wdaMsgParam);
9245 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009246 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009247 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009248}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009249/*
9250 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9251 * Request to WDI to determine whether a given station is capable of
9252 * using HW-based frame translation
9253 */
9254v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9255 tANI_U8 staIdx)
9256{
9257 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9258}
Jeff Johnson295189b2012-06-20 16:38:30 -07009259/*
9260 * FUNCTION: WDA_NvDownloadReqCallback
9261 * send NV Download RSP back to PE
9262 */
9263void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9264 void* pUserData)
9265{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009266
9267 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9268 tWDA_CbContext *pWDA;
9269
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009271 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009272
9273 if(NULL == pWdaParams)
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009276 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009277 VOS_ASSERT(0) ;
9278 return ;
9279 }
9280
9281 pWDA = pWdaParams->pWdaContext;
9282
Jeff Johnson295189b2012-06-20 16:38:30 -07009283 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009284 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9285 vos_mem_free(pWdaParams);
9286
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009288 return ;
9289}
Jeff Johnson295189b2012-06-20 16:38:30 -07009290/*
9291 * FUNCTION: WDA_ProcessNvDownloadReq
9292 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9293 */
9294VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9295{
9296 /* Initialize the local Variables*/
9297 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9298 v_VOID_t *pNvBuffer=NULL;
9299 v_SIZE_t bufferSize = 0;
9300 WDI_Status status = WDI_STATUS_E_FAILURE;
9301 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009302 tWDA_ReqParams *pWdaParams ;
9303
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 if(NULL == pWDA)
9307 {
9308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009309 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009310 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 return VOS_STATUS_E_FAILURE;
9312 }
9313
9314 /* Get the NV structure base address and size from VOS */
9315 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9317 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009318 if(NULL == wdiNvDownloadReqParam)
9319 {
9320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009321 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009322 VOS_ASSERT(0);
9323 return VOS_STATUS_E_NOMEM;
9324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009325 /* Copy Params to wdiNvDownloadReqParam*/
9326 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9327 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009328
9329 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9330 if(NULL == pWdaParams)
9331 {
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009333 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009334 VOS_ASSERT(0);
9335 vos_mem_free(wdiNvDownloadReqParam);
9336 return VOS_STATUS_E_NOMEM;
9337 }
9338
Jeff Johnson295189b2012-06-20 16:38:30 -07009339 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009340 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9341 pWdaParams->wdaMsgParam = NULL;
9342 pWdaParams->pWdaContext = pWDA;
9343
9344
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009346
Jeff Johnson295189b2012-06-20 16:38:30 -07009347 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009348 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9349
Jeff Johnson295189b2012-06-20 16:38:30 -07009350 if(IS_WDI_STATUS_FAILURE(status))
9351 {
9352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9353 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9355 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009357 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009358}
9359/*
9360 * FUNCTION: WDA_FlushAcReqCallback
9361 * send Flush AC RSP back to TL
9362 */
9363void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9364{
9365 vos_msg_t wdaMsg = {0} ;
9366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9367 tFlushACReq *pFlushACReqParams;
9368 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009370 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 if(NULL == pWdaParams)
9372 {
9373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009374 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009375 VOS_ASSERT(0) ;
9376 return ;
9377 }
9378
9379 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9380 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9381 if(NULL == pFlushACRspParams)
9382 {
9383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009384 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009385 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009386 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009387 return ;
9388 }
9389 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9390 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9391 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9392 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9393 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009394 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009395 vos_mem_free(pWdaParams->wdaMsgParam) ;
9396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9397 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9399 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9400 // POST message to TL
9401 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9402
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 return ;
9404}
Jeff Johnson295189b2012-06-20 16:38:30 -07009405/*
9406 * FUNCTION: WDA_ProcessFlushAcReq
9407 * Request to WDI to Update the DELBA REQ params.
9408 */
9409VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9410 tFlushACReq *pFlushAcReqParams)
9411{
9412 WDI_Status status = WDI_STATUS_SUCCESS ;
9413 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9414 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9415 sizeof(WDI_FlushAcReqParamsType)) ;
9416 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 if(NULL == wdiFlushAcReqParam)
9418 {
9419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 VOS_ASSERT(0);
9422 return VOS_STATUS_E_NOMEM;
9423 }
9424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9425 if(NULL == pWdaParams)
9426 {
9427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 VOS_ASSERT(0);
9430 vos_mem_free(wdiFlushAcReqParam);
9431 return VOS_STATUS_E_NOMEM;
9432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009434 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009435 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9436 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9437 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9438 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 /* Store Flush AC pointer, as this will be used for response */
9440 /* store Params pass it to WDI */
9441 pWdaParams->pWdaContext = pWDA;
9442 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9443 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009444 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9445 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 if(IS_WDI_STATUS_FAILURE(status))
9447 {
9448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9449 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9450 vos_mem_free(pWdaParams->wdaMsgParam) ;
9451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9452 vos_mem_free(pWdaParams) ;
9453 //TODO: respond to TL with failure
9454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009455 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009456}
Jeff Johnson295189b2012-06-20 16:38:30 -07009457/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009458 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009459 *
9460 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009461void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009462{
9463 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9464 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009465 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009466
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009468 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009469 if(NULL == pWdaParams)
9470 {
9471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009472 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009473 VOS_ASSERT(0) ;
9474 return ;
9475 }
9476 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9477 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9478 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9479 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9480 {
9481 pWDA->wdaAmpSessionOn = VOS_FALSE;
9482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009483 vos_mem_free(pWdaParams->wdaMsgParam) ;
9484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9485 vos_mem_free(pWdaParams) ;
9486 /*
9487 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9488 * param here
9489 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009490 return ;
9491}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009492/*
9493 * FUNCTION: WDA_BtAmpEventReqCallback
9494 * Free memory.
9495 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9496 */
9497void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9498{
9499 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9500 tWDA_CbContext *pWDA;
9501 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009502
Yue Ma7f44bbe2013-04-12 11:47:39 -07009503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9504 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9505
9506 if(NULL == pWdaParams)
9507 {
9508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9509 "%s: pWdaParams received NULL", __func__);
9510 VOS_ASSERT(0);
9511 return;
9512 }
9513
9514 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9515 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9516
9517 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9518 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9519 {
9520 pWDA->wdaAmpSessionOn = VOS_FALSE;
9521 }
9522
9523 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9524 {
9525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9526 vos_mem_free(pWdaParams->wdaMsgParam);
9527 vos_mem_free(pWdaParams);
9528 }
9529
9530 return;
9531}
Jeff Johnson295189b2012-06-20 16:38:30 -07009532/*
9533 * FUNCTION: WDA_ProcessBtAmpEventReq
9534 * Request to WDI to Update with BT AMP events.
9535 */
9536VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9537 tSmeBtAmpEvent *pBtAmpEventParams)
9538{
9539 WDI_Status status = WDI_STATUS_SUCCESS ;
9540 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9541 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9542 sizeof(WDI_BtAmpEventParamsType)) ;
9543 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009545 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009546 if(NULL == wdiBtAmpEventParam)
9547 {
9548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009550 VOS_ASSERT(0);
9551 return VOS_STATUS_E_NOMEM;
9552 }
9553 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9554 if(NULL == pWdaParams)
9555 {
9556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009557 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 VOS_ASSERT(0);
9559 vos_mem_free(wdiBtAmpEventParam);
9560 return VOS_STATUS_E_NOMEM;
9561 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009562 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9563 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009564 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9565 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 /* Store BT AMP event pointer, as this will be used for response */
9567 /* store Params pass it to WDI */
9568 pWdaParams->pWdaContext = pWDA;
9569 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9570 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009571 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009572 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009573 if(IS_WDI_STATUS_FAILURE(status))
9574 {
9575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9576 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9577 vos_mem_free(pWdaParams->wdaMsgParam) ;
9578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9579 vos_mem_free(pWdaParams) ;
9580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009581 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9582 {
9583 pWDA->wdaAmpSessionOn = VOS_TRUE;
9584 }
9585 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009586}
9587
Jeff Johnson295189b2012-06-20 16:38:30 -07009588/*
9589 * FUNCTION: WDA_FTMCommandReqCallback
9590 * Handle FTM CMD response came from HAL
9591 * Route responce to HDD FTM
9592 */
9593void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9594 void *usrData)
9595{
9596 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009597 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9598 {
9599 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309600 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009601 return;
9602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009603 /* Release Current FTM Command Request */
9604 vos_mem_free(pWDA->wdaFTMCmdReq);
9605 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009606 /* Post FTM Responce to HDD FTM */
9607 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009608 return;
9609}
Jeff Johnson295189b2012-06-20 16:38:30 -07009610/*
9611 * FUNCTION: WDA_ProcessFTMCommand
9612 * Send FTM command to WDI
9613 */
9614VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9615 tPttMsgbuffer *pPTTFtmCmd)
9616{
9617 WDI_Status status = WDI_STATUS_SUCCESS;
9618 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009619 ftmCMDReq = (WDI_FTMCommandReqType *)
9620 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9621 if(NULL == ftmCMDReq)
9622 {
9623 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9624 "WDA FTM Command buffer alloc fail");
9625 return VOS_STATUS_E_NOMEM;
9626 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009627 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9628 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009629 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009630 /* Send command to WDI */
9631 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009632 return status;
9633}
Jeff Johnsone7245742012-09-05 17:12:55 -07009634#ifdef FEATURE_OEM_DATA_SUPPORT
9635/*
9636 * FUNCTION: WDA_StartOemDataReqCallback
9637 *
9638 */
9639void WDA_StartOemDataReqCallback(
9640 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9641 void* pUserData)
9642{
9643 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009644 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9645 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009646 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009647
Jeff Johnsone7245742012-09-05 17:12:55 -07009648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009649 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009650
9651 if(NULL == pWdaParams)
9652 {
9653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009654 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009655 VOS_ASSERT(0) ;
9656 return ;
9657 }
9658 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9659
Jeff Johnsone7245742012-09-05 17:12:55 -07009660 if(NULL == pWDA)
9661 {
9662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009663 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009664 VOS_ASSERT(0);
9665 return ;
9666 }
9667
9668 /*
9669 * Allocate memory for response params sent to PE
9670 */
9671 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
9672
9673 // Check if memory is allocated for OemdataMeasRsp Params.
9674 if(NULL == pOemDataRspParams)
9675 {
9676 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9677 "OEM DATA WDA callback alloc fail");
9678 VOS_ASSERT(0) ;
9679 return;
9680 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009681
Jeff Johnsone7245742012-09-05 17:12:55 -07009682 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9684 vos_mem_free(pWdaParams->wdaMsgParam);
9685 vos_mem_free(pWdaParams) ;
9686
Jeff Johnsone7245742012-09-05 17:12:55 -07009687 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009688 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07009689 * Also, here success always means that we have atleast one BSSID.
9690 */
9691 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
9692
9693 //enable Tx
9694 status = WDA_ResumeDataTx(pWDA);
9695 if(status != VOS_STATUS_SUCCESS)
9696 {
9697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
9698 }
9699 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
9700 return ;
9701}
9702/*
9703 * FUNCTION: WDA_ProcessStartOemDataReq
9704 * Send Start Oem Data Req to WDI
9705 */
9706VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
9707 tStartOemDataReq *pOemDataReqParams)
9708{
9709 WDI_Status status = WDI_STATUS_SUCCESS;
9710 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009711 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07009712
9713 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
9714
9715 if(NULL == wdiOemDataReqParams)
9716 {
9717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009719 VOS_ASSERT(0);
9720 return VOS_STATUS_E_NOMEM;
9721 }
9722
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009723 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
9724 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
9725 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
9726 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07009727
9728 wdiOemDataReqParams->wdiReqStatusCB = NULL;
9729
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009730 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9731 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07009732 {
9733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07009735 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009736 vos_mem_free(pOemDataReqParams);
9737 VOS_ASSERT(0);
9738 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07009739 }
Jeff Johnsone7245742012-09-05 17:12:55 -07009740
Bernald44a1ae2013-01-09 08:30:39 -08009741 pWdaParams->pWdaContext = (void*)pWDA;
9742 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
9743 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009744
9745 status = WDI_StartOemDataReq(wdiOemDataReqParams,
9746 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009747
9748 if(IS_WDI_STATUS_FAILURE(status))
9749 {
9750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9751 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9753 vos_mem_free(pWdaParams->wdaMsgParam);
9754 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07009755 }
9756 return CONVERT_WDI2VOS_STATUS(status) ;
9757}
9758#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009759/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009760 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009761 *
9762 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009763void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009764{
9765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009768 if(NULL == pWdaParams)
9769 {
9770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009772 VOS_ASSERT(0) ;
9773 return ;
9774 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009775
9776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9777 vos_mem_free(pWdaParams->wdaMsgParam);
9778 vos_mem_free(pWdaParams);
9779
9780 return ;
9781}
9782/*
9783 * FUNCTION: WDA_SetTxPerTrackingReqCallback
9784 * Free memory.
9785 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
9786 */
9787void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
9788{
9789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9790
9791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9792 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9793
9794 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009795 {
Yue Ma7f44bbe2013-04-12 11:47:39 -07009796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9797 "%s: pWdaParams received NULL", __func__);
9798 VOS_ASSERT(0);
9799 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009801
9802 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 {
9804 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009805 vos_mem_free(pWdaParams->wdaMsgParam);
9806 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009807 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009808
9809 return;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810}
Jeff Johnson295189b2012-06-20 16:38:30 -07009811#ifdef WLAN_FEATURE_GTK_OFFLOAD
9812/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009813 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 *
9815 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009816void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009817 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009818{
9819 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9820
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009822 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009823
9824 VOS_ASSERT(NULL != pWdaParams);
9825
9826 vos_mem_free(pWdaParams->wdaMsgParam) ;
9827 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9828 vos_mem_free(pWdaParams) ;
9829
9830 //print a msg, nothing else to do
9831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009832 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009833
9834 return ;
9835}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009836/*
9837 * FUNCTION: WDA_GTKOffloadReqCallback
9838 * Free memory.
9839 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
9840 */
9841void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9842{
9843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009844
Yue Ma7f44bbe2013-04-12 11:47:39 -07009845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9846 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9847
9848 if(NULL == pWdaParams)
9849 {
9850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9851 "%s: pWdaParams received NULL", __func__);
9852 VOS_ASSERT(0);
9853 return;
9854 }
9855
9856 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9857 {
9858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9859 vos_mem_free(pWdaParams->wdaMsgParam);
9860 vos_mem_free(pWdaParams);
9861 }
9862
9863 return;
9864}
Jeff Johnson295189b2012-06-20 16:38:30 -07009865/*
9866 * FUNCTION: WDA_ProcessGTKOffloadReq
9867 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9868 * to broadcast traffic (sta mode).
9869 */
9870VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
9871 tpSirGtkOffloadParams pGtkOffloadParams)
9872{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309873 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07009874 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
9875 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
9876 sizeof(WDI_GtkOffloadReqMsg)) ;
9877 tWDA_ReqParams *pWdaParams ;
9878
9879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009881
9882 if(NULL == wdiGtkOffloadReqMsg)
9883 {
9884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009886 VOS_ASSERT(0);
9887 return VOS_STATUS_E_NOMEM;
9888 }
9889
9890 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9891 if(NULL == pWdaParams)
9892 {
9893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009894 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 VOS_ASSERT(0);
9896 vos_mem_free(wdiGtkOffloadReqMsg);
9897 return VOS_STATUS_E_NOMEM;
9898 }
9899
9900 //
9901 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
9902 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009903
9904 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309905 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009906
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
9908 // Copy KCK
9909 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
9910 // Copy KEK
9911 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
9912 // Copy KeyReplayCounter
9913 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
9914 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
9915
Yue Ma7f44bbe2013-04-12 11:47:39 -07009916 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
9917 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009918
Jeff Johnson295189b2012-06-20 16:38:30 -07009919
9920 /* Store Params pass it to WDI */
9921 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
9922 pWdaParams->pWdaContext = pWDA;
9923 /* Store param pointer as passed in by caller */
9924 pWdaParams->wdaMsgParam = pGtkOffloadParams;
9925
Yue Ma7f44bbe2013-04-12 11:47:39 -07009926 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009927
9928 if(IS_WDI_STATUS_FAILURE(status))
9929 {
9930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9931 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
9932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9933 vos_mem_free(pWdaParams->wdaMsgParam);
9934 vos_mem_free(pWdaParams);
9935 }
9936
9937 return CONVERT_WDI2VOS_STATUS(status) ;
9938}
9939
9940/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009941 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 *
9943 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009944void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009945 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009946{
9947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9948 tWDA_CbContext *pWDA;
9949 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
9950 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 vos_msg_t vosMsg;
9952
9953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009955
9956 VOS_ASSERT(NULL != pWdaParams);
9957
9958 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9959 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
9960
9961 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
9962 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
9963
9964 /* Message Header */
9965 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9966 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
9967
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009968 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
9969 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
9970 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
9971 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
9972 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07009973
Gopichand Nakkala870cbae2013-03-15 21:16:09 +05309974 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
9975 pwdiGtkOffloadGetInfoRsparams->bssId,
9976 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 /* VOS message wrapper */
9978 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
9979 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
9980 vosMsg.bodyval = 0;
9981
9982 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
9983 {
9984 /* free the mem and return */
9985 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
9986 }
9987
9988 vos_mem_free(pWdaParams->wdaMsgParam) ;
9989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9990 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009991
9992 return;
9993}
9994/*
9995 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
9996 * Free memory and send RSP back to SME.
9997 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
9998 */
9999void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10000{
10001 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10002 vos_msg_t vosMsg;
10003
10004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10005 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10006
10007 if(NULL == pWdaParams)
10008 {
10009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10010 "%s: pWdaParams received NULL", __func__);
10011 VOS_ASSERT(0);
10012 return;
10013 }
10014
10015 /* VOS message wrapper */
10016 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10017 vosMsg.bodyptr = NULL;
10018 vosMsg.bodyval = 0;
10019
10020 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10021 {
10022 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10023 vos_mem_free(pWdaParams->wdaMsgParam);
10024 vos_mem_free(pWdaParams);
10025 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10026 }
10027
10028 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010029}
10030#endif
10031
10032/*
10033 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10034 * Request to WDI to set Tx Per Tracking configurations
10035 */
10036VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10037{
10038 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010039 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10041 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10042 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10043 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010046 if(NULL == pwdiSetTxPerTrackingReqParams)
10047 {
10048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010049 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010050 vos_mem_free(pTxPerTrackingParams);
10051 VOS_ASSERT(0);
10052 return VOS_STATUS_E_NOMEM;
10053 }
10054 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10055 if(NULL == pWdaParams)
10056 {
10057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010058 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010059 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10060 vos_mem_free(pTxPerTrackingParams);
10061 VOS_ASSERT(0);
10062 return VOS_STATUS_E_NOMEM;
10063 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10065 pTxPerTrackingParams->ucTxPerTrackingEnable;
10066 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10067 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10068 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10069 pTxPerTrackingParams->ucTxPerTrackingRatio;
10070 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10071 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010072 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10073 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010074 /* Store param pointer as passed in by caller */
10075 /* store Params pass it to WDI
10076 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10077 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10078 pWdaParams->pWdaContext = pWDA;
10079 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010080 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010081 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010082 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 {
10084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10085 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010086 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 vos_mem_free(pWdaParams->wdaMsgParam) ;
10088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10089 vos_mem_free(pWdaParams) ;
10090 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010091 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010092
10093}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010094/*
10095 * FUNCTION: WDA_HALDumpCmdCallback
10096 * Send the VOS complete .
10097 */
10098void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10099 void* pUserData)
10100{
10101 tANI_U8 *buffer = NULL;
10102 tWDA_CbContext *pWDA = NULL;
10103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 if(NULL == pWdaParams)
10105 {
10106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010107 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 VOS_ASSERT(0) ;
10109 return ;
10110 }
10111
10112 pWDA = pWdaParams->pWdaContext;
10113 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 if(wdiRspParams->usBufferLen > 0)
10115 {
10116 /*Copy the Resp data to UMAC supplied buffer*/
10117 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10120 vos_mem_free(pWdaParams);
10121
10122 /* Indicate VOSS about the start complete */
10123 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 return ;
10125}
10126
Jeff Johnson295189b2012-06-20 16:38:30 -070010127/*
10128 * FUNCTION: WDA_ProcessHALDumpCmdReq
10129 * Send Dump command to WDI
10130 */
10131VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10132 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10133 tANI_U32 arg4, tANI_U8 *pBuffer)
10134{
10135 WDI_Status status = WDI_STATUS_SUCCESS;
10136 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10137 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10138 tWDA_ReqParams *pWdaParams ;
10139 pVosContextType pVosContext = NULL;
10140 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10142 (void *)pMac);
10143
10144 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10145 if(NULL == pWdaParams)
10146 {
10147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 return VOS_STATUS_E_NOMEM;
10150 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 /* Allocate memory WDI request structure*/
10152 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10153 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10154 if(NULL == wdiHALDumpCmdReqParam)
10155 {
10156 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10157 "WDA HAL DUMP Command buffer alloc fail");
10158 vos_mem_free(pWdaParams);
10159 return WDI_STATUS_E_FAILURE;
10160 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 /* Extract the arguments */
10163 wdiHalDumpCmdInfo->command = cmd;
10164 wdiHalDumpCmdInfo->argument1 = arg1;
10165 wdiHalDumpCmdInfo->argument2 = arg2;
10166 wdiHalDumpCmdInfo->argument3 = arg3;
10167 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10170
10171 /* Response message will be passed through the buffer */
10172 pWdaParams->wdaMsgParam = (void *)pBuffer;
10173
10174 /* store Params pass it to WDI */
10175 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010176 /* Send command to WDI */
10177 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010178 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 if ( vStatus != VOS_STATUS_SUCCESS )
10180 {
10181 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10182 {
10183 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080010184 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010185 }
10186 else
10187 {
10188 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010189 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010190 }
10191 VOS_ASSERT(0);
10192 }
10193 return status;
10194}
Jeff Johnson295189b2012-06-20 16:38:30 -070010195#ifdef WLAN_FEATURE_GTK_OFFLOAD
10196/*
10197 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10198 * Request to WDI to get GTK Offload Information
10199 */
10200VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10201 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10202{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010203 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010204 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10205 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10206 tWDA_ReqParams *pWdaParams ;
10207
10208 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10209 {
10210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010212 VOS_ASSERT(0);
10213 return VOS_STATUS_E_NOMEM;
10214 }
10215
10216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10217 if(NULL == pWdaParams)
10218 {
10219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010221 VOS_ASSERT(0);
10222 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10223 return VOS_STATUS_E_NOMEM;
10224 }
10225
Yue Ma7f44bbe2013-04-12 11:47:39 -070010226 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10227 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010228
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 /* Store Params pass it to WDI */
10230 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10231 pWdaParams->pWdaContext = pWDA;
10232 /* Store param pointer as passed in by caller */
10233 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10234
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010235 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010236 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010237
Yue Ma7f44bbe2013-04-12 11:47:39 -070010238 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010239
10240 if(IS_WDI_STATUS_FAILURE(status))
10241 {
10242 /* failure returned by WDI API */
10243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10244 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10246 vos_mem_free(pWdaParams) ;
10247 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10248 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10249 }
10250
10251 return CONVERT_WDI2VOS_STATUS(status) ;
10252}
10253#endif // WLAN_FEATURE_GTK_OFFLOAD
10254
10255/*
10256 * -------------------------------------------------------------------------
10257 * DATA interface with WDI for Mgmt Frames
10258 * -------------------------------------------------------------------------
10259 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010260/*
10261 * FUNCTION: WDA_TxComplete
10262 * Callback function for the WDA_TxPacket
10263 */
10264VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10265 VOS_STATUS status )
10266{
10267
10268 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10269 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010270 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271
10272 if(NULL == wdaContext)
10273 {
10274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10275 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010276 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010277 VOS_ASSERT(0);
10278 return VOS_STATUS_E_FAILURE;
10279 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010280
10281 /*Check if frame was timed out or not*/
10282 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
10283 (v_PVOID_t)&uUserData);
10284
10285 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
10286 {
10287 /*Discard frame - no further processing is needed*/
10288 vos_pkt_return_packet(pData);
10289 return VOS_STATUS_SUCCESS;
10290 }
10291
Jeff Johnson295189b2012-06-20 16:38:30 -070010292 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
10293 if( NULL!=wdaContext->pTxCbFunc)
10294 {
10295 /*check if packet is freed already*/
10296 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
10297 {
10298 wdaContext->pTxCbFunc(pMac, pData);
10299 }
10300 else
10301 {
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010303 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010304 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 //Return from here since we reaching here because the packet already timeout
10306 return status;
10307 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010308 }
10309
10310 /*
10311 * Trigger the event to bring the HAL TL Tx complete function to come
10312 * out of wait
10313 * Let the coe above to complete the packet first. When this event is set,
10314 * the thread waiting for the event may run and set Vospacket_freed causing the original
10315 * packet not being freed.
10316 */
10317 status = vos_event_set(&wdaContext->txFrameEvent);
10318 if(!VOS_IS_STATUS_SUCCESS(status))
10319 {
10320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10321 "NEW VOS Event Set failed - status = %d \n", status);
10322 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 return status;
10324}
Jeff Johnson295189b2012-06-20 16:38:30 -070010325/*
10326 * FUNCTION: WDA_TxPacket
10327 * Forward TX management frame to WDI
10328 */
10329VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
10330 void *pFrmBuf,
10331 tANI_U16 frmLen,
10332 eFrameType frmType,
10333 eFrameTxDir txDir,
10334 tANI_U8 tid,
10335 pWDATxRxCompFunc pCompFunc,
10336 void *pData,
10337 pWDAAckFnTxComp pAckTxComp,
10338 tANI_U8 txFlag)
10339{
10340 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10341 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
10342 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
10343 tANI_U8 eventIdx = 0;
10344 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
10345 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 if((NULL == pWDA)||(NULL == pFrmBuf))
10347 {
10348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010349 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010350 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 VOS_ASSERT(0);
10352 return VOS_STATUS_E_FAILURE;
10353 }
10354
10355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010356 "Tx Mgmt Frame Subtype: %d alloc(%p)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070010357 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10358 if(NULL == pMac)
10359 {
10360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010361 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010362 VOS_ASSERT(0);
10363 return VOS_STATUS_E_FAILURE;
10364 }
10365
10366
10367
10368 /* store the call back function in WDA context */
10369 pWDA->pTxCbFunc = pCompFunc;
10370 /* store the call back for the function of ackTxComplete */
10371 if( pAckTxComp )
10372 {
Jeff Johnsone7245742012-09-05 17:12:55 -070010373 if( NULL != pWDA->pAckTxCbFunc )
10374 {
10375 /* Already TxComp is active no need to active again */
10376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10377 "There is already one request pending for tx complete\n");
10378 pWDA->pAckTxCbFunc( pMac, 0);
10379 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010380
Jeff Johnsone7245742012-09-05 17:12:55 -070010381 if( VOS_STATUS_SUCCESS !=
10382 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10383 {
10384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10385 "Tx Complete timeout Timer Stop Failed ");
10386 }
10387 else
10388 {
10389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010390 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070010391 }
10392 }
10393
10394 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
10395 pWDA->pAckTxCbFunc = pAckTxComp;
10396 if( VOS_STATUS_SUCCESS !=
10397 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
10398 {
10399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10400 "Tx Complete Timer Start Failed ");
10401 pWDA->pAckTxCbFunc = NULL;
10402 return eHAL_STATUS_FAILURE;
10403 }
10404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 /* Reset the event to be not signalled */
10406 status = vos_event_reset(&pWDA->txFrameEvent);
10407 if(!VOS_IS_STATUS_SUCCESS(status))
10408 {
10409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10410 "VOS Event reset failed - status = %d\n",status);
10411 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
10412 if( pAckTxComp )
10413 {
10414 pWDA->pAckTxCbFunc = NULL;
10415 if( VOS_STATUS_SUCCESS !=
10416 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10417 {
10418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10419 "Tx Complete timeout Timer Stop Failed ");
10420 }
10421 }
10422 return VOS_STATUS_E_FAILURE;
10423 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010424
10425 /* If Peer Sta mask is set don't overwrite to self sta */
10426 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010428 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010430 else
10431 {
Ganesh K08bce952012-12-13 15:04:41 -080010432 /* Get system role, use the self station if in unknown role or STA role */
10433 systemRole = wdaGetGlobalSystemRole(pMac);
10434 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
10435 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080010436#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080010437 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080010438#endif
Ganesh K08bce952012-12-13 15:04:41 -080010439 ))
10440 {
10441 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
10442 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080010443 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010444
Jeff Johnsone7245742012-09-05 17:12:55 -070010445 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
10446 disassoc frame reaches the HW, HAL has already deleted the peer station */
10447 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080010449 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070010450 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070010451 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 /*Send Probe request frames on self sta idx*/
10453 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070010454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 /* Since we donot want probe responses to be retried, send probe responses
10456 through the NO_ACK queues */
10457 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
10458 {
10459 //probe response is sent out using self station and no retries options.
10460 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
10461 }
10462 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
10463 {
10464 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
10465 }
10466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
10468
10469 /*Set frame tag to 0
10470 We will use the WDA user data in order to tag a frame as expired*/
10471 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10472 (v_PVOID_t)0);
10473
10474
10475 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
10476 frmLen, ucTypeSubType, tid,
10477 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
10478 {
10479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10480 "Sending Mgmt Frame failed - status = %d\n", status);
10481 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
10482 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
10483 if( pAckTxComp )
10484 {
10485 pWDA->pAckTxCbFunc = NULL;
10486 if( VOS_STATUS_SUCCESS !=
10487 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10488 {
10489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10490 "Tx Complete timeout Timer Stop Failed ");
10491 }
10492 }
10493 return VOS_STATUS_E_FAILURE;
10494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 /*
10496 * Wait for the event to be set by the TL, to get the response of TX
10497 * complete, this event should be set by the Callback function called by TL
10498 */
10499 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
10500 &eventIdx);
10501 if(!VOS_IS_STATUS_SUCCESS(status))
10502 {
10503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10504 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010505 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
10507 after the packet gets completed(packet freed once)*/
10508
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010509 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070010510 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070010511
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010512 /*Tag Frame as timed out for later deletion*/
10513 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
10514 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
10515
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 /* check whether the packet was freed already,so need not free again when
10517 * TL calls the WDA_Txcomplete routine
10518 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010519 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
10520 /*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 -070010521 {
10522 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010523 } */
10524
Jeff Johnson295189b2012-06-20 16:38:30 -070010525 if( pAckTxComp )
10526 {
10527 pWDA->pAckTxCbFunc = NULL;
10528 if( VOS_STATUS_SUCCESS !=
10529 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10530 {
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10532 "Tx Complete timeout Timer Stop Failed ");
10533 }
10534 }
10535 status = VOS_STATUS_E_FAILURE;
10536 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 return status;
10538}
Jeff Johnson295189b2012-06-20 16:38:30 -070010539/*
10540 * FUNCTION: WDA_McProcessMsg
10541 * Trigger DAL-AL to start CFG download
10542 */
10543VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
10544{
10545 VOS_STATUS status = VOS_STATUS_SUCCESS;
10546 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010547 if(NULL == pMsg)
10548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010550 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 VOS_ASSERT(0);
10552 return VOS_STATUS_E_FAILURE;
10553 }
10554
10555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010556 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070010557
10558 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
10559 if(NULL == pWDA )
10560 {
10561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010562 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010563 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010564 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010565 return VOS_STATUS_E_FAILURE;
10566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 /* Process all the WDA messages.. */
10568 switch( pMsg->type )
10569 {
10570 case WNI_CFG_DNLD_REQ:
10571 {
10572 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010573 /* call WDA complete event if config download success */
10574 if( VOS_IS_STATUS_SUCCESS(status) )
10575 {
10576 vos_WDAComplete_cback(pVosContext);
10577 }
10578 else
10579 {
10580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10581 "WDA Config Download failure" );
10582 }
10583 break ;
10584 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010585 /*
10586 * Init SCAN request from PE, convert it into DAL format
10587 * and send it to DAL
10588 */
10589 case WDA_INIT_SCAN_REQ:
10590 {
10591 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
10592 break ;
10593 }
10594 /* start SCAN request from PE */
10595 case WDA_START_SCAN_REQ:
10596 {
10597 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
10598 break ;
10599 }
10600 /* end SCAN request from PE */
10601 case WDA_END_SCAN_REQ:
10602 {
10603 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
10604 break ;
10605 }
10606 /* end SCAN request from PE */
10607 case WDA_FINISH_SCAN_REQ:
10608 {
10609 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
10610 break ;
10611 }
10612 /* join request from PE */
10613 case WDA_CHNL_SWITCH_REQ:
10614 {
10615 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
10616 {
10617 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
10618 }
10619 else
10620 {
10621 WDA_ProcessChannelSwitchReq(pWDA,
10622 (tSwitchChannelParams*)pMsg->bodyptr) ;
10623 }
10624 break ;
10625 }
10626 /* ADD BSS request from PE */
10627 case WDA_ADD_BSS_REQ:
10628 {
10629 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
10630 break ;
10631 }
10632 case WDA_ADD_STA_REQ:
10633 {
10634 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
10635 break ;
10636 }
10637 case WDA_DELETE_BSS_REQ:
10638 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
10640 break ;
10641 }
10642 case WDA_DELETE_STA_REQ:
10643 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010644 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
10645 break ;
10646 }
10647 case WDA_CONFIG_PARAM_UPDATE_REQ:
10648 {
10649 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
10650 break ;
10651 }
10652 case WDA_SET_BSSKEY_REQ:
10653 {
10654 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
10655 break ;
10656 }
10657 case WDA_SET_STAKEY_REQ:
10658 {
10659 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10660 break ;
10661 }
10662 case WDA_SET_STA_BCASTKEY_REQ:
10663 {
10664 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
10665 break ;
10666 }
10667 case WDA_REMOVE_BSSKEY_REQ:
10668 {
10669 WDA_ProcessRemoveBssKeyReq(pWDA,
10670 (tRemoveBssKeyParams *)pMsg->bodyptr);
10671 break ;
10672 }
10673 case WDA_REMOVE_STAKEY_REQ:
10674 {
10675 WDA_ProcessRemoveStaKeyReq(pWDA,
10676 (tRemoveStaKeyParams *)pMsg->bodyptr);
10677 break ;
10678 }
10679 case WDA_REMOVE_STA_BCASTKEY_REQ:
10680 {
10681 /* TODO: currently UMAC is not sending this request, Add the code for
10682 handling this request when UMAC supports */
10683 break;
10684 }
10685#ifdef FEATURE_WLAN_CCX
10686 case WDA_TSM_STATS_REQ:
10687 {
10688 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
10689 break;
10690 }
10691#endif
10692 case WDA_UPDATE_EDCA_PROFILE_IND:
10693 {
10694 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
10695 break;
10696 }
10697 case WDA_ADD_TS_REQ:
10698 {
10699 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
10700 break;
10701 }
10702 case WDA_DEL_TS_REQ:
10703 {
10704 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
10705 break;
10706 }
10707 case WDA_ADDBA_REQ:
10708 {
10709 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
10710 break;
10711 }
10712 case WDA_DELBA_IND:
10713 {
10714 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
10715 break;
10716 }
10717 case WDA_SET_LINK_STATE:
10718 {
10719 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
10720 break;
10721 }
10722 case WDA_GET_STATISTICS_REQ:
10723 {
10724 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
10725 break;
10726 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080010727#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
10728 case WDA_GET_ROAM_RSSI_REQ:
10729 {
10730 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
10731 break;
10732 }
10733#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 case WDA_PWR_SAVE_CFG:
10735 {
10736 if(pWDA->wdaState == WDA_READY_STATE)
10737 {
10738 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
10739 }
10740 else
10741 {
10742 if(NULL != pMsg->bodyptr)
10743 {
10744 vos_mem_free(pMsg->bodyptr);
10745 }
10746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10747 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
10748 }
10749 break;
10750 }
10751 case WDA_ENTER_IMPS_REQ:
10752 {
10753 if(pWDA->wdaState == WDA_READY_STATE)
10754 {
10755 WDA_ProcessEnterImpsReq(pWDA);
10756 }
10757 else
10758 {
10759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10760 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10761 }
10762 break;
10763 }
10764 case WDA_EXIT_IMPS_REQ:
10765 {
10766 if(pWDA->wdaState == WDA_READY_STATE)
10767 {
10768 WDA_ProcessExitImpsReq(pWDA);
10769 }
10770 else
10771 {
10772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10773 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
10774 }
10775 break;
10776 }
10777 case WDA_ENTER_BMPS_REQ:
10778 {
10779 if(pWDA->wdaState == WDA_READY_STATE)
10780 {
10781 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
10782 }
10783 else
10784 {
10785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10786 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10787 }
10788 break;
10789 }
10790 case WDA_EXIT_BMPS_REQ:
10791 {
10792 if(pWDA->wdaState == WDA_READY_STATE)
10793 {
10794 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
10795 }
10796 else
10797 {
10798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10799 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
10800 }
10801 break;
10802 }
10803 case WDA_ENTER_UAPSD_REQ:
10804 {
10805 if(pWDA->wdaState == WDA_READY_STATE)
10806 {
10807 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
10808 }
10809 else
10810 {
10811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10812 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10813 }
10814 break;
10815 }
10816 case WDA_EXIT_UAPSD_REQ:
10817 {
10818 if(pWDA->wdaState == WDA_READY_STATE)
10819 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010820 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010821 }
10822 else
10823 {
10824 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10825 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
10826 }
10827 break;
10828 }
10829 case WDA_UPDATE_UAPSD_IND:
10830 {
10831 if(pWDA->wdaState == WDA_READY_STATE)
10832 {
10833 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
10834 }
10835 else
10836 {
10837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10838 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
10839 }
10840 break;
10841 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010842 case WDA_REGISTER_PE_CALLBACK :
10843 {
10844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10845 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
10846 /*TODO: store the PE callback */
10847 /* Do Nothing? MSG Body should be freed at here */
10848 if(NULL != pMsg->bodyptr)
10849 {
10850 vos_mem_free(pMsg->bodyptr);
10851 }
10852 break;
10853 }
10854 case WDA_SYS_READY_IND :
10855 {
10856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10857 "Handling msg type WDA_SYS_READY_IND " );
10858 pWDA->wdaState = WDA_READY_STATE;
10859 if(NULL != pMsg->bodyptr)
10860 {
10861 vos_mem_free(pMsg->bodyptr);
10862 }
10863 break;
10864 }
10865 case WDA_BEACON_FILTER_IND :
10866 {
10867 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
10868 break;
10869 }
10870 case WDA_BTC_SET_CFG:
10871 {
10872 /*TODO: handle this while dealing with BTC */
10873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10874 "Handling msg type WDA_BTC_SET_CFG " );
10875 /* Do Nothing? MSG Body should be freed at here */
10876 if(NULL != pMsg->bodyptr)
10877 {
10878 vos_mem_free(pMsg->bodyptr);
10879 }
10880 break;
10881 }
10882 case WDA_SIGNAL_BT_EVENT:
10883 {
10884 /*TODO: handle this while dealing with BTC */
10885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10886 "Handling msg type WDA_SIGNAL_BT_EVENT " );
10887 /* Do Nothing? MSG Body should be freed at here */
10888 if(NULL != pMsg->bodyptr)
10889 {
10890 vos_mem_free(pMsg->bodyptr);
10891 }
10892 break;
10893 }
10894 case WDA_CFG_RXP_FILTER_REQ:
10895 {
10896 WDA_ProcessConfigureRxpFilterReq(pWDA,
10897 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
10898 break;
10899 }
10900 case WDA_SET_HOST_OFFLOAD:
10901 {
10902 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10903 break;
10904 }
10905 case WDA_SET_KEEP_ALIVE:
10906 {
10907 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
10908 break;
10909 }
10910#ifdef WLAN_NS_OFFLOAD
10911 case WDA_SET_NS_OFFLOAD:
10912 {
10913 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
10914 break;
10915 }
10916#endif //WLAN_NS_OFFLOAD
10917 case WDA_ADD_STA_SELF_REQ:
10918 {
10919 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
10920 break;
10921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 case WDA_DEL_STA_SELF_REQ:
10923 {
10924 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
10925 break;
10926 }
10927 case WDA_WOWL_ADD_BCAST_PTRN:
10928 {
10929 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
10930 break;
10931 }
10932 case WDA_WOWL_DEL_BCAST_PTRN:
10933 {
10934 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
10935 break;
10936 }
10937 case WDA_WOWL_ENTER_REQ:
10938 {
10939 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
10940 break;
10941 }
10942 case WDA_WOWL_EXIT_REQ:
10943 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010944 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 break;
10946 }
10947 case WDA_TL_FLUSH_AC_REQ:
10948 {
10949 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
10950 break;
10951 }
10952 case WDA_SIGNAL_BTAMP_EVENT:
10953 {
10954 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
10955 break;
10956 }
10957#ifdef WDA_UT
10958 case WDA_WDI_EVENT_MSG:
10959 {
10960 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
10961 break ;
10962 }
10963#endif
10964 case WDA_UPDATE_BEACON_IND:
10965 {
10966 WDA_ProcessUpdateBeaconParams(pWDA,
10967 (tUpdateBeaconParams *)pMsg->bodyptr);
10968 break;
10969 }
10970 case WDA_SEND_BEACON_REQ:
10971 {
10972 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
10973 break;
10974 }
10975 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
10976 {
10977 WDA_ProcessUpdateProbeRspTemplate(pWDA,
10978 (tSendProbeRespParams *)pMsg->bodyptr);
10979 break;
10980 }
10981#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
10982 case WDA_SET_MAX_TX_POWER_REQ:
10983 {
10984 WDA_ProcessSetMaxTxPowerReq(pWDA,
10985 (tMaxTxPowerParams *)pMsg->bodyptr);
10986 break;
10987 }
10988#endif
schang86c22c42013-03-13 18:41:24 -070010989 case WDA_SET_TX_POWER_REQ:
10990 {
10991 WDA_ProcessSetTxPowerReq(pWDA,
10992 (tSirSetTxPowerReq *)pMsg->bodyptr);
10993 break;
10994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 case WDA_SET_P2P_GO_NOA_REQ:
10996 {
10997 WDA_ProcessSetP2PGONOAReq(pWDA,
10998 (tP2pPsParams *)pMsg->bodyptr);
10999 break;
11000 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011001 /* timer related messages */
11002 case WDA_TIMER_BA_ACTIVITY_REQ:
11003 {
11004 WDA_BaCheckActivity(pWDA) ;
11005 break ;
11006 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011007
11008 /* timer related messages */
11009 case WDA_TIMER_TRAFFIC_STATS_IND:
11010 {
11011 WDA_TimerTrafficStatsInd(pWDA);
11012 break;
11013 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011014#ifdef WLAN_FEATURE_VOWIFI_11R
11015 case WDA_AGGR_QOS_REQ:
11016 {
11017 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11018 break;
11019 }
11020#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 case WDA_FTM_CMD_REQ:
11022 {
11023 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11024 break ;
11025 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011026#ifdef FEATURE_OEM_DATA_SUPPORT
11027 case WDA_START_OEM_DATA_REQ:
11028 {
11029 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11030 break;
11031 }
11032#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 /* Tx Complete Time out Indication */
11034 case WDA_TX_COMPLETE_TIMEOUT_IND:
11035 {
11036 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11037 break;
11038 }
11039 case WDA_WLAN_SUSPEND_IND:
11040 {
11041 WDA_ProcessWlanSuspendInd(pWDA,
11042 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11043 break;
11044 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 case WDA_WLAN_RESUME_REQ:
11046 {
11047 WDA_ProcessWlanResumeReq(pWDA,
11048 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11049 break;
11050 }
11051
11052 case WDA_UPDATE_CF_IND:
11053 {
11054 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11055 pMsg->bodyptr = NULL;
11056 break;
11057 }
11058#ifdef FEATURE_WLAN_SCAN_PNO
11059 case WDA_SET_PNO_REQ:
11060 {
11061 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11062 break;
11063 }
11064 case WDA_UPDATE_SCAN_PARAMS_REQ:
11065 {
11066 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11067 break;
11068 }
11069 case WDA_SET_RSSI_FILTER_REQ:
11070 {
11071 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11072 break;
11073 }
11074#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011075#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011076 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011077 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011078 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011079 break;
11080 }
11081#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 case WDA_SET_TX_PER_TRACKING_REQ:
11083 {
11084 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11085 break;
11086 }
11087
11088#ifdef WLAN_FEATURE_PACKET_FILTERING
11089 case WDA_8023_MULTICAST_LIST_REQ:
11090 {
11091 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11092 break;
11093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011094 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11095 {
11096 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11097 break;
11098 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11100 {
11101 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11102 break;
11103 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11105 {
11106 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11107 break;
11108 }
11109#endif // WLAN_FEATURE_PACKET_FILTERING
11110
11111
11112 case WDA_TRANSMISSION_CONTROL_IND:
11113 {
11114 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11115 break;
11116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011117 case WDA_SET_POWER_PARAMS_REQ:
11118 {
11119 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11120 break;
11121 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011122#ifdef WLAN_FEATURE_GTK_OFFLOAD
11123 case WDA_GTK_OFFLOAD_REQ:
11124 {
11125 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11126 break;
11127 }
11128
11129 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11130 {
11131 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11132 break;
11133 }
11134#endif //WLAN_FEATURE_GTK_OFFLOAD
11135
11136 case WDA_SET_TM_LEVEL_REQ:
11137 {
11138 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11139 break;
11140 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011141#ifdef WLAN_FEATURE_11AC
11142 case WDA_UPDATE_OP_MODE:
11143 {
11144 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11145 {
11146 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11147 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11148 else
11149 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 " VHT OpMode Feature is Not Supported \n");
11151 }
11152 else
11153 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11154 " 11AC Feature is Not Supported \n");
11155 break;
11156 }
11157#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011158#ifdef WLAN_FEATURE_11W
11159 case WDA_EXCLUDE_UNENCRYPTED_IND:
11160 {
11161 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11162 break;
11163 }
11164#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011165#ifdef FEATURE_WLAN_TDLS
11166 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11167 {
11168 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11169 break;
11170 }
11171#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 default:
11173 {
11174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11175 "No Handling for msg type %x in WDA "
11176 ,pMsg->type);
11177 /* Do Nothing? MSG Body should be freed at here */
11178 if(NULL != pMsg->bodyptr)
11179 {
11180 vos_mem_free(pMsg->bodyptr);
11181 }
11182 //WDA_VOS_ASSERT(0) ;
11183 }
11184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011185 return status ;
11186}
11187
Jeff Johnson295189b2012-06-20 16:38:30 -070011188/*
11189 * FUNCTION: WDA_LowLevelIndCallback
11190 * IND API callback from WDI, send Ind to PE
11191 */
11192void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
11193 void* pUserData )
11194{
11195 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
11196#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11197 tSirRSSINotification rssiNotification;
11198#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 if(NULL == pWDA)
11200 {
11201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011202 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 VOS_ASSERT(0);
11204 return ;
11205 }
11206
11207 switch(wdiLowLevelInd->wdiIndicationType)
11208 {
11209 case WDI_RSSI_NOTIFICATION_IND:
11210 {
11211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11212 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011213#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
11214 rssiNotification.bReserved =
11215 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
11216 rssiNotification.bRssiThres1NegCross =
11217 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
11218 rssiNotification.bRssiThres1PosCross =
11219 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
11220 rssiNotification.bRssiThres2NegCross =
11221 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
11222 rssiNotification.bRssiThres2PosCross =
11223 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
11224 rssiNotification.bRssiThres3NegCross =
11225 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
11226 rssiNotification.bRssiThres3PosCross =
11227 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080011228 rssiNotification.avgRssi = (v_S7_t)
11229 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 WLANTL_BMPSRSSIRegionChangedNotification(
11231 pWDA->pVosContext,
11232 &rssiNotification);
11233#endif
11234 break ;
11235 }
11236 case WDI_MISSED_BEACON_IND:
11237 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011238 tpSirSmeMissedBeaconInd pMissBeacInd =
11239 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070011240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11241 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011242 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080011243 if(NULL == pMissBeacInd)
11244 {
11245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11246 "%s: VOS MEM Alloc Failure", __func__);
11247 break;
11248 }
11249 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
11250 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
11251 pMissBeacInd->bssIdx =
11252 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
11253 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 break ;
11255 }
11256 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
11257 {
11258 /* TODO: Decode Ind and send Ind to PE */
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11260 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
11261 break ;
11262 }
11263
11264 case WDI_MIC_FAILURE_IND:
11265 {
11266 tpSirSmeMicFailureInd pMicInd =
11267 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
11268
11269 if(NULL == pMicInd)
11270 {
11271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011272 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 break;
11274 }
11275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11276 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
11278 pMicInd->length = sizeof(tSirSmeMicFailureInd);
11279 vos_mem_copy(pMicInd->bssId,
11280 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
11281 sizeof(tSirMacAddr));
11282 vos_mem_copy(pMicInd->info.srcMacAddr,
11283 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
11284 sizeof(tSirMacAddr));
11285 vos_mem_copy(pMicInd->info.taMacAddr,
11286 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
11287 sizeof(tSirMacAddr));
11288 vos_mem_copy(pMicInd->info.dstMacAddr,
11289 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
11290 sizeof(tSirMacAddr));
11291 vos_mem_copy(pMicInd->info.rxMacAddr,
11292 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
11293 sizeof(tSirMacAddr));
11294 pMicInd->info.multicast =
11295 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
11296 pMicInd->info.keyId=
11297 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
11298 pMicInd->info.IV1=
11299 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
11300 vos_mem_copy(pMicInd->info.TSC,
11301 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070011302 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
11303 (void *)pMicInd , 0) ;
11304 break ;
11305 }
11306 case WDI_FATAL_ERROR_IND:
11307 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070011308 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 /* TODO: Decode Ind and send Ind to PE */
11310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11311 "Received WDI_FATAL_ERROR_IND from WDI ");
11312 break ;
11313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 case WDI_DEL_STA_IND:
11315 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011316 tpDeleteStaContext pDelSTACtx =
11317 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
11318
11319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11320 "Received WDI_DEL_STA_IND from WDI ");
11321 if(NULL == pDelSTACtx)
11322 {
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011325 break;
11326 }
11327 vos_mem_copy(pDelSTACtx->addr2,
11328 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
11329 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 vos_mem_copy(pDelSTACtx->bssId,
11331 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
11332 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 pDelSTACtx->assocId =
11334 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
11335 pDelSTACtx->reasonCode =
11336 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
11337 pDelSTACtx->staId =
11338 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070011339 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
11340 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 break ;
11342 }
11343 case WDI_COEX_IND:
11344 {
11345 tANI_U32 index;
11346 vos_msg_t vosMsg;
11347 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
11348 if(NULL == pSmeCoexInd)
11349 {
11350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011351 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 break;
11353 }
11354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11355 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070011356 /* Message Header */
11357 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
11358 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070011359 /* Info from WDI Indication */
11360 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
11361 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
11362 {
11363 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
11364 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011365 /* VOS message wrapper */
11366 vosMsg.type = eWNI_SME_COEX_IND;
11367 vosMsg.bodyptr = (void *)pSmeCoexInd;
11368 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 /* Send message to SME */
11370 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11371 {
11372 /* free the mem and return */
11373 vos_mem_free((v_VOID_t *)pSmeCoexInd);
11374 }
11375 else
11376 {
11377 /* DEBUG */
11378 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11379 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
11380 pSmeCoexInd->coexIndType,
11381 pSmeCoexInd->coexIndData[0],
11382 pSmeCoexInd->coexIndData[1],
11383 pSmeCoexInd->coexIndData[2],
11384 pSmeCoexInd->coexIndData[3]);
11385 }
11386 break;
11387 }
11388 case WDI_TX_COMPLETE_IND:
11389 {
11390 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
11391 /* Calling TxCompleteAck Indication from wda context*/
11392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11393 "Complete Indication received from HAL");
11394 if( pWDA->pAckTxCbFunc )
11395 {
11396 if( VOS_STATUS_SUCCESS !=
11397 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11398 {
11399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11400 "Tx Complete timeout Timer Stop Failed ");
11401 }
11402 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
11403 pWDA->pAckTxCbFunc = NULL;
11404 }
11405 else
11406 {
11407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11408 "Tx Complete Indication is received after timeout ");
11409 }
11410 break;
11411 }
Viral Modid86bde22012-12-10 13:09:21 -080011412 case WDI_P2P_NOA_START_IND :
11413 {
11414 tSirP2PNoaStart *pP2pNoaStart =
11415 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
11416
11417 if (NULL == pP2pNoaStart)
11418 {
11419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11420 "Memory allocation failure, "
11421 "WDI_P2P_NOA_START_IND not forwarded");
11422 break;
11423 }
11424 pP2pNoaStart->status =
11425 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
11426 pP2pNoaStart->bssIdx =
11427 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
11428 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
11429 (void *)pP2pNoaStart , 0) ;
11430 break;
11431 }
11432
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011433#ifdef FEATURE_WLAN_TDLS
11434 case WDI_TDLS_IND :
11435 {
11436 tSirTdlsInd *pTdlsInd =
11437 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
11438
11439 if (NULL == pTdlsInd)
11440 {
11441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11442 "Memory allocation failure, "
11443 "WDI_TDLS_IND not forwarded");
11444 break;
11445 }
11446 pTdlsInd->status =
11447 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
11448 pTdlsInd->assocId =
11449 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
11450 pTdlsInd->staIdx =
11451 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
11452 pTdlsInd->reasonCode =
11453 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
11454 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
11455 (void *)pTdlsInd , 0) ;
11456 break;
11457 }
11458#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 case WDI_P2P_NOA_ATTR_IND :
11460 {
11461 tSirP2PNoaAttr *pP2pNoaAttr =
11462 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11464 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 if (NULL == pP2pNoaAttr)
11466 {
11467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11468 "Memory allocation failure, "
11469 "WDI_P2P_NOA_ATTR_IND not forwarded");
11470 break;
11471 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 pP2pNoaAttr->index =
11473 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
11474 pP2pNoaAttr->oppPsFlag =
11475 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
11476 pP2pNoaAttr->ctWin =
11477 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
11478
11479 pP2pNoaAttr->uNoa1IntervalCnt =
11480 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
11481 pP2pNoaAttr->uNoa1Duration =
11482 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
11483 pP2pNoaAttr->uNoa1Interval =
11484 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
11485 pP2pNoaAttr->uNoa1StartTime =
11486 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011487 pP2pNoaAttr->uNoa2IntervalCnt =
11488 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
11489 pP2pNoaAttr->uNoa2Duration =
11490 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
11491 pP2pNoaAttr->uNoa2Interval =
11492 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
11493 pP2pNoaAttr->uNoa2StartTime =
11494 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
11496 (void *)pP2pNoaAttr , 0) ;
11497 break;
11498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011499#ifdef FEATURE_WLAN_SCAN_PNO
11500 case WDI_PREF_NETWORK_FOUND_IND:
11501 {
11502 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011503 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
11504 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11505 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
11506 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
11507
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11509 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 if (NULL == pPrefNetworkFoundInd)
11511 {
11512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11513 "Memory allocation failure, "
11514 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
11515 break;
11516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 /* Message Header */
11518 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070011519 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070011520
11521 /* Info from WDI Indication */
11522 pPrefNetworkFoundInd->ssId.length =
11523 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070011525 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
11526 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
11527 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070011528 if (NULL !=
11529 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
11530 {
11531 pPrefNetworkFoundInd->frameLength =
11532 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
11533 vos_mem_copy( pPrefNetworkFoundInd->data,
11534 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
11535 pPrefNetworkFoundInd->frameLength);
11536 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
11537 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
11538 }
11539 else
11540 {
11541 pPrefNetworkFoundInd->frameLength = 0;
11542 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011543 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070011544 /* VOS message wrapper */
11545 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
11546 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
11547 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 /* Send message to SME */
11549 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11550 {
11551 /* free the mem and return */
11552 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
11553 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 break;
11555 }
11556#endif // FEATURE_WLAN_SCAN_PNO
11557
11558#ifdef WLAN_WAKEUP_EVENTS
11559 case WDI_WAKE_REASON_IND:
11560 {
11561 vos_msg_t vosMsg;
11562 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
11563 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
11564 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
11565
11566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11567 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
11568 wdiLowLevelInd->wdiIndicationType,
11569 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
11570 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
11571 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11572
11573 if (NULL == pWakeReasonInd)
11574 {
11575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11576 "Memory allocation failure, "
11577 "WDI_WAKE_REASON_IND not forwarded");
11578 break;
11579 }
11580
11581 vos_mem_zero(pWakeReasonInd, allocSize);
11582
11583 /* Message Header */
11584 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
11585 pWakeReasonInd->mesgLen = allocSize;
11586
11587 /* Info from WDI Indication */
11588 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
11589 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
11590 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
11591 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
11592 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
11593 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
11594 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
11595 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
11596
11597 /* VOS message wrapper */
11598 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
11599 vosMsg.bodyptr = (void *) pWakeReasonInd;
11600 vosMsg.bodyval = 0;
11601
11602 /* Send message to SME */
11603 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11604 {
11605 /* free the mem and return */
11606 vos_mem_free((v_VOID_t *) pWakeReasonInd);
11607 }
11608
11609 break;
11610 }
11611#endif // WLAN_WAKEUP_EVENTS
11612
11613 case WDI_TX_PER_HIT_IND:
11614 {
11615 vos_msg_t vosMsg;
11616 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
11617 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
11618 /* VOS message wrapper */
11619 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
11620 vosMsg.bodyptr = NULL;
11621 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070011622 /* Send message to SME */
11623 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11624 {
11625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
11626 }
11627 break;
11628 }
11629
11630 default:
11631 {
11632 /* TODO error */
11633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11634 "Received UNKNOWN Indication from WDI ");
11635 }
11636 }
11637 return ;
11638}
11639
Jeff Johnson295189b2012-06-20 16:38:30 -070011640/*
11641 * BA related processing in WDA.
11642 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011643void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
11644 void* pUserData)
11645{
11646 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11647 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070011648 if(NULL == pWdaParams)
11649 {
11650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011651 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011652 VOS_ASSERT(0) ;
11653 return ;
11654 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011655 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070011656 vos_mem_free(pWdaParams->wdaMsgParam) ;
11657 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11658 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011660 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011661 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
11662 {
11663 tANI_U8 i = 0 ;
11664 tBaActivityInd *baActivityInd = NULL ;
11665 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
11666 tANI_U8 allocSize = sizeof(tBaActivityInd)
11667 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
11668 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
11669 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011670 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011671 if(NULL == baActivityInd)
11672 {
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 VOS_ASSERT(0) ;
11676 return;
11677 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011678 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
11679 sizeof(tSirMacAddr)) ;
11680 baActivityInd->baCandidateCnt = baCandidateCount ;
11681
11682 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
11683 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
11684
11685 for(i = 0 ; i < baCandidateCount ; i++)
11686 {
11687 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011688 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
11689 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011690 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
11691 {
11692 baCandidate->baInfo[tid].fBaEnable =
11693 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
11694 baCandidate->baInfo[tid].startingSeqNum =
11695 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
11696 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011697 wdiBaCandidate++ ;
11698 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011700 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
11701 }
11702 else
11703 {
11704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11705 "BA Trigger RSP with Failure received ");
11706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011707 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011708}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011709
11710
11711/*
11712 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
11713 * during MCC
11714 */
11715void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
11716{
11717 wpt_uint32 enabled;
11718 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
11719 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
11720 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
11721
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011722 if (NULL == pMac )
11723 {
11724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11725 "%s: Invoked with invalid MAC context ", __func__ );
11726 VOS_ASSERT(0);
11727 return;
11728 }
11729
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011730 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11731 != eSIR_SUCCESS)
11732 {
11733 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11734 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11735 return;
11736 }
11737
11738 if(!enabled)
11739 {
11740 return;
11741 }
11742
11743 if(NULL == pWDA)
11744 {
11745 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11746 "%s:WDA context is NULL", __func__);
11747 VOS_ASSERT(0);
11748 return;
11749 }
11750
11751 if(activate)
11752 {
11753 if( VOS_STATUS_SUCCESS !=
11754 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11755 {
11756 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11757 "Traffic Stats Timer Start Failed ");
11758 return;
11759 }
11760 WDI_DS_ActivateTrafficStats();
11761 }
11762 else
11763 {
11764 WDI_DS_DeactivateTrafficStats();
11765 WDI_DS_ClearTrafficStats();
11766
11767 if( VOS_STATUS_SUCCESS !=
11768 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11769 {
11770 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11771 "Traffic Stats Timer Stop Failed ");
11772 return;
11773 }
11774 }
11775}
11776
11777/*
11778 * Traffic Stats Timer handler
11779 */
11780void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
11781{
11782 WDI_Status wdiStatus;
11783 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
11784 WDI_TrafficStatsIndType trafficStatsIndParams;
11785 wpt_uint32 length, enabled;
11786 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11787
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053011788 if (NULL == pMac )
11789 {
11790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11791 "%s: Invoked with invalid MAC context ", __func__ );
11792 VOS_ASSERT(0);
11793 return;
11794 }
11795
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011796 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
11797 != eSIR_SUCCESS)
11798 {
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11800 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
11801 return;
11802 }
11803
11804 if(!enabled)
11805 {
11806 WDI_DS_DeactivateTrafficStats();
11807 return;
11808 }
11809
11810 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
11811
11812 if(pWdiTrafficStats != NULL)
11813 {
11814 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
11815 trafficStatsIndParams.length = length;
11816 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080011817 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011818 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11819 trafficStatsIndParams.pUserData = pWDA;
11820
11821 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
11822
11823 if(WDI_STATUS_PENDING == wdiStatus)
11824 {
11825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11826 "Pending received for %s:%d ",__func__,__LINE__ );
11827 }
11828 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
11829 {
11830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11831 "Failure in %s:%d ",__func__,__LINE__ );
11832 }
11833
11834 WDI_DS_ClearTrafficStats();
11835 }
11836 else
11837 {
11838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11839 "pWdiTrafficStats is Null");
11840 }
11841
11842 if( VOS_STATUS_SUCCESS !=
11843 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
11844 {
11845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
11846 "Traffic Stats Timer Start Failed ");
11847 return;
11848 }
11849}
11850
Jeff Johnson295189b2012-06-20 16:38:30 -070011851/*
11852 * BA Activity check timer handler
11853 */
11854void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
11855{
11856 tANI_U8 curSta = 0 ;
11857 tANI_U8 tid = 0 ;
11858 tANI_U8 size = 0 ;
11859 tANI_U8 baCandidateCount = 0 ;
11860 tANI_U8 newBaCandidate = 0 ;
11861 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
11862
11863 if(NULL == pWDA)
11864 {
11865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011866 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011867 VOS_ASSERT(0);
11868 return ;
11869 }
11870 if(WDA_MAX_STA < pWDA->wdaMaxSta)
11871 {
11872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11873 "Inconsistent STA entries in WDA");
11874 VOS_ASSERT(0) ;
11875 }
11876 /* walk through all STA entries and find out TX packet count */
11877 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
11878 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080011879#ifdef WLAN_SOFTAP_VSTA_FEATURE
11880 // We can only do BA on "hard" STAs.
11881 if (!(IS_HWSTA_IDX(curSta)))
11882 {
11883 continue;
11884 }
11885#endif //WLAN_SOFTAP_VSTA_FEATURE
11886 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
11887 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011888 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011889 tANI_U32 txPktCount = 0 ;
11890 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011891 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011892 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
11893 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070011894 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
11895 curSta, tid, &txPktCount)))
11896 {
11897#if 0
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11899 "************* %d:%d, %d ",curSta, txPktCount,
11900 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
11901#endif
11902 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070011903 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
11905 curSta, tid)))
11906 {
11907 /* get prepare for sending message to HAL */
11908 //baCandidate[baCandidateCount].staIdx = curSta ;
11909 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
11910 newBaCandidate = WDA_ENABLE_BA ;
11911 }
11912 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
11913 }
11914 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011915 /* fill the entry for all the sta with given TID's */
11916 if(WDA_ENABLE_BA == newBaCandidate)
11917 {
11918 /* move to next BA candidate */
11919 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
11920 size += sizeof(WDI_TriggerBAReqCandidateType) ;
11921 baCandidateCount++ ;
11922 newBaCandidate = WDA_DISABLE_BA ;
11923 }
11924 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011925 /* prepare and send message to hal */
11926 if( 0 < baCandidateCount)
11927 {
11928 WDI_Status status = WDI_STATUS_SUCCESS ;
11929 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
11930 tWDA_ReqParams *pWdaParams =
11931 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011932 if(NULL == pWdaParams)
11933 {
11934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 VOS_ASSERT(0) ;
11937 return;
11938 }
11939 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
11940 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
11941 if(NULL == wdiTriggerBaReq)
11942 {
11943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011945 VOS_ASSERT(0) ;
11946 vos_mem_free(pWdaParams);
11947 return;
11948 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011949 do
11950 {
11951 WDI_TriggerBAReqinfoType *triggerBaInfo =
11952 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
11953 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
11954 /* TEMP_FIX: Need to see if WDI need check for assoc session for
11955 * for each request */
11956 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
11957 triggerBaInfo->ucBASessionID = 0;
11958 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
11959 } while(0) ;
11960 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
11961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011962 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011963 pWdaParams->pWdaContext = pWDA;
11964 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
11965 pWdaParams->wdaMsgParam = NULL;
11966 status = WDI_TriggerBAReq(wdiTriggerBaReq,
11967 WDA_TriggerBaReqCallback, pWdaParams) ;
11968 if(IS_WDI_STATUS_FAILURE(status))
11969 {
11970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11971 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
11972 vos_mem_free(pWdaParams->wdaMsgParam) ;
11973 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11974 vos_mem_free(pWdaParams) ;
11975 }
11976 }
11977 else
11978 {
11979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
11980 "There is no TID for initiating BA");
11981 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011982 if( VOS_STATUS_SUCCESS !=
11983 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11984 {
11985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11986 "BA Activity Timer Stop Failed ");
11987 return ;
11988 }
11989 if( VOS_STATUS_SUCCESS !=
11990 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
11991 {
11992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11993 "BA Activity Timer Start Failed ");
11994 return;
11995 }
11996 return ;
11997}
Jeff Johnson295189b2012-06-20 16:38:30 -070011998/*
11999 * WDA common routine to create timer used by WDA.
12000 */
12001static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
12002{
Jeff Johnson295189b2012-06-20 16:38:30 -070012003 VOS_STATUS status = VOS_STATUS_SUCCESS ;
12004 tANI_U32 val = 0 ;
12005 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12006
12007 if(NULL == pMac)
12008 {
12009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012010 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012011 VOS_ASSERT(0);
12012 return VOS_STATUS_E_FAILURE;
12013 }
12014 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
12015 != eSIR_SUCCESS)
12016 {
12017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12018 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
12019 return VOS_STATUS_E_FAILURE;
12020 }
12021 val = SYS_MS_TO_TICKS(val) ;
12022
12023 /* BA activity check timer */
12024 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
12025 "BA Activity Check timer", WDA_TimerHandler,
12026 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
12027 if(status != TX_SUCCESS)
12028 {
12029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12030 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012031 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012033 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012034 /* Tx Complete Timeout timer */
12035 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
12036 "Tx Complete Check timer", WDA_TimerHandler,
12037 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012038 if(status != TX_SUCCESS)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12041 "Unable to create Tx Complete Timeout timer");
12042 /* Destroy timer of BA activity check timer */
12043 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12044 if(status != TX_SUCCESS)
12045 {
12046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12047 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012048 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012049 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012050 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012051 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012052
12053 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
12054
12055 /* Traffic Stats timer */
12056 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
12057 "Traffic Stats timer", WDA_TimerHandler,
12058 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
12059 if(status != TX_SUCCESS)
12060 {
12061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12062 "Unable to create traffic stats timer");
12063 /* Destroy timer of BA activity check timer */
12064 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12065 if(status != TX_SUCCESS)
12066 {
12067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12068 "Unable to Destroy BA activity timer");
12069 }
12070 /* Destroy timer of tx complete timer */
12071 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12072 if(status != TX_SUCCESS)
12073 {
12074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12075 "Unable to Tx complete timer");
12076 }
12077 return VOS_STATUS_E_FAILURE ;
12078 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080012079 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012080}
Jeff Johnson295189b2012-06-20 16:38:30 -070012081/*
12082 * WDA common routine to destroy timer used by WDA.
12083 */
12084static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
12085{
12086 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
12088 if(status != TX_SUCCESS)
12089 {
12090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12091 "Unable to Destroy Tx Complete Timeout timer");
12092 return eSIR_FAILURE ;
12093 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012094 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
12095 if(status != TX_SUCCESS)
12096 {
12097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12098 "Unable to Destroy BA activity timer");
12099 return eSIR_FAILURE ;
12100 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012101 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
12102 if(status != TX_SUCCESS)
12103 {
12104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12105 "Unable to Destroy traffic stats timer");
12106 return eSIR_FAILURE ;
12107 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012108 return eSIR_SUCCESS ;
12109}
Jeff Johnson295189b2012-06-20 16:38:30 -070012110/*
12111 * WDA timer handler.
12112 */
12113void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
12114{
12115 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
12116 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012117 /*
12118 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
12119 */
12120 wdaMsg.type = timerInfo ;
12121 wdaMsg.bodyptr = NULL;
12122 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012123 /* post the message.. */
12124 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
12125 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
12126 {
12127 vosStatus = VOS_STATUS_E_BADMSG;
12128 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012129}
Jeff Johnson295189b2012-06-20 16:38:30 -070012130/*
12131 * WDA Tx Complete timeout Indication.
12132 */
12133void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
12134{
12135 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012136 if( pWDA->pAckTxCbFunc )
12137 {
12138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12139 "TxComplete timer expired\n");
12140 pWDA->pAckTxCbFunc( pMac, 0);
12141 pWDA->pAckTxCbFunc = NULL;
12142 }
12143 else
12144 {
12145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12146 "There is no request pending for TxComplete and wait timer expired\n");
12147 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012148}
Jeff Johnson295189b2012-06-20 16:38:30 -070012149/*
12150 * WDA Set REG Domain to VOS NV
12151 */
12152eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
12153{
12154 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
12155 {
12156 return eHAL_STATUS_INVALID_PARAMETER;
12157 }
12158 return eHAL_STATUS_SUCCESS;
12159}
Jeff Johnson295189b2012-06-20 16:38:30 -070012160
Jeff Johnson295189b2012-06-20 16:38:30 -070012161#ifdef FEATURE_WLAN_SCAN_PNO
12162/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012163 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012164 *
12165 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012166void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012167{
12168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012170 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012171 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012172 {
12173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012174 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012175 VOS_ASSERT(0) ;
12176 return ;
12177 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012178
Yue Ma7f44bbe2013-04-12 11:47:39 -070012179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12180 vos_mem_free(pWdaParams->wdaMsgParam);
12181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012182
12183 return ;
12184}
Jeff Johnson295189b2012-06-20 16:38:30 -070012185/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012186 * FUNCTION: WDA_PNOScanReqCallback
12187 * Free memory.
12188 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
12189 */
12190void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012191{
Yue Ma7f44bbe2013-04-12 11:47:39 -070012192 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12193
12194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12195 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12196
12197 if(NULL == pWdaParams)
12198 {
12199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12200 "%s: pWdaParams received NULL", __func__);
12201 VOS_ASSERT(0);
12202 return;
12203 }
12204
12205 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12206 {
12207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12208 vos_mem_free(pWdaParams->wdaMsgParam);
12209 vos_mem_free(pWdaParams);
12210 }
12211
12212 return;
12213}
12214/*
12215 * FUNCTION: WDA_UpdateScanParamsRespCallback
12216 *
12217 */
12218void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
12219{
12220 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012222 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012223 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 {
12225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012226 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012227 VOS_ASSERT(0) ;
12228 return ;
12229 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012230
12231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12232 vos_mem_free(pWdaParams->wdaMsgParam);
12233 vos_mem_free(pWdaParams);
12234
Jeff Johnson295189b2012-06-20 16:38:30 -070012235 return ;
12236}
Jeff Johnson295189b2012-06-20 16:38:30 -070012237/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012238 * FUNCTION: WDA_UpdateScanParamsReqCallback
12239 * Free memory.
12240 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
12241 */
12242void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12243{
12244 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12245
12246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12247 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12248
12249 if(NULL == pWdaParams)
12250 {
12251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12252 "%s: pWdaParams received NULL", __func__);
12253 VOS_ASSERT(0);
12254 return;
12255 }
12256
12257 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12258 {
12259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12260 vos_mem_free(pWdaParams->wdaMsgParam);
12261 vos_mem_free(pWdaParams);
12262 }
12263
12264 return;
12265}
12266/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012267 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12268 * Request to WDI to set Preferred Network List.Offload
12269 */
12270VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
12271 tSirPNOScanReq *pPNOScanReqParams)
12272{
Jeff Johnson43971f52012-07-17 12:26:56 -070012273 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012274 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
12275 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
12276 tWDA_ReqParams *pWdaParams ;
12277 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012280 if(NULL == pwdiPNOScanReqInfo)
12281 {
12282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012284 VOS_ASSERT(0);
12285 return VOS_STATUS_E_NOMEM;
12286 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12288 if(NULL == pWdaParams)
12289 {
12290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012292 VOS_ASSERT(0);
12293 vos_mem_free(pwdiPNOScanReqInfo);
12294 return VOS_STATUS_E_NOMEM;
12295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012296 //
12297 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
12298 //
12299 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
12300 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070012301 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
12302 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
12303 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012304 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
12305 {
12306 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
12307 &pPNOScanReqParams->aNetworks[i],
12308 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
12309 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012310 /*Scan timer intervals*/
12311 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
12312 &pPNOScanReqParams->scanTimers,
12313 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070012314 /*Probe template for 2.4GHz band*/
12315 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
12316 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12317 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012318 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
12319 pPNOScanReqParams->p24GProbeTemplate,
12320 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070012321 /*Probe template for 5GHz band*/
12322 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
12323 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12324 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070012325 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
12326 pPNOScanReqParams->p5GProbeTemplate,
12327 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012328 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
12329 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012330
Jeff Johnson295189b2012-06-20 16:38:30 -070012331 /* Store Params pass it to WDI */
12332 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
12333 pWdaParams->pWdaContext = pWDA;
12334 /* Store param pointer as passed in by caller */
12335 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012336 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012337 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012338 if(IS_WDI_STATUS_FAILURE(status))
12339 {
12340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12341 "Failure in Set PNO REQ WDI API, free all the memory " );
12342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12343 vos_mem_free(pWdaParams->wdaMsgParam);
12344 pWdaParams->wdaWdiApiMsgParam = NULL;
12345 pWdaParams->wdaMsgParam = NULL;
12346 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012347 return CONVERT_WDI2VOS_STATUS(status) ;
12348}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012349
12350#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12351
12352void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
12353{
12354 /*Convert the CSR Auth types to WDI Auth types */
12355 switch (csrAuthType)
12356 {
12357 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
12358 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12359 break;
12360#ifdef FEATURE_WLAN_CCX
12361 case eCSR_AUTH_TYPE_CCKM_WPA:
12362 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
12363 break;
12364#endif
12365 case eCSR_AUTH_TYPE_WPA:
12366 *AuthType = eWDA_AUTH_TYPE_WPA;
12367 break;
12368 case eCSR_AUTH_TYPE_WPA_PSK:
12369 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
12370 break;
12371#ifdef FEATURE_WLAN_CCX
12372 case eCSR_AUTH_TYPE_CCKM_RSN:
12373 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
12374 break;
12375#endif
12376 case eCSR_AUTH_TYPE_RSN:
12377 *AuthType = eWDA_AUTH_TYPE_RSN;
12378 break;
12379 case eCSR_AUTH_TYPE_RSN_PSK:
12380 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
12381 break;
12382#if defined WLAN_FEATURE_VOWIFI_11R
12383 case eCSR_AUTH_TYPE_FT_RSN:
12384 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
12385 break;
12386 case eCSR_AUTH_TYPE_FT_RSN_PSK:
12387 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
12388 break;
12389#endif
12390#ifdef FEATURE_WLAN_WAPI
12391 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
12392 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
12393 break;
12394 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
12395 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
12396 break;
12397#endif /* FEATURE_WLAN_WAPI */
12398 case eCSR_AUTH_TYPE_SHARED_KEY:
12399 case eCSR_AUTH_TYPE_AUTOSWITCH:
12400 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
12401 break;
12402#if 0
12403 case eCSR_AUTH_TYPE_SHARED_KEY:
12404 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
12405 break;
12406 case eCSR_AUTH_TYPE_AUTOSWITCH:
12407 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
12408#endif
12409 default:
12410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12411 "%s: Unknown Auth Type", __func__);
12412 break;
12413 }
12414}
12415void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
12416{
12417 switch (csrEncrType)
12418 {
12419 case eCSR_ENCRYPT_TYPE_NONE:
12420 *EncrType = WDI_ED_NONE;
12421 break;
12422 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
12423 case eCSR_ENCRYPT_TYPE_WEP40:
12424 *EncrType = WDI_ED_WEP40;
12425 break;
12426 case eCSR_ENCRYPT_TYPE_WEP104:
12427 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
12428 *EncrType = WDI_ED_WEP104;
12429 break;
12430 case eCSR_ENCRYPT_TYPE_TKIP:
12431 *EncrType = WDI_ED_TKIP;
12432 break;
12433 case eCSR_ENCRYPT_TYPE_AES:
12434 *EncrType = WDI_ED_CCMP;
12435 break;
12436#ifdef WLAN_FEATURE_11W
12437 case eCSR_ENCRYPT_TYPE_AES_CMAC:
12438 *EncrType = WDI_ED_AES_128_CMAC;
12439 break;
12440#endif
12441#ifdef FEATURE_WLAN_WAPI
12442 case eCSR_ENCRYPT_TYPE_WPI:
12443 *EncrType = WDI_ED_WPI;
12444 break;
12445#endif
12446 case eCSR_ENCRYPT_TYPE_ANY:
12447 *EncrType = WDI_ED_ANY;
12448 break;
12449
12450 default:
12451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12452 "%s: Unknown Encryption Type", __func__);
12453 break;
12454 }
12455}
12456
12457/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012458 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012459 * Request to WDI to set Roam Offload Scan
12460 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012461VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012462 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
12463{
12464 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012465 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
12466 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012467 tWDA_ReqParams *pWdaParams ;
12468 v_U8_t csrAuthType;
12469 WDI_RoamNetworkType *pwdiRoamNetworkType;
12470 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
12471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12472 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012473 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012474 {
12475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12476 "%s: VOS MEM Alloc Failure", __func__);
12477 VOS_ASSERT(0);
12478 return VOS_STATUS_E_NOMEM;
12479 }
12480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12481 if (NULL == pWdaParams)
12482 {
12483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12484 "%s: VOS MEM Alloc Failure", __func__);
12485 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012486 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012487 return VOS_STATUS_E_NOMEM;
12488 }
12489
12490 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012491 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012492 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012493 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
12494 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012495 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
12496 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
12497 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
12498 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
12499 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
12500 sizeof(pwdiRoamNetworkType->currAPbssid));
12501 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
12502 csrAuthType);
12503 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
12504 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
12505 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
12506 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
12507 pwdiRoamOffloadScanInfo->LookupThreshold =
12508 pRoamOffloadScanReqParams->LookupThreshold ;
12509 pwdiRoamOffloadScanInfo->RoamRssiDiff =
12510 pRoamOffloadScanReqParams->RoamRssiDiff ;
12511 pwdiRoamOffloadScanInfo->Command =
12512 pRoamOffloadScanReqParams->Command ;
12513 pwdiRoamOffloadScanInfo->StartScanReason =
12514 pRoamOffloadScanReqParams->StartScanReason ;
12515 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
12516 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
12517 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
12518 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
12519 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
12520 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
12521 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
12522 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
12523 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
12524 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
12525 pwdiRoamOffloadScanInfo->IsCCXEnabled =
12526 pRoamOffloadScanReqParams->IsCCXEnabled ;
12527 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
12528 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
12529 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
12530 pwdiRoamNetworkType->ssId.ucLength =
12531 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
12532 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
12533 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
12534 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
12535 pwdiRoamNetworkType->ChannelCount =
12536 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
12537 pwdiRoamOffloadScanInfo->ChannelCacheType =
12538 pRoamOffloadScanReqParams->ChannelCacheType;
12539 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
12540 pRoamOffloadScanReqParams->ValidChannelList,
12541 pRoamOffloadScanReqParams->ValidChannelCount);
12542 pwdiRoamOffloadScanInfo->ValidChannelCount =
12543 pRoamOffloadScanReqParams->ValidChannelCount;
12544 pwdiRoamOffloadScanInfo->us24GProbeSize =
12545 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12546 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12547 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
12548 pRoamOffloadScanReqParams->p24GProbeTemplate,
12549 pwdiRoamOffloadScanInfo->us24GProbeSize);
12550 pwdiRoamOffloadScanInfo->us5GProbeSize =
12551 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
12552 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
12553 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
12554 pRoamOffloadScanReqParams->p5GProbeTemplate,
12555 pwdiRoamOffloadScanInfo->us5GProbeSize);
12556 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
12557 pRoamOffloadScanReqParams->MDID.mdiePresent;
12558 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
12559 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012560 pwdiRoamOffloadScanInfo->nProbes =
12561 pRoamOffloadScanReqParams->nProbes;
12562 pwdiRoamOffloadScanInfo->HomeAwayTime =
12563 pRoamOffloadScanReqParams->HomeAwayTime;
12564 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012565 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012566 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012567 pWdaParams->pWdaContext = pWDA;
12568 /* Store param pointer as passed in by caller */
12569 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012570 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012571 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
12572 if(IS_WDI_STATUS_FAILURE(status))
12573 {
12574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12575 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
12576 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12577 vos_mem_free(pWdaParams->wdaMsgParam);
12578 pWdaParams->wdaWdiApiMsgParam = NULL;
12579 pWdaParams->wdaMsgParam = NULL;
12580 }
12581 return CONVERT_WDI2VOS_STATUS(status) ;
12582}
12583#endif
12584
Jeff Johnson295189b2012-06-20 16:38:30 -070012585/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012586 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 *
12588 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012589void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012590{
12591 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12592
12593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012594 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012595
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012596 if(NULL == pWdaParams)
12597 {
12598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012599 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012600 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070012601 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012602 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012603
Jeff Johnson295189b2012-06-20 16:38:30 -070012604 vos_mem_free(pWdaParams->wdaMsgParam) ;
12605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12606 vos_mem_free(pWdaParams) ;
12607
12608 return ;
12609}
12610/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012611 * FUNCTION: WDA_RssiFilterReqCallback
12612 * Free memory.
12613 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
12614 */
12615void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
12616{
12617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12618
12619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12620 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12621
12622 if(NULL == pWdaParams)
12623 {
12624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12625 "%s: pWdaParams received NULL", __func__);
12626 VOS_ASSERT(0);
12627 return;
12628 }
12629
12630 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12631 {
12632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12633 vos_mem_free(pWdaParams->wdaMsgParam);
12634 vos_mem_free(pWdaParams);
12635 }
12636
12637 return;
12638}
12639/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012640 * FUNCTION: WDA_ProcessSetPreferredNetworkList
12641 * Request to WDI to set Preferred Network List.Offload
12642 */
12643VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
12644 tSirSetRSSIFilterReq* pRssiFilterParams)
12645{
Jeff Johnson43971f52012-07-17 12:26:56 -070012646 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012647 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
12648 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
12649 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012651 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012652 if(NULL == pwdiSetRssiFilterReqInfo)
12653 {
12654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012655 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012656 VOS_ASSERT(0);
12657 return VOS_STATUS_E_NOMEM;
12658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12660 if(NULL == pWdaParams)
12661 {
12662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012663 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012664 VOS_ASSERT(0);
12665 vos_mem_free(pwdiSetRssiFilterReqInfo);
12666 return VOS_STATUS_E_NOMEM;
12667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070012669 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
12670 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012671
Jeff Johnson295189b2012-06-20 16:38:30 -070012672 /* Store Params pass it to WDI */
12673 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
12674 pWdaParams->pWdaContext = pWDA;
12675 /* Store param pointer as passed in by caller */
12676 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012678 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012679 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012680 if(IS_WDI_STATUS_FAILURE(status))
12681 {
12682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12683 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
12684 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12685 vos_mem_free(pWdaParams->wdaMsgParam);
12686 pWdaParams->wdaWdiApiMsgParam = NULL;
12687 pWdaParams->wdaMsgParam = NULL;
12688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012689 return CONVERT_WDI2VOS_STATUS(status) ;
12690}
12691
Jeff Johnson295189b2012-06-20 16:38:30 -070012692/*
12693 * FUNCTION: WDA_ProcessUpdateScanParams
12694 * Request to WDI to update Scan Parameters
12695 */
12696VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
12697 tSirUpdateScanParams *pUpdateScanParams)
12698{
Jeff Johnson43971f52012-07-17 12:26:56 -070012699 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012700 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
12701 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
12702 sizeof(WDI_UpdateScanParamsInfoType)) ;
12703 tWDA_ReqParams *pWdaParams ;
12704 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012706 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 if(NULL == wdiUpdateScanParamsInfoType)
12708 {
12709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012710 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012711 VOS_ASSERT(0);
12712 return VOS_STATUS_E_NOMEM;
12713 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12715 if ( NULL == pWdaParams )
12716 {
12717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012718 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012719 VOS_ASSERT(0);
12720 vos_mem_free(wdiUpdateScanParamsInfoType);
12721 return VOS_STATUS_E_NOMEM;
12722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012723 //
12724 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
12725 //
Jeff Johnson295189b2012-06-20 16:38:30 -070012726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12727 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
12728 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
12729 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
12730 "sir struct %d wdi struct %d",
12731 pUpdateScanParams->b11dEnabled,
12732 pUpdateScanParams->b11dResolved,
12733 pUpdateScanParams->ucChannelCount,
12734 pUpdateScanParams->usPassiveMinChTime,
12735 pUpdateScanParams->usPassiveMaxChTime,
12736 pUpdateScanParams->usActiveMinChTime,
12737 pUpdateScanParams->usActiveMaxChTime,
12738 sizeof(tSirUpdateScanParams),
12739 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
12740
Jeff Johnson295189b2012-06-20 16:38:30 -070012741 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
12742 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070012743 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
12744 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070012745 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
12746 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070012747 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
12748 pUpdateScanParams->usActiveMaxChTime;
12749 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
12750 pUpdateScanParams->usActiveMinChTime;
12751 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
12752 pUpdateScanParams->usPassiveMaxChTime;
12753 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
12754 pUpdateScanParams->usPassiveMinChTime;
12755
Jeff Johnson295189b2012-06-20 16:38:30 -070012756 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053012757 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
12758 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070012759
Jeff Johnson295189b2012-06-20 16:38:30 -070012760 for ( i = 0; i <
12761 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
12762 i++)
12763 {
12764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12765 "Update Scan Parameters channel: %d",
12766 pUpdateScanParams->aChannels[i]);
12767
12768 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
12769 pUpdateScanParams->aChannels[i];
12770 }
12771
Yue Ma7f44bbe2013-04-12 11:47:39 -070012772 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
12773 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012774
Jeff Johnson295189b2012-06-20 16:38:30 -070012775 /* Store Params pass it to WDI */
12776 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
12777 pWdaParams->pWdaContext = pWDA;
12778 /* Store param pointer as passed in by caller */
12779 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070012780
Jeff Johnson295189b2012-06-20 16:38:30 -070012781
12782
12783 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012784 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070012785 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070012786 if(IS_WDI_STATUS_FAILURE(status))
12787 {
12788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12789 "Failure in Update Scan Params EQ WDI API, free all the memory " );
12790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
12791 vos_mem_free(pWdaParams->wdaMsgParam);
12792 vos_mem_free(pWdaParams);
12793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012794 return CONVERT_WDI2VOS_STATUS(status) ;
12795}
12796#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012797
12798#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
12799/*
12800 * FUNCTION: WDA_RoamOffloadScanReqCallback
12801 *
12802 */
12803void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
12804{
12805 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012806 vos_msg_t vosMsg;
12807 wpt_uint8 reason = 0;
12808
12809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012810 "<------ %s " ,__func__);
12811 if (NULL == pWdaParams)
12812 {
12813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12814 "%s: pWdaParams received NULL", __func__);
12815 VOS_ASSERT(0) ;
12816 return ;
12817 }
12818 if ( pWdaParams != NULL )
12819 {
12820 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
12821 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012822 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012823 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12824 }
12825 if ( pWdaParams->wdaMsgParam != NULL)
12826 {
12827 vos_mem_free(pWdaParams->wdaMsgParam);
12828 }
12829
12830 vos_mem_free(pWdaParams) ;
12831 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070012832 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
12833 vosMsg.bodyptr = NULL;
12834 if (WDI_STATUS_SUCCESS != status)
12835 {
12836 reason = 0;
12837 }
12838 vosMsg.bodyval = reason;
12839 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12840 {
12841 /* free the mem and return */
12842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12843 "Failed to post the rsp to UMAC" ,__func__);
12844 }
12845
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012846 return ;
12847}
12848#endif
12849
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012850/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012851 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012852 *
12853 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012854void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012855{
12856 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12857
12858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12859 "<------ %s " ,__func__);
12860
12861 if(NULL == pWdaParams)
12862 {
12863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12864 "%s: pWdaParams received NULL", __func__);
12865 VOS_ASSERT(0);
12866 return;
12867 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012868
12869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12870 vos_mem_free(pWdaParams->wdaMsgParam);
12871 vos_mem_free(pWdaParams);
12872
12873 return;
12874}
12875/*
12876 * FUNCTION: WDA_SetPowerParamsReqCallback
12877 * Free memory.
12878 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
12879 */
12880void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
12881{
12882 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12883
12884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12885 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12886
12887 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012888 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070012889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12890 "%s: pWdaParams received NULL", __func__);
12891 VOS_ASSERT(0);
12892 return;
12893 }
12894
12895 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12896 {
12897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12898 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012899 vos_mem_free(pWdaParams);
12900 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070012901
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080012902 return;
12903}
12904
Jeff Johnson295189b2012-06-20 16:38:30 -070012905#ifdef WLAN_FEATURE_PACKET_FILTERING
12906/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012907 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070012908 *
12909 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070012910void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012911 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
12912 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070012913{
12914 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070012915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012916 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012917 if(NULL == pWdaParams)
12918 {
12919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012920 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012921 VOS_ASSERT(0) ;
12922 return ;
12923 }
12924
12925 vos_mem_free(pWdaParams->wdaMsgParam) ;
12926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12927 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012928 //print a msg, nothing else to do
12929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070012930 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070012931 return ;
12932}
Jeff Johnson295189b2012-06-20 16:38:30 -070012933/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070012934 * FUNCTION: WDA_8023MulticastListReqCallback
12935 * Free memory.
12936 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
12937 */
12938void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
12939{
12940 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12941
12942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12943 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
12944
12945 if(NULL == pWdaParams)
12946 {
12947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12948 "%s: pWdaParams received NULL", __func__);
12949 VOS_ASSERT(0);
12950 return;
12951 }
12952
12953 if(IS_WDI_STATUS_FAILURE(wdiStatus))
12954 {
12955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12956 vos_mem_free(pWdaParams->wdaMsgParam);
12957 vos_mem_free(pWdaParams);
12958 }
12959
12960 return;
12961}
12962/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012963 * FUNCTION: WDA_Process8023MulticastListReq
12964 * Request to WDI to add 8023 Multicast List
12965 */
12966VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
12967 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
12968{
Jeff Johnson43971f52012-07-17 12:26:56 -070012969 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070012970 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
12971 tWDA_ReqParams *pWdaParams ;
12972 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070012973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012974 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 pwdiFltPktSetMcListReqParamsType =
12976 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
12977 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
12978 ) ;
12979 if(NULL == pwdiFltPktSetMcListReqParamsType)
12980 {
12981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012982 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 return VOS_STATUS_E_NOMEM;
12984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012985 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
12986 if(NULL == pWdaParams)
12987 {
12988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012989 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012990 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
12991 return VOS_STATUS_E_NOMEM;
12992 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070012993
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 //
12995 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
12996 //
12997 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070012998 pRcvFltMcAddrList->ulMulticastAddrCnt;
12999
13000 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
13001 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
13002 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
13003 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
13004
Jeff Johnson295189b2012-06-20 16:38:30 -070013005 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
13006 {
13007 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
13008 &(pRcvFltMcAddrList->multicastAddr[i]),
13009 sizeof(tSirMacAddr));
13010 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013011 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
13012 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013013
Jeff Johnson295189b2012-06-20 16:38:30 -070013014 /* Store Params pass it to WDI */
13015 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
13016 pWdaParams->pWdaContext = pWDA;
13017 /* Store param pointer as passed in by caller */
13018 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070013019 status = WDI_8023MulticastListReq(
13020 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013021 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013022 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013023 if(IS_WDI_STATUS_FAILURE(status))
13024 {
13025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13026 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
13027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13028 vos_mem_free(pWdaParams->wdaMsgParam);
13029 vos_mem_free(pWdaParams);
13030 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013031 return CONVERT_WDI2VOS_STATUS(status) ;
13032}
Jeff Johnson295189b2012-06-20 16:38:30 -070013033/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013034 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013035 *
13036 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013037void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013038 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
13039 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013040{
13041 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013043 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013044 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 if(NULL == pWdaParams)
13046 {
13047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013048 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013049 VOS_ASSERT(0) ;
13050 return ;
13051 }
13052
13053 vos_mem_free(pWdaParams->wdaMsgParam) ;
13054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13055 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 //print a msg, nothing else to do
13057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013058 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013059 return ;
13060}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013061
13062/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013063 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
13064 * Free memory.
13065 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013066 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013067void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013068 void* pUserData)
13069{
13070 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13071
13072 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13073 "<------ %s, wdiStatus: %d",
13074 __func__, wdiStatus);
13075
13076 if (NULL == pWdaParams)
13077 {
13078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13079 "%s: Invalid pWdaParams pointer", __func__);
13080 VOS_ASSERT(0);
13081 return;
13082 }
13083
13084 if (IS_WDI_STATUS_FAILURE(wdiStatus))
13085 {
13086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13087 vos_mem_free(pWdaParams->wdaMsgParam);
13088 vos_mem_free(pWdaParams);
13089 }
13090
13091 return;
13092}
13093
Jeff Johnson295189b2012-06-20 16:38:30 -070013094/*
13095 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
13096 * Request to WDI to set Receive Filters
13097 */
13098VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
13099 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
13100{
Jeff Johnson43971f52012-07-17 12:26:56 -070013101 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013102 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
13103 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
13104 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
13105 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
13106 tWDA_ReqParams *pWdaParams ;
13107 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013109 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013110 if(NULL == pwdiSetRcvPktFilterReqParamsType)
13111 {
13112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 VOS_ASSERT(0);
13115 return VOS_STATUS_E_NOMEM;
13116 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013117 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13118 if(NULL == pWdaParams)
13119 {
13120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013121 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013122 VOS_ASSERT(0);
13123 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
13124 return VOS_STATUS_E_NOMEM;
13125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013126 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
13127 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
13128 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
13129 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070013130 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
13131 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
13132
13133 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
13134 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013135
13136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13137 "FID %d FT %d NParams %d CT %d",
13138 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
13139 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
13140 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
13141 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070013142 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
13143 {
13144 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
13145 &pRcvPktFilterCfg->paramsData[i],
13146 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070013147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13148 "Proto %d Comp Flag %d \n",
13149 pwdiSetRcvPktFilterReqParamsType->
13150 wdiPktFilterCfg.paramsData[i].protocolLayer,
13151 pwdiSetRcvPktFilterReqParamsType->
13152 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070013153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13154 "Data Offset %d Data Len %d\n",
13155 pwdiSetRcvPktFilterReqParamsType->
13156 wdiPktFilterCfg.paramsData[i].dataOffset,
13157 pwdiSetRcvPktFilterReqParamsType->
13158 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070013159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13160 "CData: %d:%d:%d:%d:%d:%d\n",
13161 pwdiSetRcvPktFilterReqParamsType->
13162 wdiPktFilterCfg.paramsData[i].compareData[0],
13163 pwdiSetRcvPktFilterReqParamsType->
13164 wdiPktFilterCfg.paramsData[i].compareData[1],
13165 pwdiSetRcvPktFilterReqParamsType->
13166 wdiPktFilterCfg.paramsData[i].compareData[2],
13167 pwdiSetRcvPktFilterReqParamsType->
13168 wdiPktFilterCfg.paramsData[i].compareData[3],
13169 pwdiSetRcvPktFilterReqParamsType->
13170 wdiPktFilterCfg.paramsData[i].compareData[4],
13171 pwdiSetRcvPktFilterReqParamsType->
13172 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13174 "MData: %d:%d:%d:%d:%d:%d\n",
13175 pwdiSetRcvPktFilterReqParamsType->
13176 wdiPktFilterCfg.paramsData[i].dataMask[0],
13177 pwdiSetRcvPktFilterReqParamsType->
13178 wdiPktFilterCfg.paramsData[i].dataMask[1],
13179 pwdiSetRcvPktFilterReqParamsType->
13180 wdiPktFilterCfg.paramsData[i].dataMask[2],
13181 pwdiSetRcvPktFilterReqParamsType->
13182 wdiPktFilterCfg.paramsData[i].dataMask[3],
13183 pwdiSetRcvPktFilterReqParamsType->
13184 wdiPktFilterCfg.paramsData[i].dataMask[4],
13185 pwdiSetRcvPktFilterReqParamsType->
13186 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070013187 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013188 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013189 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013190 /* Store Params pass it to WDI */
13191 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
13192 pWdaParams->pWdaContext = pWDA;
13193 /* Store param pointer as passed in by caller */
13194 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070013195 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013196 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013197 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 if(IS_WDI_STATUS_FAILURE(status))
13199 {
13200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13201 "Failure in SetFilter(),free all the memory,status %d ",status);
13202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13203 vos_mem_free(pWdaParams->wdaMsgParam);
13204 vos_mem_free(pWdaParams);
13205 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013206 return CONVERT_WDI2VOS_STATUS(status) ;
13207}
Jeff Johnson295189b2012-06-20 16:38:30 -070013208/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013209 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013210 *
13211 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013212void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013213 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
13214 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013215{
13216 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13217 tWDA_CbContext *pWDA;
13218 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
13219 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
13220 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
13221 tANI_U8 i;
13222 vos_msg_t vosMsg;
13223
13224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013225 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013226 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
13227
Jeff Johnsone7245742012-09-05 17:12:55 -070013228 if(NULL == pRcvFltPktMatchCntRsp)
13229 {
13230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013231 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070013232 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013233 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070013234 return ;
13235 }
13236
Jeff Johnson295189b2012-06-20 16:38:30 -070013237 if(NULL == pWdaParams)
13238 {
13239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013240 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013241 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013242 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070013243 return ;
13244 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013245 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
13246 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013247 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
13248 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
13249
13250 /* Message Header */
13251 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13252 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
13253
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013254 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070013255
13256 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
13257 {
13258 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
13259 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
13260 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013261 /* VOS message wrapper */
13262 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13263 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
13264 vosMsg.bodyval = 0;
13265 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13266 {
13267 /* free the mem and return */
13268 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
13269 }
13270
13271 vos_mem_free(pWdaParams->wdaMsgParam) ;
13272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13273 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013274
13275 return;
13276}
13277/*
13278 * FUNCTION: WDA_FilterMatchCountReqCallback
13279 * Free memory and send RSP back to SME.
13280 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
13281 */
13282void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
13283{
13284 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13285 vos_msg_t vosMsg;
13286
13287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13288 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13289
13290 if(NULL == pWdaParams)
13291 {
13292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13293 "%s: pWdaParams received NULL", __func__);
13294 VOS_ASSERT(0);
13295 return;
13296 }
13297
13298 /* VOS message wrapper */
13299 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
13300 vosMsg.bodyptr = NULL;
13301 vosMsg.bodyval = 0;
13302
13303 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13304 {
13305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13306 vos_mem_free(pWdaParams->wdaMsgParam);
13307 vos_mem_free(pWdaParams);
13308 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
13309 }
13310
13311 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070013312}
Jeff Johnson295189b2012-06-20 16:38:30 -070013313/*
13314 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
13315 * Request to WDI to get PC Filter Match Count
13316 */
13317VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
13318{
Jeff Johnson43971f52012-07-17 12:26:56 -070013319 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013320 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
13321 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
13322 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
13326 {
13327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013328 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013329 VOS_ASSERT(0);
13330 return VOS_STATUS_E_NOMEM;
13331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13333 if(NULL == pWdaParams)
13334 {
13335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013336 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013337 VOS_ASSERT(0);
13338 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
13339 return VOS_STATUS_E_NOMEM;
13340 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013341
Yue Ma7f44bbe2013-04-12 11:47:39 -070013342 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
13343 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013344
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013345 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
13346 pRcvFltPktMatchRsp->bssId,
13347 sizeof(wpt_macAddr));
13348
Jeff Johnson295189b2012-06-20 16:38:30 -070013349 /* Store Params pass it to WDI */
13350 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
13351 pWdaParams->pWdaContext = pWDA;
13352 /* Store param pointer as passed in by caller */
13353 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013355 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013356 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013357 if(IS_WDI_STATUS_FAILURE(status))
13358 {
13359 /* failure returned by WDI API */
13360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13361 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
13362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13363 vos_mem_free(pWdaParams) ;
13364 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
13365 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
13366 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013367 return CONVERT_WDI2VOS_STATUS(status) ;
13368}
Jeff Johnson295189b2012-06-20 16:38:30 -070013369/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013370 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013371 *
13372 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013373void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013374 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
13375 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013376{
13377 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013379 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013380/* WDA_VOS_ASSERT(NULL != pWdaParams); */
13381 if(NULL == pWdaParams)
13382 {
13383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013384 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013385 VOS_ASSERT(0) ;
13386 return ;
13387 }
13388
13389 vos_mem_free(pWdaParams->wdaMsgParam) ;
13390 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13391 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013392 //print a msg, nothing else to do
13393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013394 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013395 return ;
13396}
Jeff Johnson295189b2012-06-20 16:38:30 -070013397/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013398 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
13399 * Free memory.
13400 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
13401 */
13402void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13403{
13404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13405
13406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13407 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13408
13409 if(NULL == pWdaParams)
13410 {
13411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13412 "%s: Invalid pWdaParams pointer", __func__);
13413 VOS_ASSERT(0);
13414 return;
13415 }
13416
13417 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13418 {
13419 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13420 vos_mem_free(pWdaParams->wdaMsgParam);
13421 vos_mem_free(pWdaParams);
13422 }
13423
13424 return;
13425}
13426/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013427 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
13428 * Request to WDI to clear Receive Filters
13429 */
13430VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
13431 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
13432{
Jeff Johnson43971f52012-07-17 12:26:56 -070013433 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013434 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
13435 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
13436 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013438 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013439 if(NULL == pwdiRcvFltPktClearReqParamsType)
13440 {
13441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013443 VOS_ASSERT(0);
13444 return VOS_STATUS_E_NOMEM;
13445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13447 if(NULL == pWdaParams)
13448 {
13449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013451 VOS_ASSERT(0);
13452 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
13453 return VOS_STATUS_E_NOMEM;
13454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013455 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
13456 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070013457 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
13458 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
13459 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
13460 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013461
Yue Ma7f44bbe2013-04-12 11:47:39 -070013462 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013463 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013464 /* Store Params pass it to WDI */
13465 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
13466 pWdaParams->pWdaContext = pWDA;
13467 /* Store param pointer as passed in by caller */
13468 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070013469 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080013470 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013471 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013472 if(IS_WDI_STATUS_FAILURE(status))
13473 {
13474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13475 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
13476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080013477 vos_mem_free(pWdaParams->wdaMsgParam);
13478 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013480 return CONVERT_WDI2VOS_STATUS(status) ;
13481}
13482#endif // WLAN_FEATURE_PACKET_FILTERING
13483
Jeff Johnson295189b2012-06-20 16:38:30 -070013484/*
13485 * FUNCTION: WDA_ProcessSetPowerParamsReq
13486 * Request to WDI to set power params
13487 */
13488VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
13489 tSirSetPowerParamsReq *pPowerParams)
13490{
Jeff Johnson43971f52012-07-17 12:26:56 -070013491 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013492 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
13493 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013496 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013497 if(NULL == pwdiSetPowerParamsReqInfo)
13498 {
13499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013500 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 VOS_ASSERT(0);
13502 return VOS_STATUS_E_NOMEM;
13503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13505 if(NULL == pWdaParams)
13506 {
13507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013509 VOS_ASSERT(0);
13510 vos_mem_free(pwdiSetPowerParamsReqInfo);
13511 return VOS_STATUS_E_NOMEM;
13512 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013513
Jeff Johnson295189b2012-06-20 16:38:30 -070013514
13515 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
13516 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070013517 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
13518 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070013519 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
13520 pPowerParams->uListenInterval;
13521 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
13522 pPowerParams->uBcastMcastFilter;
13523 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
13524 pPowerParams->uEnableBET;
13525 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
13526 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070013527 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
13528 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013529 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
13530 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013531
Jeff Johnson295189b2012-06-20 16:38:30 -070013532 /* Store Params pass it to WDI */
13533 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
13534 pWdaParams->pWdaContext = pWDA;
13535 /* Store param pointer as passed in by caller */
13536 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013537 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013538 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013539 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013540 if(IS_WDI_STATUS_FAILURE(status))
13541 {
13542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13543 "Failure in Set power params REQ WDI API, free all the memory " );
13544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13545 vos_mem_free(pWdaParams->wdaMsgParam);
13546 pWdaParams->wdaWdiApiMsgParam = NULL;
13547 pWdaParams->wdaMsgParam = NULL;
13548 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013549 return CONVERT_WDI2VOS_STATUS(status) ;
13550}
13551
13552/*
13553 * FUNCTION: WDA_SetTmLevelRspCallback
13554 * Set TM Level response
13555 */
13556void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
13557{
13558 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13559
13560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013561 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013562
13563 if(NULL == pWdaParams)
13564 {
13565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013567 VOS_ASSERT(0) ;
13568 return ;
13569 }
13570
13571 /* Dose not need to send notification to upper layer
13572 * Just free allocated resources */
13573 if( pWdaParams != NULL )
13574 {
13575 if( pWdaParams->wdaWdiApiMsgParam != NULL )
13576 {
13577 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13578 }
13579 vos_mem_free(pWdaParams->wdaMsgParam) ;
13580 vos_mem_free(pWdaParams) ;
13581 }
13582}
13583
13584/*
13585 * FUNCTION: WDA_ProcessSetTmLevelReq
13586 * Set TM Level request
13587 */
13588VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
13589 tAniSetTmLevelReq *setTmLevelReq)
13590{
13591 WDI_Status status = WDI_STATUS_SUCCESS ;
13592 tWDA_ReqParams *pWdaParams ;
13593 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
13594 (WDI_SetTmLevelReqType *)vos_mem_malloc(
13595 sizeof(WDI_SetTmLevelReqType)) ;
13596 if(NULL == wdiSetTmLevelReq)
13597 {
13598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013600 VOS_ASSERT(0);
13601 return VOS_STATUS_E_NOMEM;
13602 }
13603
13604 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13605 if(NULL == pWdaParams)
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013609 VOS_ASSERT(0);
13610 vos_mem_free(wdiSetTmLevelReq);
13611 return VOS_STATUS_E_NOMEM;
13612 }
13613
13614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013615 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013616
13617 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
13618 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
13619
13620 pWdaParams->pWdaContext = pWDA;
13621 pWdaParams->wdaMsgParam = setTmLevelReq;
13622 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
13623
13624 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
13625 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
13626
13627 if(IS_WDI_STATUS_FAILURE(status))
13628 {
13629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080013630 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070013631 vos_mem_free(pWdaParams->wdaMsgParam) ;
13632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13633 vos_mem_free(pWdaParams) ;
13634 }
13635
13636 return CONVERT_WDI2VOS_STATUS(status) ;
13637}
13638
13639VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
13640 tpTxControlParams pTxCtrlParam)
13641{
13642 VOS_STATUS wdaStatus;
13643
13644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013645 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013646 if( pTxCtrlParam == NULL )
13647 {
13648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013649 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013650 return VOS_STATUS_E_FAILURE;
13651 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013652 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
13653 {
13654 wdaStatus = WDA_SuspendDataTx(pWDA);
13655 }
13656 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
13657 {
13658 wdaStatus = WDA_ResumeDataTx(pWDA);
13659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013660 return wdaStatus;
13661}
13662
13663 /* FUNCTION WDA_featureCapsExchange
13664 * WDA API to invoke capability exchange between host and FW.
13665 */
13666void WDA_featureCapsExchange(v_PVOID_t pVosContext)
13667{
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013669 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013670 WDI_featureCapsExchangeReq( NULL, pVosContext);
13671}
13672
Yathish9f22e662012-12-10 14:21:35 -080013673/* FUNCTION WDA_disableCapablityFeature
13674 * WDA API to diable Active mode offload in host.
13675 */
13676void WDA_disableCapablityFeature(tANI_U8 feature_index)
13677{
13678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13679 "%s:enter", __func__ );
13680 WDI_disableCapablityFeature(feature_index);
13681}
13682
Jeff Johnson295189b2012-06-20 16:38:30 -070013683 /* FUNCTION WDA_getHostWlanFeatCaps
13684 * Wrapper for WDI API, that will return if the feature (enum value).passed
13685 * to this API is supported or not in Host
13686 * return value
13687 * 0 - implies feature is NOT Supported
13688 * any non zero value - implies feature is SUPPORTED
13689 */
13690tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
13691{
13692 return WDI_getHostWlanFeatCaps(featEnumValue);
13693}
13694
13695 /* FUNCTION WDA_getFwWlanFeatCaps
13696 * Wrapper for WDI API, that will return if the feature (enum value).passed
13697 * to this API is supported or not in FW
13698 * return value
13699 * 0 - implies feature is NOT Supported
13700 * any non zero value - implies feature is SUPPORTED
13701 */
13702tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
13703{
13704 return WDI_getFwWlanFeatCaps(featEnumValue);
13705}
13706
13707/*
13708 * FUNCTION: WDA_shutdown
13709 * Shutdown WDA/WDI without handshaking with Riva.
13710 * Synchronous function.
13711 */
13712VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
13713{
13714 WDI_Status wdiStatus;
13715 //tANI_U8 eventIdx = 0;
13716 VOS_STATUS status = VOS_STATUS_SUCCESS;
13717 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070013718 if (NULL == pWDA)
13719 {
13720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013721 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070013722 VOS_ASSERT(0);
13723 return VOS_STATUS_E_FAILURE;
13724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013725 /* FTM mode stay START_STATE */
13726 if( (WDA_READY_STATE != pWDA->wdaState) &&
13727 (WDA_INIT_STATE != pWDA->wdaState) &&
13728 (WDA_START_STATE != pWDA->wdaState) )
13729 {
13730 VOS_ASSERT(0);
13731 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013732
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013733 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
13734 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 {
13736 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013737 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013739
Jeff Johnson295189b2012-06-20 16:38:30 -070013740 /* call WDI shutdown */
13741 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070013742 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
13743 {
13744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13745 "error in WDA Stop" );
13746 status = VOS_STATUS_E_FAILURE;
13747 }
13748 /* WDI stop is synchrnous, shutdown is complete when it returns */
13749 pWDA->wdaState = WDA_STOP_STATE;
13750
Jeff Johnson295189b2012-06-20 16:38:30 -070013751 /* shutdown should perform the stop & close actions. */
13752 /* Destroy the event */
13753 status = vos_event_destroy(&pWDA->txFrameEvent);
13754 if(!VOS_IS_STATUS_SUCCESS(status))
13755 {
13756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13757 "VOS Event destroy failed - status = %d\n", status);
13758 status = VOS_STATUS_E_FAILURE;
13759 }
13760 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
13761 if(!VOS_IS_STATUS_SUCCESS(status))
13762 {
13763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13764 "VOS Event destroy failed - status = %d\n", status);
13765 status = VOS_STATUS_E_FAILURE;
13766 }
13767 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
13768 if(!VOS_IS_STATUS_SUCCESS(status))
13769 {
13770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13771 "VOS Event destroy failed - status = %d\n", status);
13772 status = VOS_STATUS_E_FAILURE;
13773 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013774 /* free WDA context */
13775 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
13776 if ( !VOS_IS_STATUS_SUCCESS(status) )
13777 {
13778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13779 "error in WDA close " );
13780 status = VOS_STATUS_E_FAILURE;
13781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013782 return status;
13783}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013784
Jeff Johnsone7245742012-09-05 17:12:55 -070013785/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013786 * FUNCTION: WDA_setNeedShutdown
13787 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070013788 */
13789
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080013790void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070013791{
13792 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013793 if(pWDA == NULL)
13794 {
13795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13796 "Could not get the WDA Context pointer" );
13797 return;
13798 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013799 pWDA->needShutdown = TRUE;
13800}
13801/*
13802 * FUNCTION: WDA_needShutdown
13803 * WDA needs a shutdown
13804 */
13805
13806v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
13807{
13808 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070013809 if(pWDA == NULL)
13810 {
13811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13812 "Could not get the WDA Context pointer" );
13813 return 0;
13814 }
13815 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070013816}
13817
Mohit Khanna4a70d262012-09-11 16:30:12 -070013818#ifdef WLAN_FEATURE_11AC
13819/*
13820 * FUNCTION: WDA_SetBeaconFilterReqCallback
13821 *
13822 */
13823void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
13824{
13825 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013827 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013828 if(NULL == pWdaParams)
13829 {
13830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013831 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013832 VOS_ASSERT(0) ;
13833 return ;
13834 }
Jeff Johnsone7245742012-09-05 17:12:55 -070013835
Mohit Khanna4a70d262012-09-11 16:30:12 -070013836 vos_mem_free(pWdaParams->wdaMsgParam) ;
13837 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13838 vos_mem_free(pWdaParams) ;
13839 /*
13840 * No respone required for SetBeaconFilter req so just free the request
13841 * param here
13842 */
13843
13844 return ;
13845}
13846
13847VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
13848 tUpdateVHTOpMode *pData)
13849{
13850 WDI_Status status = WDI_STATUS_SUCCESS ;
13851 tWDA_ReqParams *pWdaParams ;
13852 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
13853 sizeof(WDI_UpdateVHTOpMode)) ;
13854 if(NULL == wdiTemp)
13855 {
13856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013857 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013858 VOS_ASSERT(0);
13859 return VOS_STATUS_E_NOMEM;
13860 }
13861 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13862 if(NULL == pWdaParams)
13863 {
13864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013865 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070013866 VOS_ASSERT(0);
13867 vos_mem_free(wdiTemp);
13868 return VOS_STATUS_E_NOMEM;
13869 }
13870
13871 wdiTemp->opMode = pData->opMode;
13872 wdiTemp->staId = pData->staId;
13873
13874 pWdaParams->pWdaContext = pWDA;
13875 /* Store Req pointer, as this will be used for response */
13876 pWdaParams->wdaMsgParam = (void *)pData;
13877 /* store Params pass it to WDI */
13878 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
13879
13880 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
13881
13882 if(IS_WDI_STATUS_FAILURE(status))
13883 {
13884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13885 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
13886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13887 vos_mem_free(pWdaParams->wdaMsgParam);
13888 vos_mem_free(pWdaParams);
13889 }
13890 return CONVERT_WDI2VOS_STATUS(status) ;
13891}
13892#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013893
13894/*==========================================================================
13895 FUNCTION WDA_TransportChannelDebug
13896
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070013897 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013898 Display Transport Channel debugging information
13899 User may request to display DXE channel snapshot
13900 Or if host driver detects any abnormal stcuk may display
13901
13902 PARAMETERS
schang6295e542013-03-12 15:31:23 -070013903 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080013904 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013905 enableStallDetect : Enable stall detect feature
13906 This feature will take effect to data performance
13907 Not integrate till fully verification
13908
13909 RETURN VALUE
13910 NONE
13911
13912===========================================================================*/
13913void WDA_TransportChannelDebug
13914(
schang6295e542013-03-12 15:31:23 -070013915 tpAniSirGlobal pMac,
13916 v_BOOL_t displaySnapshot,
13917 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013918)
13919{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070013920 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070013921 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013922}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070013923
13924/*==========================================================================
13925 FUNCTION WDA_SetEnableSSR
13926
13927 DESCRIPTION
13928 API to enable/disable SSR on WDI timeout
13929
13930 PARAMETERS
13931 enableSSR : enable/disable SSR
13932
13933 RETURN VALUE
13934 NONE
13935
13936===========================================================================*/
13937void WDA_SetEnableSSR(v_BOOL_t enableSSR)
13938{
13939 WDI_SetEnableSSR(enableSSR);
13940}