blob: 344fe2b5af55ecf71ffd928abaa0a46ec3115942 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
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
22/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070023 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070024 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070025 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070026 The functions externalized by this module are to be called ONLY by other
27 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070028 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070029 Are listed for each API below.
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031 Copyright (c) 2010-2011 QUALCOMM Incorporated.
32 All Rights Reserved.
33 Qualcomm Confidential and Proprietary
34===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070035/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070036 EDIT HISTORY FOR FILE
37
Jeff Johnson295189b2012-06-20 16:38:30 -070038 This section contains comments describing changes made to the module.
39 Notice that changes are listed in reverse chronological order.
40
Jeff Johnson295189b2012-06-20 16:38:30 -070041 $Header$$DateTime$$Author$
42
Jeff Johnson295189b2012-06-20 16:38:30 -070043 when who what, where, why
44---------- --- -------------------------------------------------
4510/05/2011 haparna Adding support for Keep Alive Feature
462010-12-30 smiryala UMAC convergence changes
472010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
48===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070049#if defined( FEATURE_WLAN_INTEGRATED_SOC )
Jeff Johnson295189b2012-06-20 16:38:30 -070050#include "vos_mq.h"
51#include "vos_api.h"
52#include "vos_packet.h"
53#include "vos_nvitem.h"
54#include "sirApi.h"
55#include "wlan_qct_pal_packet.h"
56#include "wlan_qct_wda.h"
57#include "wlan_qct_wda_msg.h"
58#include "wlan_qct_wdi_cfg.h"
59#include "wlan_qct_wdi.h"
60#include "wlan_qct_wdi_ds.h"
61#include "wlan_hal_cfg.h"
62/**********************/
63#include "wniApi.h"
64#include "cfgApi.h"
65#include "limApi.h"
66#include "wlan_qct_tl.h"
67#include "wlan_qct_tli_ba.h"
68#include "limUtils.h"
69#include "btcApi.h"
70#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070071#ifdef ANI_MANF_DIAG
72#include "pttMsgApi.h"
73#include "wlan_qct_sys.h"
74#endif /* ANI_MANF_DIAG */
Jeff Johnson295189b2012-06-20 16:38:30 -070075/* Used MACRO's */
76/* Get WDA context from vOSS module */
77#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
78#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
79#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
80#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070081#define CONVERT_WDI2SIR_STATUS(x) \
82 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
83
84#define IS_WDI_STATUS_FAILURE(status) \
85 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define CONVERT_WDI2VOS_STATUS(x) \
87 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
88
89/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070090#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070091#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define WDA_GET_BA_TXFLAG(a, b, c) \
93 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
94
95#define WDA_SET_BA_TXFLAG(a, b, c) \
96 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
97
98#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700100#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
101 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102/* timer related Macros */
103#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
104 tx_timer_create(a, b, c, d, e, f, g)
105#define WDA_START_TIMER(a) tx_timer_activate(a)
106#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
107#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700108#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109
110#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
111 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700112#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700114#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700115#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
116
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700117#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700118
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700119#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700120#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
121 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
122 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
123
124#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
125#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Jeff Johnson295189b2012-06-20 16:38:30 -0700126/* extern declarations */
127extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700128/* forward declarations */
129void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
130 void *pBodyptr, tANI_U32 bodyVal) ;
131VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
132 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700133VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
134VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
135
136extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
137 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
138void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
139 tANI_U32 *pConfig) ;
140void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
141 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
142void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
143 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
144void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
145 void* pUserData ) ;
146static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
147static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
148void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
149void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700150#ifdef WLAN_FEATURE_VOWIFI_11R
151VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
152#endif /* WLAN_FEATURE_VOWIFI_11R */
153
Jeff Johnson295189b2012-06-20 16:38:30 -0700154void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
155void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
156VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700157#ifdef FEATURE_WLAN_SCAN_PNO
158static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
159static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
160static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
161#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_PACKET_FILTERING
163static VOS_STATUS WDA_Process8023MulticastListReq (
164 tWDA_CbContext *pWDA,
165 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
166 );
167static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
168 tWDA_CbContext *pWDA,
169 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
170 );
171static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
172 tWDA_CbContext *pWDA,
173 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
174 );
175static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
176 tWDA_CbContext *pWDA,
177 tSirRcvFltPktClearParam *pRcvFltPktClearParam
178 );
179#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700180VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700181static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
182 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700183VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
184 v_U8_t *pDefaultKeyId,
185 v_U8_t *pNumKeys,
186 WDI_KeysType *pWdiKeys );
187
188#ifdef WLAN_FEATURE_GTK_OFFLOAD
189static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
190static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
191#endif // WLAN_FEATURE_GTK_OFFLOAD
192
193VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
194 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700195#ifdef WLAN_FEATURE_11AC
196VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
197 tUpdateVHTOpMode *pData);
198#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700199/*
200 * FUNCTION: WDA_open
201 * Allocate the WDA context
202 */
203VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
204 tMacOpenParameters *pMacParams )
205{
206 tWDA_CbContext *wdaContext;
207 VOS_STATUS status;
208 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700209 /* Allocate WDA context */
210 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
211 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
212 if(!VOS_IS_STATUS_SUCCESS(status))
213 {
214 return VOS_STATUS_E_NOMEM;
215 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700216 /*__asm int 3;*/
217 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
218
219 /* Initialize data structures */
220 wdaContext->pVosContext = pVosContext;
221 wdaContext->wdaState = WDA_INIT_STATE;
222 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
223
224 /* Initialize WDA-WDI synchronization event */
225 status = vos_event_init(&wdaContext->wdaWdiEvent);
226 if(!VOS_IS_STATUS_SUCCESS(status))
227 {
228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
229 "WDI Sync Event init failed - status = %d\n", status);
230 status = VOS_STATUS_E_FAILURE;
231 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Init Frame transfer event */
233 status = vos_event_init(&wdaContext->txFrameEvent);
234 if(!VOS_IS_STATUS_SUCCESS(status))
235 {
236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
237 "VOS Mgmt Frame Event init failed - status = %d\n", status);
238 status = VOS_STATUS_E_FAILURE;
239 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700240 status = vos_event_init(&wdaContext->suspendDataTxEvent);
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
244 "VOS suspend data tx Event init failed - status = %d\n", status);
245 status = VOS_STATUS_E_FAILURE;
246 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700247 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
248 if(!VOS_IS_STATUS_SUCCESS(status))
249 {
250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
251 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
252 status = VOS_STATUS_E_FAILURE;
253 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 wdaContext->driverMode = pMacParams->driverType;
256 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
257 &wdiDevCapability, pMacParams->driverType))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
260 "WDI Init failed" );
261 status = VOS_STATUS_E_FAILURE;
262 }
263 else
264 {
265 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
266 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
267 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 /* update max STA in WDA used for BA */
269 wdaContext->wdaMaxSta = pMacParams->maxStation;
270 /* store the frameTransRequired flag in wdaContext, to send this to HAL
271 * in WDA_Start
272 */
273 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
274 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 return status;
276}
277
Jeff Johnson295189b2012-06-20 16:38:30 -0700278/*
279 * FUNCTION: WDA_preStart
280 * Trigger DAL-AL to start CFG download
281 */
282VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
283{
284 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
285 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700286 /*
287 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
288 */
289 wdaMsg.type = WNI_CFG_DNLD_REQ ;
290 wdaMsg.bodyptr = NULL;
291 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700292 /* post the message.. */
293 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
294 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
295 {
296 vosStatus = VOS_STATUS_E_BADMSG;
297 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700298 return( vosStatus );
299}
Jeff Johnson295189b2012-06-20 16:38:30 -0700300/*
301 * FUNCTION: WDA_wdiStartCallback
302 * Once WDI_Start is finished, WDI start callback will be called by WDI
303 * to indicate completion of WDI_Start.
304 */
305void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
306 void *pVosContext)
307{
308 tWDA_CbContext *wdaContext;
309 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700310 if (NULL == pVosContext)
311 {
312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700313 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 return;
315 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
317 if (NULL == wdaContext)
318 {
319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700320 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700321 return;
322 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700323 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
324 {
325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700326 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 }
328 else
329 {
330 wdaContext->wdaState = WDA_START_STATE;
331 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700332 /* extract and save version information from the Start Response */
333 wdaContext->wcnssWlanCompiledVersion.major =
334 wdiRspParams->wlanCompiledVersion.major;
335 wdaContext->wcnssWlanCompiledVersion.minor =
336 wdiRspParams->wlanCompiledVersion.minor;
337 wdaContext->wcnssWlanCompiledVersion.version =
338 wdiRspParams->wlanCompiledVersion.version;
339 wdaContext->wcnssWlanCompiledVersion.revision =
340 wdiRspParams->wlanCompiledVersion.revision;
341 wdaContext->wcnssWlanReportedVersion.major =
342 wdiRspParams->wlanReportedVersion.major;
343 wdaContext->wcnssWlanReportedVersion.minor =
344 wdiRspParams->wlanReportedVersion.minor;
345 wdaContext->wcnssWlanReportedVersion.version =
346 wdiRspParams->wlanReportedVersion.version;
347 wdaContext->wcnssWlanReportedVersion.revision =
348 wdiRspParams->wlanReportedVersion.revision;
349 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
350 wdiRspParams->wcnssSoftwareVersion,
351 sizeof(wdaContext->wcnssSoftwareVersionString));
352 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
353 wdiRspParams->wcnssHardwareVersion,
354 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700355 /* Notify WDA_start that WDI_Start has completed */
356 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700357 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700358 {
359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700360 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 return;
363}
364
Jeff Johnson295189b2012-06-20 16:38:30 -0700365/*
366 * FUNCTION: WDA_start
367 * Prepare TLV configuration and call WDI_Start.
368 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700369VOS_STATUS WDA_start(v_PVOID_t pVosContext)
370{
371 tWDA_CbContext *wdaContext;
372 VOS_STATUS status;
373 WDI_Status wdiStatus;
374 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700375 if (NULL == pVosContext)
376 {
377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700378 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 return VOS_STATUS_E_FAILURE;
380 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700381 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
382 if (NULL == wdaContext)
383 {
384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700385 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700386 return VOS_STATUS_E_FAILURE;
387 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 /* Non-FTM mode, WDA status for START must be INIT
389 * FTM mode, WDA Status for START can be INIT or STOP */
390 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
391 (WDA_STOP_STATE != wdaContext->wdaState) )
392 {
393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
394 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700395 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 return VOS_STATUS_E_FAILURE;
397 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700398 /* initialize the wdiStartParam. Note that we can create this on
399 the stack since we won't exit until WDI_Start() completes or
400 times out */
401 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700403 /* prepare the config TLV for the WDI */
404 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
405 if ( !VOS_IS_STATUS_SUCCESS(status) )
406 {
407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700408 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 return VOS_STATUS_E_FAILURE;
410 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 /* note from here onwards if an error occurs we must
412 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
414 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
415 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 /* initialize the WDA-WDI synchronization event */
417 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /* call WDI start */
419 wdiStatus = WDI_Start(&wdiStartParam,
420 (WDI_StartRspCb)WDA_wdiStartCallback,
421 (v_VOID_t *)pVosContext);
422 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
423 {
424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700425 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 vos_mem_free(wdiStartParam.pConfigBuffer);
427 return VOS_STATUS_E_FAILURE;
428 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700429 /* wait for WDI start to invoke our callback */
430 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
431 WDA_WDI_START_TIMEOUT );
432 if ( !VOS_IS_STATUS_SUCCESS(status) )
433 {
434 if ( VOS_STATUS_E_TIMEOUT == status )
435 {
436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700437 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700438 }
439 else
440 {
441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
442 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700443 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700444 }
445 vos_mem_free(wdiStartParam.pConfigBuffer);
446 return VOS_STATUS_E_FAILURE;
447 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* we no longer need the config TLV */
450 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 /* if we are not in the START state then WDI_Start() failed */
452 if (WDA_START_STATE != wdaContext->wdaState)
453 {
454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700455 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 return VOS_STATUS_E_FAILURE;
457 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700458 /* FTM mode does not need to monitor BA activity */
459 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
460 {
461 status = wdaCreateTimers(wdaContext) ;
462 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700463 return status;
464}
465
Jeff Johnson295189b2012-06-20 16:38:30 -0700466/*
467 * FUNCTION: WDA_prepareConfigTLV
468 * Function to prepare CFG for DAL(WDA)
469 */
470VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
471 WDI_StartReqParamsType *wdiStartParams )
472{
473 /* get pMac to acess CFG data base */
474 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
475 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
476 tHalCfg *tlvStruct = NULL ;
477 tANI_U8 *tlvStructStart = NULL ;
478 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
479 v_PVOID_t *configParam;
480 tANI_U32 configParamSize;
481 tANI_U32 *configDataValue;
482 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700483 if ((NULL == pMac)||(NULL == wdaContext))
484 {
485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700486 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 VOS_ASSERT(0);
488 return VOS_STATUS_E_FAILURE;
489 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700490 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
491 WNI_CFG_STA_ID_LEN +
492 WNI_CFG_EDCA_WME_ACBK_LEN +
493 WNI_CFG_EDCA_WME_ACBE_LEN +
494 WNI_CFG_EDCA_WME_ACVI_LEN +
495 WNI_CFG_EDCA_WME_ACVO_LEN +
496 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700497 /* malloc memory for all configs in one shot */
498 configParam = vos_mem_malloc(configParamSize);
499
500 if(NULL == configParam )
501 {
502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700503 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 VOS_ASSERT(0) ;
505 return VOS_STATUS_E_NOMEM;
506 }
507 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 tlvStruct = (tHalCfg *)configParam;
510 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700511 /* TODO: Remove Later */
512 /* QWLAN_HAL_CFG_STA_ID */
513 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
514 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
515 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
516 eSIR_SUCCESS)
517 {
518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
519 "Failed to get value for WNI_CFG_STA_ID");
520 goto handle_failure;
521 }
522 tlvStruct->length = strLength ;
523 /* calculate the pad bytes to have the CFG in aligned format */
524 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
525 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700526 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
527 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700528 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
529 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
530 tlvStruct->length = sizeof(tANI_U32);
531 configDataValue = (tANI_U32 *)(tlvStruct + 1);
532 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
533 != eSIR_SUCCESS)
534 {
535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
536 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
537 goto handle_failure;
538 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700539 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
540 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700541 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
542 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
543 tlvStruct->length = sizeof(tANI_U32);
544 configDataValue = (tANI_U32 *)(tlvStruct + 1);
545 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
546 eSIR_SUCCESS)
547 {
548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
549 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
550 goto handle_failure;
551 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
553 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700554 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
555 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
556 tlvStruct->length = sizeof(tANI_U32);
557 configDataValue = (tANI_U32 *)(tlvStruct + 1);
558 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
559 != eSIR_SUCCESS)
560 {
561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
562 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
563 goto handle_failure;
564 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700565 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
566 + sizeof(tHalCfg) + tlvStruct->length)) ;
567
568 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
569 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
570 tlvStruct->length = sizeof(tANI_U32);
571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
572 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
573 configDataValue ) != eSIR_SUCCESS)
574 {
575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
576 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
577 goto handle_failure;
578 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
580 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* QWLAN_HAL_CFG_CAL_PERIOD */
582 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
583 tlvStruct->length = sizeof(tANI_U32);
584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
585 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
586 != eSIR_SUCCESS)
587 {
588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
589 "Failed to get value for WNI_CFG_CAL_PERIOD");
590 goto handle_failure;
591 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
593 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 /* QWLAN_HAL_CFG_CAL_CONTROL */
595 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
596 tlvStruct->length = sizeof(tANI_U32);
597 configDataValue = (tANI_U32 *)(tlvStruct + 1);
598 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
599 != eSIR_SUCCESS)
600 {
601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
602 "Failed to get value for WNI_CFG_CAL_CONTROL");
603 goto handle_failure;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
606 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700607 /* QWLAN_HAL_CFG_PROXIMITY */
608 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
609 tlvStruct->length = sizeof(tANI_U32);
610 configDataValue = (tANI_U32 *)(tlvStruct + 1);
611 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
612 != eSIR_SUCCESS)
613 {
614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
615 "Failed to get value for WNI_CFG_PROXIMITY");
616 goto handle_failure;
617 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700618 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
619 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700620 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
621 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
622 tlvStruct->length = sizeof(tANI_U32);
623 configDataValue = (tANI_U32 *)(tlvStruct + 1);
624 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
625 != eSIR_SUCCESS)
626 {
627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
628 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
629 goto handle_failure;
630 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700631 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
632 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700633 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
634 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
635 tlvStruct->length = sizeof(tANI_U32);
636 configDataValue = (tANI_U32 *)(tlvStruct + 1);
637 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
638 eSIR_SUCCESS)
639 {
640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
641 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
642 goto handle_failure;
643 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
645 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700646 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
647 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
648 tlvStruct->length = sizeof(tANI_U32);
649 configDataValue = (tANI_U32 *)(tlvStruct + 1);
650 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
651 configDataValue ) != eSIR_SUCCESS)
652 {
653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
654 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
655 goto handle_failure;
656 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700657 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
658 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700659 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
660 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
661 tlvStruct->length = sizeof(tANI_U32);
662 configDataValue = (tANI_U32 *)(tlvStruct + 1);
663 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
664 eSIR_SUCCESS)
665 {
666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
667 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
668 goto handle_failure;
669 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700670 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
671 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700672 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
673 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
674 tlvStruct->length = sizeof(tANI_U32);
675 configDataValue = (tANI_U32 *)(tlvStruct + 1);
676 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
677 eSIR_SUCCESS)
678 {
679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
680 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
681 goto handle_failure;
682 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700683 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
684 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700685 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
686 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
687 tlvStruct->length = sizeof(tANI_U32);
688 configDataValue = (tANI_U32 *)(tlvStruct + 1);
689 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
690 eSIR_SUCCESS)
691 {
692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
693 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
694 goto handle_failure;
695 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700696 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
697 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700698 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
699 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
700 tlvStruct->length = sizeof(tANI_U32);
701 configDataValue = (tANI_U32 *)(tlvStruct + 1);
702 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
703 configDataValue ) != eSIR_SUCCESS)
704 {
705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
706 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
707 goto handle_failure;
708 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700709 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
710 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700711 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
712 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
713 tlvStruct->length = sizeof(tANI_U32);
714 configDataValue = (tANI_U32 *)(tlvStruct + 1);
715 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
716 configDataValue ) != eSIR_SUCCESS)
717 {
718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
719 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
720 goto handle_failure;
721 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700722 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
723 + sizeof(tHalCfg) + tlvStruct->length));
724
725 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
726 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
727 tlvStruct->length = sizeof(tANI_U32);
728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
729 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
730 configDataValue ) != eSIR_SUCCESS)
731 {
732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
733 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
734 goto handle_failure;
735 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
737 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
739 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
740 tlvStruct->length = sizeof(tANI_U32);
741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
742 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
743 configDataValue ) != eSIR_SUCCESS)
744 {
745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
746 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
747 goto handle_failure;
748 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
750 + sizeof(tHalCfg) + tlvStruct->length));
751
752 /* QWLAN_HAL_CFG_FIXED_RATE */
753 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
754 tlvStruct->length = sizeof(tANI_U32);
755 configDataValue = (tANI_U32 *)(tlvStruct + 1);
756 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
757 != eSIR_SUCCESS)
758 {
759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
760 "Failed to get value for WNI_CFG_FIXED_RATE");
761 goto handle_failure;
762 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
764 + sizeof(tHalCfg) + tlvStruct->length));
765
766 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
767 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
768 tlvStruct->length = sizeof(tANI_U32);
769 configDataValue = (tANI_U32 *)(tlvStruct + 1);
770 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
771 != eSIR_SUCCESS)
772 {
773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
774 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
775 goto handle_failure;
776 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
778 + sizeof(tHalCfg) + tlvStruct->length));
779
780 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
781 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
782 tlvStruct->length = sizeof(tANI_U32);
783 configDataValue = (tANI_U32 *)(tlvStruct + 1);
784 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
785 configDataValue ) != eSIR_SUCCESS)
786 {
787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
788 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
789 goto handle_failure;
790 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700793 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
794 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
795 tlvStruct->length = sizeof(tANI_U32);
796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
797 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
798 configDataValue ) != eSIR_SUCCESS)
799 {
800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
801 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
802 goto handle_failure;
803 }
804 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
805 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700806 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
807 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
808 tlvStruct->length = sizeof(tANI_U32);
809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
810 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
811 configDataValue ) != eSIR_SUCCESS)
812 {
813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
814 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
815 goto handle_failure;
816 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700817 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
818 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700819 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
820 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
821 tlvStruct->length = sizeof(tANI_U32);
822 configDataValue = (tANI_U32 *)(tlvStruct + 1);
823 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
824 configDataValue ) != eSIR_SUCCESS)
825 {
826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
827 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
828 goto handle_failure;
829 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700830 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
831 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700832 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
833 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
834 tlvStruct->length = sizeof(tANI_U32);
835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
836 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
837 configDataValue ) != eSIR_SUCCESS)
838 {
839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
840 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
841 goto handle_failure;
842 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700843 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
844 + sizeof(tHalCfg) + tlvStruct->length);
845
846#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
847 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
848 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
849 tlvStruct->length = sizeof(tANI_U32);
850 configDataValue = (tANI_U32 *)(tlvStruct + 1);
851 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
852 configDataValue ) != eSIR_SUCCESS)
853 {
854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
855 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
856 goto handle_failure;
857 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700858 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
859 + sizeof(tHalCfg) + tlvStruct->length);
860#endif
861 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
862 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
863 tlvStruct->length = sizeof(tANI_U32);
864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
865 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
866 configDataValue ) != eSIR_SUCCESS)
867 {
868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
869 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
870 goto handle_failure;
871 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
873 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700874 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
875 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
876 tlvStruct->length = sizeof(tANI_U32);
877 configDataValue = (tANI_U32 *)(tlvStruct + 1);
878 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
879 eSIR_SUCCESS)
880 {
881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
882 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
883 goto handle_failure;
884 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
886 + sizeof(tHalCfg) + tlvStruct->length);
887
888 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
889 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
890 tlvStruct->length = sizeof(tANI_U32);
891 configDataValue = (tANI_U32 *)(tlvStruct + 1);
892 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
893 configDataValue ) != eSIR_SUCCESS)
894 {
895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
896 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
897 goto handle_failure;
898 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
900 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700901 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
902 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
903 tlvStruct->length = sizeof(tANI_U32);
904 configDataValue = (tANI_U32 *)(tlvStruct + 1);
905 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
906 configDataValue ) != eSIR_SUCCESS)
907 {
908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
909 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
910 goto handle_failure;
911 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
913 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700914 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
915 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
916 tlvStruct->length = sizeof(tANI_U32);
917 configDataValue = (tANI_U32 *)(tlvStruct + 1);
918 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
919 configDataValue ) != eSIR_SUCCESS)
920 {
921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
922 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
923 goto handle_failure;
924 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700925 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
926 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700927 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
928 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
929 tlvStruct->length = sizeof(tANI_U32);
930 configDataValue = (tANI_U32 *)(tlvStruct + 1);
931 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
932 configDataValue ) != eSIR_SUCCESS)
933 {
934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
935 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
936 goto handle_failure;
937 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700938 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
939 + sizeof(tHalCfg) + tlvStruct->length);
940
941 /* QWLAN_HAL_CFG_STATS_PERIOD */
942 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
943 tlvStruct->length = sizeof(tANI_U32);
944 configDataValue = (tANI_U32 *)(tlvStruct + 1);
945 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
946 eSIR_SUCCESS)
947 {
948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
949 "Failed to get value for WNI_CFG_STATS_PERIOD");
950 goto handle_failure;
951 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700952 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
953 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700954 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
955 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
956 tlvStruct->length = sizeof(tANI_U32);
957 configDataValue = (tANI_U32 *)(tlvStruct + 1);
958 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
959 eSIR_SUCCESS)
960 {
961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
962 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
963 goto handle_failure;
964 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
966 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700967 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
968 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
969 tlvStruct->length = sizeof(tANI_U32);
970 configDataValue = (tANI_U32 *)(tlvStruct + 1);
971 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
972 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_DTIM_PERIOD */
976 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
980 != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_DTIM_PERIOD");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700988 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
989 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
990 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
991 configDataValue = (tANI_U32 *)(tlvStruct + 1);
992 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
993 &strLength) != eSIR_SUCCESS)
994 {
995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
996 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
997 goto handle_failure;
998 }
999 tlvStruct->length = strLength;
1000 /* calculate the pad bytes to have the CFG in aligned format */
1001 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1002 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1004 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1006 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1007 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1010 &strLength) != eSIR_SUCCESS)
1011 {
1012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1013 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1014 goto handle_failure;
1015 }
1016 tlvStruct->length = strLength;
1017 /* calculate the pad bytes to have the CFG in aligned format */
1018 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1019 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001020 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1021 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001022 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1023 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1024 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1025 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1026 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1027 &strLength) != eSIR_SUCCESS)
1028 {
1029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1030 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1031 goto handle_failure;
1032 }
1033 tlvStruct->length = strLength;
1034 /* calculate the pad bytes to have the CFG in aligned format */
1035 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1036 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001037 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1038 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001039 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1040 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1041 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1042 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1043 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1044 &strLength) != eSIR_SUCCESS)
1045 {
1046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1047 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1048 goto handle_failure;
1049 }
1050 tlvStruct->length = strLength;
1051 /* calculate the pad bytes to have the CFG in aligned format */
1052 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1053 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001054 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1055 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001056 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1057 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1058 tlvStruct->length = sizeof(tANI_U32);
1059 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1060 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1061 != eSIR_SUCCESS)
1062 {
1063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1064 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1065 goto handle_failure;
1066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001067 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1068 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001069 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1070 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1071 tlvStruct->length = sizeof(tANI_U32);
1072 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1073 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1074 != eSIR_SUCCESS)
1075 {
1076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1077 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1078 goto handle_failure;
1079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001080 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1081 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001082 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1083 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1084 tlvStruct->length = sizeof(tANI_U32);
1085 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1086 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1087 != eSIR_SUCCESS)
1088 {
1089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1090 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1091 goto handle_failure;
1092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001093 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1094 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001095 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1096 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1097 tlvStruct->length = sizeof(tANI_U32);
1098 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1099 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1100 != eSIR_SUCCESS)
1101 {
1102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1103 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1104 goto handle_failure;
1105 }
1106 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1107 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001108 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1109 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1110 tlvStruct->length = sizeof(tANI_U32);
1111 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1112 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1113 != eSIR_SUCCESS)
1114 {
1115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1116 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1117 goto handle_failure;
1118 }
1119 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1120 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001121 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1122 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1123 tlvStruct->length = sizeof(tANI_U32);
1124 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1125 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1126 != eSIR_SUCCESS)
1127 {
1128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1129 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1130 goto handle_failure;
1131 }
1132 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1133 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001134 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1135 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1136 tlvStruct->length = sizeof(tANI_U32);
1137 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1138 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1139 != eSIR_SUCCESS)
1140 {
1141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1142 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1143 goto handle_failure;
1144 }
1145 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1146 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001147 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1148 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1149 tlvStruct->length = sizeof(tANI_U32);
1150 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1151 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1152 != eSIR_SUCCESS)
1153 {
1154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1155 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1156 goto handle_failure;
1157 }
1158 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1159 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001160 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1161 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1162 tlvStruct->length = sizeof(tANI_U32);
1163 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1164 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1165 != eSIR_SUCCESS)
1166 {
1167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1168 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1169 goto handle_failure;
1170 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001171 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1172 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001173 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1174 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1175 tlvStruct->length = sizeof(tANI_U32);
1176 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1177 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1178 != eSIR_SUCCESS)
1179 {
1180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1181 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1182 goto handle_failure;
1183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001184 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1185 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001186 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1187 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1188 tlvStruct->length = sizeof(tANI_U32);
1189 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1190 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1191 != eSIR_SUCCESS)
1192 {
1193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1194 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1195 goto handle_failure;
1196 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001197 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1198 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001199 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1200 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1201 * into FW, so the parameters are added here.
1202 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001203 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1204 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1205 tlvStruct->length = sizeof(tANI_U32);
1206 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1207 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1208 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1209 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001210 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1211 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1212 tlvStruct->length = sizeof(tANI_U32);
1213 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1214 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1215 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1216 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001217 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1218 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1219 tlvStruct->length = sizeof(tANI_U32);
1220 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1221 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1222 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1223 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001224 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1225 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1226 tlvStruct->length = sizeof(tANI_U32);
1227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1228 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1229 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1230 + sizeof(tHalCfg) + tlvStruct->length) ;
1231
1232 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
1239
1240 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
1247
1248 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1249 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length) ;
1255
1256 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
1263
1264 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1265 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1266 tlvStruct->length = sizeof(tANI_U32);
1267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1268 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
1271
1272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001329 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1333 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1334 wcnssCompiledApiVersion.minor,
1335 wcnssCompiledApiVersion.version,
1336 wcnssCompiledApiVersion.revision);
1337 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1338 + sizeof(tHalCfg) + tlvStruct->length) ;
1339
Jeff Johnsond13512a2012-07-17 11:42:19 -07001340 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1341 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1342 tlvStruct->length = sizeof(tANI_U32);
1343 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1344 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1345 configDataValue ) != eSIR_SUCCESS)
1346 {
1347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1348 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1349 goto handle_failure;
1350 }
1351
1352 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1353 + sizeof(tHalCfg) + tlvStruct->length) ;
1354 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1355 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1356 tlvStruct->length = sizeof(tANI_U32);
1357 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1358 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1359 configDataValue ) != eSIR_SUCCESS)
1360 {
1361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1362 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1363 goto handle_failure;
1364 }
1365
1366 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1367 + sizeof(tHalCfg) + tlvStruct->length) ;
1368
1369 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1370 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1371 tlvStruct->length = sizeof(tANI_U32);
1372 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1373 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1374 != eSIR_SUCCESS)
1375 {
1376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1377 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1378 goto handle_failure;
1379 }
1380
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383
Jeff Johnson295189b2012-06-20 16:38:30 -07001384 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001385#ifdef WLAN_DEBUG
1386 {
1387 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001388 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1389 "****** Dumping CFG TLV ***** ");
1390 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1391 {
1392 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1393 "%02x %02x %02x %02x %02x %02x %02x %02x",
1394 tlvStructStart[i],
1395 tlvStructStart[i+1],
1396 tlvStructStart[i+2],
1397 tlvStructStart[i+3],
1398 tlvStructStart[i+4],
1399 tlvStructStart[i+5],
1400 tlvStructStart[i+6],
1401 tlvStructStart[i+7]);
1402 }
1403 /* Dump the bytes in the last line*/
1404 for (; i < wdiStartParams->usConfigBufferLen; i++)
1405 {
1406 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1407 "%02x ",tlvStructStart[i]);
1408 }
1409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1410 "**************************** ");
1411 }
1412#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001413 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001414handle_failure:
1415 vos_mem_free(configParam);
1416 return VOS_STATUS_E_FAILURE;
1417}
Jeff Johnson295189b2012-06-20 16:38:30 -07001418/*
1419 * FUNCTION: WDA_wdiCompleteCB
1420 * call the voss call back function
1421 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001422void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001423{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1425 tWDA_CbContext *wdaContext;
1426
1427 if(NULL == pWdaParams)
1428 {
1429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001430 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001431 VOS_ASSERT(0) ;
1432 return ;
1433 }
1434
1435 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1436
Jeff Johnson295189b2012-06-20 16:38:30 -07001437 if (NULL == wdaContext)
1438 {
1439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001440 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001441 return ;
1442 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001443
Jeff Johnson295189b2012-06-20 16:38:30 -07001444 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001445 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001446 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001448 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001449 vos_mem_free(pWdaParams);
1450
Jeff Johnson295189b2012-06-20 16:38:30 -07001451 if(WDI_STATUS_SUCCESS != status)
1452 {
1453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1454 "WDI stop callback returned failure" );
1455 VOS_ASSERT(0) ;
1456 }
1457 else
1458 {
1459 wdaContext->wdaState = WDA_STOP_STATE;
1460 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001461
Jeff Johnson295189b2012-06-20 16:38:30 -07001462 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001463 vos_WDAComplete_cback(wdaContext->pVosContext);
1464
Jeff Johnson295189b2012-06-20 16:38:30 -07001465 return ;
1466}
Jeff Johnson295189b2012-06-20 16:38:30 -07001467/*
1468 * FUNCTION: WDA_stop
1469 * call WDI_stop
1470 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001471VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1472{
1473 WDI_Status wdiStatus;
1474 VOS_STATUS status = VOS_STATUS_SUCCESS;
1475 WDI_StopReqParamsType *wdiStopReq;
1476 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001477 tWDA_ReqParams *pWdaParams ;
1478
Jeff Johnson295189b2012-06-20 16:38:30 -07001479 if (NULL == pWDA)
1480 {
1481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001482 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001483 VOS_ASSERT(0);
1484 return VOS_STATUS_E_FAILURE;
1485 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001486 if (pWDA->wdiFailed == true)
1487 {
1488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001489 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001490 return VOS_STATUS_E_ALREADY;
1491 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001492
Jeff Johnson295189b2012-06-20 16:38:30 -07001493 /* FTM mode stay START_STATE */
1494 if( (WDA_READY_STATE != pWDA->wdaState) &&
1495 (WDA_INIT_STATE != pWDA->wdaState) &&
1496 (WDA_START_STATE != pWDA->wdaState) )
1497 {
1498 VOS_ASSERT(0);
1499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001500 wdiStopReq = (WDI_StopReqParamsType *)
1501 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1502 if(NULL == wdiStopReq)
1503 {
1504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001506 VOS_ASSERT(0);
1507 return VOS_STATUS_E_NOMEM;
1508 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001509
Jeff Johnson295189b2012-06-20 16:38:30 -07001510 wdiStopReq->wdiStopReason = reason;
1511 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001512
1513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1514 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001515 {
1516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001518 VOS_ASSERT(0);
1519 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001520 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001521 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001522
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 if ( eDRIVER_TYPE_MFG != pWDA->driverMode )
1524 {
1525 wdaDestroyTimers(pWDA);
1526 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001527 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1528 pWdaParams->wdaMsgParam = NULL;
1529 pWdaParams->pWdaContext = pWDA;
1530
Jeff Johnson295189b2012-06-20 16:38:30 -07001531 /* call WDI stop */
1532 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001533 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1534
Jeff Johnson295189b2012-06-20 16:38:30 -07001535 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1536 {
1537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1538 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1540 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 status = VOS_STATUS_E_FAILURE;
1542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001543 return status;
1544}
Jeff Johnson295189b2012-06-20 16:38:30 -07001545/*
1546 * FUNCTION: WDA_close
1547 * call WDI_close and free the WDA context
1548 */
1549VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1550{
Jeff Johnson43971f52012-07-17 12:26:56 -07001551 VOS_STATUS status = VOS_STATUS_SUCCESS;
1552 WDI_Status wstatus;
1553 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001554 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001555 if (NULL == wdaContext)
1556 {
1557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001558 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001559 return VOS_STATUS_E_FAILURE;
1560 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001561 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1562 (WDA_STOP_STATE != wdaContext->wdaState))
1563 {
1564 VOS_ASSERT(0);
1565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001567 wstatus = WDI_Close();
1568 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 {
1570 status = VOS_STATUS_E_FAILURE;
1571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001572 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001573 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001574 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1575 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001576 {
1577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1578 "WDI Sync Event destroy failed - status = %d\n", status);
1579 status = VOS_STATUS_E_FAILURE;
1580 }
1581
Jeff Johnson43971f52012-07-17 12:26:56 -07001582 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001583 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 {
1585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1586 "VOS Event destroy failed - status = %d\n", status);
1587 status = VOS_STATUS_E_FAILURE;
1588 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001589 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001590 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1593 "VOS Event destroy failed - status = %d\n", status);
1594 status = VOS_STATUS_E_FAILURE;
1595 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001596 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001597 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001598 {
1599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1600 "VOS Event destroy failed - status = %d\n", status);
1601 status = VOS_STATUS_E_FAILURE;
1602 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001603 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001604 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001605 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001606 {
1607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1608 "error in WDA close " );
1609 status = VOS_STATUS_E_FAILURE;
1610 }
1611 return status;
1612}
Jeff Johnson295189b2012-06-20 16:38:30 -07001613/*
1614 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1615 * returns 1 if the compiled version is greater than or equal to the input version
1616 */
1617
1618uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1619{
1620 VOS_STATUS status = VOS_STATUS_SUCCESS;
1621 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1622 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001623 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1625 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1626 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1627 (compiledVersion.revision >= revision)))
1628 return 1;
1629 else
1630 return 0;
1631}
Jeff Johnson295189b2012-06-20 16:38:30 -07001632/*
1633 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1634 * returns 1 if the compiled version is greater than or equal to the input version
1635 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001636uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1637{
1638 VOS_STATUS status = VOS_STATUS_SUCCESS;
1639 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1640 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001641 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001642 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1643 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1644 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1645 (reportedVersion.revision >= revision)))
1646 return 1;
1647 else
1648 return 0;
1649}
Jeff Johnson295189b2012-06-20 16:38:30 -07001650/*
1651 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1652 * Returns the version of the WCNSS WLAN API with which the HOST
1653 * device driver was compiled
1654 */
1655VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1656 tSirVersionType *pVersion)
1657{
1658 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001659 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001660 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001661 if ((NULL == pvosGCtx) || (NULL == pVersion))
1662 {
1663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001664 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001665 VOS_ASSERT(0);
1666 return VOS_STATUS_E_FAILURE;
1667 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1669 if (NULL == pWDA )
1670 {
1671 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001672 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001673 VOS_ASSERT(0);
1674 return VOS_STATUS_E_FAILURE;
1675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001676 *pVersion = pWDA->wcnssWlanCompiledVersion;
1677 return VOS_STATUS_SUCCESS;
1678}
Jeff Johnson295189b2012-06-20 16:38:30 -07001679/*
1680 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1681 * Returns the version of the WCNSS WLAN API with which the WCNSS
1682 * device driver was compiled
1683 */
1684VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1685 tSirVersionType *pVersion)
1686{
1687 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001689 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001690 if ((NULL == pvosGCtx) || (NULL == pVersion))
1691 {
1692 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001693 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001694 VOS_ASSERT(0);
1695 return VOS_STATUS_E_FAILURE;
1696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1698 if (NULL == pWDA )
1699 {
1700 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001701 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 VOS_ASSERT(0);
1703 return VOS_STATUS_E_FAILURE;
1704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 *pVersion = pWDA->wcnssWlanReportedVersion;
1706 return VOS_STATUS_SUCCESS;
1707}
Jeff Johnson295189b2012-06-20 16:38:30 -07001708/*
1709 * FUNCTION: WDA_GetWcnssSoftwareVersion
1710 * Returns the WCNSS Software version string
1711 */
1712VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1713 tANI_U8 *pVersion,
1714 tANI_U32 versionBufferSize)
1715{
1716 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001717 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001718 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001719 if ((NULL == pvosGCtx) || (NULL == pVersion))
1720 {
1721 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001722 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 VOS_ASSERT(0);
1724 return VOS_STATUS_E_FAILURE;
1725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001726 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1727 if (NULL == pWDA )
1728 {
1729 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001730 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001731 VOS_ASSERT(0);
1732 return VOS_STATUS_E_FAILURE;
1733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1735 return VOS_STATUS_SUCCESS;
1736}
Jeff Johnson295189b2012-06-20 16:38:30 -07001737/*
1738 * FUNCTION: WDA_GetWcnssHardwareVersion
1739 * Returns the WCNSS Hardware version string
1740 */
1741VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1742 tANI_U8 *pVersion,
1743 tANI_U32 versionBufferSize)
1744{
1745 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001747 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001748 if ((NULL == pvosGCtx) || (NULL == pVersion))
1749 {
1750 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001751 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001752 VOS_ASSERT(0);
1753 return VOS_STATUS_E_FAILURE;
1754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001755 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1756 if (NULL == pWDA )
1757 {
1758 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001759 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 VOS_ASSERT(0);
1761 return VOS_STATUS_E_FAILURE;
1762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001763 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1764 return VOS_STATUS_SUCCESS;
1765}
Jeff Johnson295189b2012-06-20 16:38:30 -07001766/*
1767 * FUNCTION: WDA_WniCfgDnld
1768 * Trigger CFG Download
1769 */
1770VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1771{
1772 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001773 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 v_VOID_t *pFileImage = NULL;
1775 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001776 v_VOID_t *pCfgBinary = NULL;
1777 v_SIZE_t cbCfgBinarySize = 0;
1778
1779 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 if (NULL == pMac )
1781 {
1782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001783 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001784 VOS_ASSERT(0);
1785 return VOS_STATUS_E_FAILURE;
1786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 /* get the number of bytes in the CFG Binary... */
1788 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1789 &cbFileImageSize );
1790 if ( VOS_STATUS_E_NOMEM != vosStatus )
1791 {
1792 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1793 "Error obtaining binary size" );
1794 goto fail;
1795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001796 // malloc a buffer to read in the Configuration binary file.
1797 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 if ( NULL == pFileImage )
1799 {
1800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1801 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1802 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 vosStatus = VOS_STATUS_E_NOMEM;
1804 goto fail;
1805 }
1806
1807 /* Get the entire CFG file image... */
1808 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1809 &cbFileImageSize );
1810 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1811 {
1812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1813 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1814 cbFileImageSize );
1815 goto fail;
1816 }
1817
1818 /*
1819 * Validate the binary image. This function will return a pointer
1820 * and length where the CFG binary is located within the binary image file.
1821 */
1822 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1823 &pCfgBinary, &cbCfgBinarySize );
1824 if ( VOS_FALSE == bStatus )
1825 {
1826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1827 "Error: Cannot find STA CFG in binary image file" );
1828 vosStatus = VOS_STATUS_E_FAILURE;
1829 goto fail;
1830 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 /*
1832 * TODO: call the config download function
1833 * for now calling the existing cfg download API
1834 */
1835 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001836 if( pFileImage != NULL )
1837 {
1838 vos_mem_free( pFileImage );
1839 }
1840 return vosStatus;
1841
1842fail:
1843 if(pCfgBinary != NULL)
1844 vos_mem_free( pFileImage );
1845
1846 return vosStatus;
1847}
Jeff Johnson295189b2012-06-20 16:38:30 -07001848/* -----------------------------------------------------------------
1849 * WDI interface
1850 * -----------------------------------------------------------------
1851 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001852/*
1853 * FUNCTION: WDA_suspendDataTxCallback
1854 * call back function called from TL after suspend Transmission
1855 */
1856VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1857 v_U8_t* ucSTAId,
1858 VOS_STATUS vosStatus)
1859{
1860 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001862 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001863 if (NULL == pWDA )
1864 {
1865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001866 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001867 VOS_ASSERT(0);
1868 return VOS_STATUS_E_FAILURE;
1869 }
1870 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1871 {
1872 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1873 }
1874 else
1875 {
1876 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 /* Trigger the event to bring the WDA TL suspend function to come
1879 * out of wait*/
1880 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1881 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1882 {
1883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1884 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001886 /* If TL suspended had timedout before this callback was called, resume back
1887 * TL.*/
1888 if (pWDA->txSuspendTimedOut)
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "Late TLSuspendCallback, resuming TL back again\n");
1892 WDA_ResumeDataTx(pWDA);
1893 pWDA->txSuspendTimedOut = FALSE;
1894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001895 return VOS_STATUS_SUCCESS;
1896}
Jeff Johnson295189b2012-06-20 16:38:30 -07001897/*
1898 * FUNCTION: WDA_suspendDataTx
1899 * Update TL to suspend the data Transmission
1900 */
1901VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1902{
1903 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1904 tANI_U8 eventIdx = 0;
1905 tANI_U8 ucSTAId = 0;
1906
1907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001908 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001909 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001910 if (pWDA->txSuspendTimedOut)
1911 {
1912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1913 "TL suspend timedout previously, CB not called yet\n");
1914 return status;
1915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 /* Reset the event to be not signalled */
1917 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1918 if(!VOS_IS_STATUS_SUCCESS(status))
1919 {
1920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1921 "VOS Event reset failed - status = %d\n",status);
1922 return VOS_STATUS_E_FAILURE;
1923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001924 /*Indicate TL to suspend transmission for all Sta Id */
1925 ucSTAId = WLAN_ALL_STA;
1926 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1927 WDA_SuspendDataTxCallback);
1928 if(status != VOS_STATUS_SUCCESS)
1929 {
1930 return status;
1931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001932 /* Wait for the event to be set by the TL, to get the response of
1933 * suspending the TX queues, this event should be set by the Callback
1934 * function called by TL*/
1935 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1936 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1937 if(!VOS_IS_STATUS_SUCCESS(status))
1938 {
1939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1940 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001941 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 /* Set this flag to true when TL suspend times out, so that when TL
1943 * suspend eventually happens and calls the callback, TL can be resumed
1944 * right away by looking at this flag when true.*/
1945 pWDA->txSuspendTimedOut = TRUE;
1946 }
1947 else
1948 {
1949 pWDA->txSuspendTimedOut = FALSE;
1950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1952 {
1953 status = VOS_STATUS_SUCCESS;
1954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 return status;
1956}
Jeff Johnson295189b2012-06-20 16:38:30 -07001957/*
1958 * FUNCTION: WDA_resumeDataTx
1959 * Update TL to resume the data Transmission
1960 */
1961VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1962{
1963 VOS_STATUS status = VOS_STATUS_SUCCESS;
1964 tANI_U8 ucSTAId = 0;
1965
1966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001967 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 ucSTAId = WLAN_ALL_STA;
1969 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1970 return status;
1971}
Jeff Johnson295189b2012-06-20 16:38:30 -07001972/*
1973 * FUNCTION: WDA_InitScanReqCallback
1974 * Trigger Init SCAN callback
1975 */
1976void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
1977{
1978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1979 tWDA_CbContext *pWDA;
1980 tInitScanParams *pWDA_ScanParam ;
1981 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07001982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001984 if(NULL == pWdaParams)
1985 {
1986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001988 VOS_ASSERT(0) ;
1989 return ;
1990 }
1991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
1992 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 if(NULL == pWDA_ScanParam)
1994 {
1995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001996 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07001997 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07001998 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1999 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002000 return ;
2001 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002002 if(WDI_STATUS_SUCCESS != wdiStatus)
2003 {
2004 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002005 if(VOS_STATUS_SUCCESS != status)
2006 {
2007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002008 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 }
2010 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002011 /* free WDI command buffer */
2012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002014
Jeff Johnson295189b2012-06-20 16:38:30 -07002015
2016 /* assign status to scan params */
2017 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002018 /* send SCAN RSP message back to PE */
2019 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 return ;
2021}
2022
2023/*
2024 * FUNCTION: WDA_ProcessInitScanReq
2025 * Trigger Init SCAN in DAL
2026 */
2027VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2028 tInitScanParams *initScanParams)
2029{
2030 WDI_Status status = WDI_STATUS_SUCCESS ;
2031 WDI_InitScanReqParamsType *wdiInitScanParam =
2032 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2033 sizeof(WDI_InitScanReqParamsType)) ;
2034 tWDA_ReqParams *pWdaParams;
2035 tANI_U8 i = 0;
2036
2037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 if(NULL == wdiInitScanParam)
2040 {
2041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002042 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002043 VOS_ASSERT(0);
2044 return VOS_STATUS_E_NOMEM;
2045 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2047 if(NULL == pWdaParams)
2048 {
2049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002051 VOS_ASSERT(0);
2052 vos_mem_free(wdiInitScanParam);
2053 return VOS_STATUS_E_NOMEM;
2054 }
2055
2056 /* Copy init Scan params to WDI structure */
2057 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2058 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2059 sizeof(tSirMacAddr)) ;
2060 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2061 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2062 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2063#ifdef WLAN_FEATURE_P2P
2064 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2065 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2066#else
2067 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2068 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2069#endif
2070 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2071 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002072 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2073 {
2074 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2075 initScanParams->scanEntry.bssIdx[i] ;
2076 }
2077
2078 /* if Frame length, copy macMgmtHdr or WDI structure */
2079 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2080 {
2081 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2082 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2083 }
2084 wdiInitScanParam->wdiReqStatusCB = NULL ;
2085
Jeff Johnson295189b2012-06-20 16:38:30 -07002086 /* Store Init Req pointer, as this will be used for response */
2087 pWdaParams->pWdaContext = pWDA;
2088 pWdaParams->wdaMsgParam = initScanParams;
2089 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002090 /* first try to suspend TX */
2091 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002092 if(WDI_STATUS_SUCCESS != status)
2093 {
2094 goto handleWdiFailure;
2095 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002096 /* call DAL API to pass init scan request to DAL */
2097 status = WDI_InitScanReq(wdiInitScanParam,
2098 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 if(IS_WDI_STATUS_FAILURE(status))
2100 {
2101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2102 "error in WDA Init Scan, Resume Tx " );
2103 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 VOS_ASSERT(0) ;
2105
2106 goto handleWdiFailure;
2107 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002109handleWdiFailure:
2110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2111 "Failure in WDI Api, free all the memory " );
2112 /* free WDI command buffer */
2113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2114 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 /* send Failure to PE */
2116 initScanParams->status = eSIR_FAILURE ;
2117 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 return CONVERT_WDI2VOS_STATUS(status) ;
2119}
2120
Jeff Johnson295189b2012-06-20 16:38:30 -07002121/*
2122 * FUNCTION: WDA_StartScanReqCallback
2123 * send Start SCAN RSP back to PE
2124 */
2125void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2126 void* pUserData)
2127{
2128 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2129 tWDA_CbContext *pWDA;
2130 tStartScanParams *pWDA_ScanParam;
2131 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 = (tStartScanParams *)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 Johnson295189b2012-06-20 16:38:30 -07002146 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002147 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 return ;
2149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002150 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2151 {
2152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002153 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002154 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002155 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002156 return ;
2157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2159 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002160
Jeff Johnson295189b2012-06-20 16:38:30 -07002161
2162 /* assign status to scan params */
2163 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002164 /* send SCAN RSP message back to PE */
2165 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002166 return ;
2167}
2168
Jeff Johnson295189b2012-06-20 16:38:30 -07002169/*
2170 * FUNCTION: WDA_ProcessStartScanReq
2171 * Trigger start SCAN in WDI
2172 */
2173VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2174 tStartScanParams *startScanParams)
2175{
2176 WDI_Status status = WDI_STATUS_SUCCESS;
2177 WDI_StartScanReqParamsType *wdiStartScanParams =
2178 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2179 sizeof(WDI_StartScanReqParamsType)) ;
2180 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002182 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 if(NULL == wdiStartScanParams)
2184 {
2185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 VOS_ASSERT(0);
2188 return VOS_STATUS_E_NOMEM;
2189 }
2190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2191 if(NULL == pWdaParams)
2192 {
2193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002195 VOS_ASSERT(0);
2196 vos_mem_free(wdiStartScanParams);
2197 return VOS_STATUS_E_NOMEM;
2198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002199 /* Copy init Scan params to WDI structure */
2200 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2201 wdiStartScanParams->wdiReqStatusCB = NULL ;
2202
Jeff Johnson295189b2012-06-20 16:38:30 -07002203 /* Store Init Req pointer, as this will be used for response */
2204 /* store Params pass it to WDI */
2205 pWdaParams->pWdaContext = pWDA;
2206 pWdaParams->wdaMsgParam = startScanParams;
2207 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 /* call DAL API to pass init scan request to DAL */
2209 status = WDI_StartScanReq(wdiStartScanParams,
2210 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002211 /* failure returned by WDI API */
2212 if(IS_WDI_STATUS_FAILURE(status))
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2215 "Failure in Start Scan WDI API, free all the memory "
2216 "It should be due to previous abort scan." );
2217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2218 vos_mem_free(pWdaParams) ;
2219 startScanParams->status = eSIR_FAILURE ;
2220 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 return CONVERT_WDI2VOS_STATUS(status) ;
2223}
Jeff Johnson295189b2012-06-20 16:38:30 -07002224/*
2225 * FUNCTION: WDA_EndScanReqCallback
2226 * END SCAN callback
2227 */
2228void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2229{
2230 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2231 tWDA_CbContext *pWDA;
2232 tEndScanParams *endScanParam;
2233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 if(NULL == pWdaParams)
2236 {
2237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002238 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 VOS_ASSERT(0) ;
2240 return ;
2241 }
2242 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2243 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002244 if(NULL == endScanParam)
2245 {
2246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002247 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2250 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 return ;
2252 }
2253
2254 /* Free WDI command buffer */
2255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2256 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002257 /* assign status to scan params */
2258 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 /* send response back to PE */
2260 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2261 return ;
2262}
2263
Jeff Johnson295189b2012-06-20 16:38:30 -07002264/*
2265 * FUNCTION: WDA_ProcessEndScanReq
2266 * Trigger END SCAN in WDI
2267 */
2268VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2269 tEndScanParams *endScanParams)
2270{
2271 WDI_Status status = WDI_STATUS_SUCCESS;
2272 WDI_EndScanReqParamsType *wdiEndScanParams =
2273 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2274 sizeof(WDI_EndScanReqParamsType)) ;
2275 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 if(NULL == wdiEndScanParams)
2279 {
2280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 VOS_ASSERT(0);
2283 return VOS_STATUS_E_NOMEM;
2284 }
2285 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2286 if(NULL == pWdaParams)
2287 {
2288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 VOS_ASSERT(0);
2291 vos_mem_free(wdiEndScanParams);
2292 return VOS_STATUS_E_NOMEM;
2293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002294 /* Copy init Scan params to WDI structure */
2295 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2296 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 /* Store Init Req pointer, as this will be used for response */
2298 /* store Params pass it to WDI */
2299 pWdaParams->pWdaContext = pWDA;
2300 pWdaParams->wdaMsgParam = endScanParams;
2301 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 /* call DAL API to pass init scan request to DAL */
2303 status = WDI_EndScanReq(wdiEndScanParams,
2304 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 if(IS_WDI_STATUS_FAILURE(status))
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2308 "Failure in End Scan WDI API, free all the memory "
2309 "It should be due to previous abort scan." );
2310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2311 vos_mem_free(pWdaParams) ;
2312 endScanParams->status = eSIR_FAILURE ;
2313 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 return CONVERT_WDI2VOS_STATUS(status) ;
2316}
Jeff Johnson295189b2012-06-20 16:38:30 -07002317/*
2318 * FUNCTION: WDA_FinishScanReqCallback
2319 * Trigger Finish SCAN callback
2320 */
2321void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2322{
2323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2324 tWDA_CbContext *pWDA;
2325 tFinishScanParams *finishScanParam;
2326 VOS_STATUS status;
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 == pWdaParams)
2330 {
2331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 VOS_ASSERT(0) ;
2334 return ;
2335 }
2336
2337 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2338 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002339 if(NULL == finishScanParam)
2340 {
2341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002342 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 return ;
2347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2349 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 /*
2351 * Now Resume TX, if we reached here means, TX is already suspended, we
2352 * have to resume it unconditionaly
2353 */
2354 status = WDA_ResumeDataTx(pWDA) ;
2355
2356 if(VOS_STATUS_SUCCESS != status)
2357 {
2358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002359 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2363 return ;
2364}
Jeff Johnson295189b2012-06-20 16:38:30 -07002365/*
2366 * FUNCTION: WDA_ProcessFinshScanReq
2367 * Trigger Finish SCAN in WDI
2368 */
2369VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2370 tFinishScanParams *finishScanParams)
2371{
2372 WDI_Status status = WDI_STATUS_SUCCESS;
2373 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2374 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2375 sizeof(WDI_FinishScanReqParamsType)) ;
2376 tWDA_ReqParams *pWdaParams ;
2377 tANI_U8 i = 0;
2378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002379 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002380 if(NULL == wdiFinishScanParams)
2381 {
2382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002384 VOS_ASSERT(0);
2385 return VOS_STATUS_E_NOMEM;
2386 }
2387 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2388 if(NULL == pWdaParams)
2389 {
2390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002391 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002392 VOS_ASSERT(0);
2393 vos_mem_free(wdiFinishScanParams);
2394 return VOS_STATUS_E_NOMEM;
2395 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002396 /* Copy init Scan params to WDI structure */
2397 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2398 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2399 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002400 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2401 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2402 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2403 finishScanParams->frameLength ;
2404 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2405 finishScanParams->currentOperChannel ;
2406 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2407 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2408 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2410 {
2411 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2412 finishScanParams->scanEntry.bssIdx[i] ;
2413 }
2414
2415
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 /* if Frame length, copy macMgmtHdr ro WDI structure */
2417 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2418 {
2419 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2420 &finishScanParams->macMgmtHdr,
2421 sizeof(WDI_MacMgmtHdr)) ;
2422 }
2423 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002424 /* Store Init Req pointer, as this will be used for response */
2425 /* store Params pass it to WDI */
2426 pWdaParams->pWdaContext = pWDA;
2427 pWdaParams->wdaMsgParam = finishScanParams;
2428 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002429 /* call DAL API to pass init scan request to DAL */
2430 status = WDI_FinishScanReq(wdiFinishScanParams,
2431 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002432
Jeff Johnson295189b2012-06-20 16:38:30 -07002433
2434 /*
2435 * WDI API returns failure..
2436 */
2437 if(IS_WDI_STATUS_FAILURE( status))
2438 {
2439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2440 "Failure in Finish Scan WDI API, free all the memory " );
2441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2442 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002443 finishScanParams->status = eSIR_FAILURE ;
2444 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002446 return CONVERT_WDI2VOS_STATUS(status) ;
2447}
Jeff Johnson295189b2012-06-20 16:38:30 -07002448/*---------------------------------------------------------------------
2449 * ASSOC API's
2450 *---------------------------------------------------------------------
2451 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002452/*
2453 * FUNCTION: WDA_JoinReqCallback
2454 * Trigger Init SCAN callback
2455 */
2456void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2457{
2458 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2459 tWDA_CbContext *pWDA;
2460 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002462 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002463 if(NULL == pWdaParams)
2464 {
2465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002466 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002467 VOS_ASSERT(0) ;
2468 return ;
2469 }
2470 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2471 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2473 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 /* reset macBSSID */
2475 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 /* reset macSTASelf */
2477 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002480 return ;
2481}
Jeff Johnson295189b2012-06-20 16:38:30 -07002482/*
2483 * FUNCTION: WDA_ProcessJoinReq
2484 * Trigger Join REQ in WDI
2485 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002486VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2487 tSwitchChannelParams* joinReqParam)
2488{
2489 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 WDI_JoinReqParamsType *wdiJoinReqParam =
2491 (WDI_JoinReqParamsType *)vos_mem_malloc(
2492 sizeof(WDI_JoinReqParamsType)) ;
2493 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002495 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002496 if(NULL == wdiJoinReqParam)
2497 {
2498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002499 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002501 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 return VOS_STATUS_E_NOMEM;
2503 }
2504 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2505 if(NULL == pWdaParams)
2506 {
2507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 VOS_ASSERT(0);
2510 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002511 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002512 return VOS_STATUS_E_NOMEM;
2513 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002514
2515 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2516 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2517 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2518 {
2519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2520 "%s: received join request when BSSID or self-STA is NULL "
2521 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002522 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002523 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2524 VOS_ASSERT(0);
2525 vos_mem_free(wdiJoinReqParam);
2526 vos_mem_free(pWdaParams);
2527 joinReqParam->status = eSIR_FAILURE ;
2528 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2529 return VOS_STATUS_E_INVAL;
2530 }
2531
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 /* copy the BSSID for pWDA */
2533 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2534 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2536 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2538 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002539#ifdef WLAN_FEATURE_VOWIFI
2540 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2541 joinReqParam->maxTxPower ;
2542#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2544 joinReqParam->localPowerConstraint ;
2545#endif
2546 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2547 joinReqParam->secondaryChannelOffset ;
2548 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2549
2550 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002551 /* Store Init Req pointer, as this will be used for response */
2552 /* store Params pass it to WDI */
2553 pWdaParams->pWdaContext = pWDA;
2554 pWdaParams->wdaMsgParam = joinReqParam;
2555 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002556 status = WDI_JoinReq(wdiJoinReqParam,
2557 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 if(IS_WDI_STATUS_FAILURE(status))
2559 {
2560 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2561 "Failure in Join WDI API, free all the memory " );
2562 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2563 vos_mem_free(pWdaParams) ;
2564 joinReqParam->status = eSIR_FAILURE ;
2565 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 return CONVERT_WDI2VOS_STATUS(status) ;
2568}
Jeff Johnson295189b2012-06-20 16:38:30 -07002569/*
2570 * FUNCTION: WDA_SwitchChannelReqCallback
2571 * send Switch channel RSP back to PE
2572 */
2573void WDA_SwitchChannelReqCallback(
2574 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2575{
2576 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2577 tWDA_CbContext *pWDA;
2578 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002580 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 if(NULL == pWdaParams)
2582 {
2583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002584 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002585 VOS_ASSERT(0) ;
2586 return ;
2587 }
2588 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2589 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2590
2591#ifdef WLAN_FEATURE_VOWIFI
2592 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2593#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2595 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 pSwitchChanParams->status =
2597 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002598 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002599 return ;
2600}
Jeff Johnson295189b2012-06-20 16:38:30 -07002601/*
2602 * FUNCTION: WDA_ProcessChannelSwitchReq
2603 * Request to WDI to switch channel REQ params.
2604 */
2605VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2606 tSwitchChannelParams *pSwitchChanParams)
2607{
2608 WDI_Status status = WDI_STATUS_SUCCESS ;
2609 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2610 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2611 sizeof(WDI_SwitchChReqParamsType)) ;
2612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 if(NULL == wdiSwitchChanParam)
2616 {
2617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 VOS_ASSERT(0);
2620 return VOS_STATUS_E_NOMEM;
2621 }
2622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2623 if(NULL == pWdaParams)
2624 {
2625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002627 VOS_ASSERT(0);
2628 vos_mem_free(wdiSwitchChanParam);
2629 return VOS_STATUS_E_NOMEM;
2630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002631 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2632#ifndef WLAN_FEATURE_VOWIFI
2633 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2634 pSwitchChanParams->localPowerConstraint;
2635#endif
2636 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2637 pSwitchChanParams->secondaryChannelOffset;
2638 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 /* Store req pointer, as this will be used for response */
2640 /* store Params pass it to WDI */
2641 pWdaParams->pWdaContext = pWDA;
2642 pWdaParams->wdaMsgParam = pSwitchChanParams;
2643 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002644#ifdef WLAN_FEATURE_VOWIFI
2645 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2646 = pSwitchChanParams->maxTxPower;
2647 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2648 pSwitchChanParams ->selfStaMacAddr,
2649 sizeof(tSirMacAddr));
2650#endif
2651 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2652 pSwitchChanParams->bssId,
2653 sizeof(tSirMacAddr));
2654
2655 status = WDI_SwitchChReq(wdiSwitchChanParam,
2656 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(IS_WDI_STATUS_FAILURE(status))
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2660 "Failure in process channel switch Req WDI API, free all the memory " );
2661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2662 vos_mem_free(pWdaParams) ;
2663 pSwitchChanParams->status = eSIR_FAILURE ;
2664 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 return CONVERT_WDI2VOS_STATUS(status) ;
2667}
Jeff Johnson295189b2012-06-20 16:38:30 -07002668/*
2669 * FUNCTION: WDA_ConfigBssReqCallback
2670 * config BSS Req Callback, called by WDI
2671 */
2672void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2673 ,void* pUserData)
2674{
2675 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2676 tWDA_CbContext *pWDA;
2677 tAddBssParams *configBssReqParam;
2678 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002680 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002681 if(NULL == pWdaParams)
2682 {
2683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002684 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002685 VOS_ASSERT(0) ;
2686 return ;
2687 }
2688 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2689 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2690 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 configBssReqParam->status =
2692 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002693 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2694 {
2695 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2696 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002697 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2698 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2699 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2700
2701 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2702 {
2703 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2704 {
2705 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2706 staConfigBssParam->staType = STA_ENTRY_BSSID;
2707 }
2708 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2709 (staConfigBssParam->staType == STA_ENTRY_SELF))
2710 {
2711 /* This is the 1st add BSS Req for the BTAMP STA */
2712 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2713 staConfigBssParam->staType = STA_ENTRY_BSSID;
2714 }
2715 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2716 (staConfigBssParam->staType == STA_ENTRY_PEER))
2717 {
2718 /* This is the 2nd ADD BSS Request that is sent
2719 * on the BTAMP STA side. The Sta type is
2720 * set to STA_ENTRY_PEER here.*/
2721 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2722 }
2723 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2724 (staConfigBssParam->staType == STA_ENTRY_SELF))
2725 {
2726 /* statype is already set by PE.
2727 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2728 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2729 staConfigBssParam->staType = STA_ENTRY_BSSID;
2730 }
2731 else
2732 {
2733 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2734 staConfigBssParam->staType = STA_ENTRY_PEER;
2735 }
2736 }
2737 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2738 {
2739 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2740 staConfigBssParam->staType = STA_ENTRY_SELF;
2741 }
2742 else
2743 {
2744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2745 "Invalid operation mode specified");
2746 VOS_ASSERT(0);
2747 }
2748
2749 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002750 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002751 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002752 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002753 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2754 sizeof(tSirMacAddr));
2755 staConfigBssParam->txChannelWidthSet =
2756 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2758 staConfigBssParam->htCapable)
2759 {
2760 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2761 wdiConfigBssRsp->ucBSSIdx;
2762 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2763 WDA_VALID_STA_INDEX ;
2764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002765 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2766 wdiConfigBssRsp->ucBSSIdx,
2767 wdiConfigBssRsp->ucSTAIdx))
2768 {
2769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002770 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 VOS_ASSERT(0) ;
2772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002773 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2774 {
2775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002776 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 VOS_ASSERT(0) ;
2778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002779#ifdef WLAN_FEATURE_VOWIFI
2780 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2781#endif
2782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2784 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002786 return ;
2787}
Jeff Johnson295189b2012-06-20 16:38:30 -07002788/*
2789 * FUNCTION: WDA_UpdateEdcaParamsForAC
2790 * Update WDI EDCA params with PE edca params
2791 */
2792void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2793 WDI_EdcaParamRecord *wdiEdcaParam,
2794 tSirMacEdcaParamRecord *macEdcaParam)
2795{
2796 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2797 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2798 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2799 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2800 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2801 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2802}
Jeff Johnson295189b2012-06-20 16:38:30 -07002803/*
2804 * FUNCTION: WDA_ProcessConfigBssReq
2805 * Configure BSS before starting Assoc with AP
2806 */
2807VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2808 tAddBssParams* configBssReqParam)
2809{
2810 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2812 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2813 sizeof(WDI_ConfigBSSReqParamsType)) ;
2814 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002816 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 if(NULL == wdiConfigBssReqParam)
2818 {
2819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002820 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002821 VOS_ASSERT(0);
2822 return VOS_STATUS_E_NOMEM;
2823 }
2824 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2825 if(NULL == pWdaParams)
2826 {
2827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002829 VOS_ASSERT(0);
2830 vos_mem_free(wdiConfigBssReqParam);
2831 return VOS_STATUS_E_NOMEM;
2832 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002833 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002834 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2835 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 /* Store Init Req pointer, as this will be used for response */
2837 /* store Params pass it to WDI */
2838 pWdaParams->pWdaContext = pWDA;
2839 pWdaParams->wdaMsgParam = configBssReqParam;
2840 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2842 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(IS_WDI_STATUS_FAILURE(status))
2844 {
2845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2846 "Failure in Config BSS WDI API, free all the memory " );
2847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2848 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 return CONVERT_WDI2VOS_STATUS(status) ;
2853}
Jeff Johnson295189b2012-06-20 16:38:30 -07002854#ifdef ENABLE_HAL_COMBINED_MESSAGES
2855/*
2856 * FUNCTION: WDA_PostAssocReqCallback
2857 * Post ASSOC req callback, send RSP back to PE
2858 */
2859void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2860 void* pUserData)
2861{
2862 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2863 tPostAssocParams *postAssocReqParam =
2864 (tPostAssocParams *)pWDA->wdaMsgParam ;
2865 /*STA context within the BSS Params*/
2866 tAddStaParams *staPostAssocParam =
2867 &postAssocReqParam->addBssParams.staContext ;
2868 /*STA Params for self STA*/
2869 tAddStaParams *selfStaPostAssocParam =
2870 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002872 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002873 postAssocReqParam->status =
2874 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2876 {
2877 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2878 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2879 sizeof(tSirMacAddr)) ;
2880 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2881 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2882 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002883 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2884 }
2885 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2886 pWDA->wdaWdiApiMsgParam = NULL;
2887 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002888 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002889 return ;
2890}
Jeff Johnson295189b2012-06-20 16:38:30 -07002891/*
2892 * FUNCTION: WDA_ProcessPostAssocReq
2893 * Trigger POST ASSOC processing in WDI
2894 */
2895VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2896 tPostAssocParams *postAssocReqParam)
2897{
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 WDI_Status status = WDI_STATUS_SUCCESS ;
2899
2900 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2901 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2902 sizeof(WDI_PostAssocReqParamsType)) ;
2903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002905
Jeff Johnson295189b2012-06-20 16:38:30 -07002906 if(NULL == wdiPostAssocReqParam)
2907 {
2908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002909 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002910 VOS_ASSERT(0);
2911 return VOS_STATUS_E_NOMEM;
2912 }
2913
2914 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2915 {
2916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002917 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002918 VOS_ASSERT(0);
2919 return VOS_STATUS_E_FAILURE;
2920 }
2921
Jeff Johnson295189b2012-06-20 16:38:30 -07002922 /* update BSS params into WDI structure */
2923 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2924 &postAssocReqParam->addBssParams) ;
2925 /* update STA params into WDI structure */
2926 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2927 &postAssocReqParam->addStaParams) ;
2928
2929 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2930 postAssocReqParam->addBssParams.highPerformance;
2931 WDA_UpdateEdcaParamsForAC(pWDA,
2932 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2933 &postAssocReqParam->addBssParams.acbe);
2934 WDA_UpdateEdcaParamsForAC(pWDA,
2935 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2936 &postAssocReqParam->addBssParams.acbk);
2937 WDA_UpdateEdcaParamsForAC(pWDA,
2938 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2939 &postAssocReqParam->addBssParams.acvi);
2940 WDA_UpdateEdcaParamsForAC(pWDA,
2941 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2942 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 /* Store Init Req pointer, as this will be used for response */
2944 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 /* store Params pass it to WDI */
2946 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2948 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 if(IS_WDI_STATUS_FAILURE(status))
2950 {
2951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2952 "Failure in Post Assoc WDI API, free all the memory " );
2953 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2954 pWDA->wdaWdiApiMsgParam = NULL;
2955 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002959 return CONVERT_WDI2VOS_STATUS(status) ;
2960}
2961#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002962/*
2963 * FUNCTION: WDA_AddStaReqCallback
2964 * ADD STA req callback, send RSP back to PE
2965 */
2966void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2967 void* pUserData)
2968{
2969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2970 tWDA_CbContext *pWDA;
2971 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002973 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 if(NULL == pWdaParams)
2975 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002977 VOS_ASSERT(0) ;
2978 return ;
2979 }
2980 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2981 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 addStaReqParam->status =
2983 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
2985 {
2986 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
2987 /*TODO: UMAC structure doesn't have these fields*/
2988 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
2989 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
2990 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
2991 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
2992 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
2993 /* update staIndex as valid index for BA if STA is HT capable*/
2994 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
2995 {
2996 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
2997 wdiConfigStaRsp->ucBssIdx;
2998 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
2999 WDA_VALID_STA_INDEX ;
3000 }
3001 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3002 {
3003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003004 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003005 VOS_ASSERT(0) ;
3006 return ;
3007 }
3008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3010 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 return ;
3013}
Jeff Johnson295189b2012-06-20 16:38:30 -07003014/*
3015 * FUNCTION: WDA_ConfigStaReq
3016 * Trigger Config STA processing in WDI
3017 */
3018VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3019 tAddStaParams *addStaReqParam)
3020{
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3023 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3024 sizeof(WDI_ConfigSTAReqParamsType)) ;
3025 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003027 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 if(NULL == wdiConfigStaReqParam)
3029 {
3030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003031 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 VOS_ASSERT(0);
3033 return VOS_STATUS_E_NOMEM;
3034 }
3035 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3036 if(NULL == pWdaParams)
3037 {
3038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003039 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 VOS_ASSERT(0);
3041 vos_mem_free(wdiConfigStaReqParam);
3042 return VOS_STATUS_E_NOMEM;
3043 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003045 /* update STA params into WDI structure */
3046 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3047 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 /* Store Init Req pointer, as this will be used for response */
3049 /* store Params pass it to WDI */
3050 pWdaParams->pWdaContext = pWDA;
3051 pWdaParams->wdaMsgParam = addStaReqParam;
3052 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3054 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 if(IS_WDI_STATUS_FAILURE(status))
3056 {
3057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3058 "Failure in Config STA WDI API, free all the memory " );
3059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3060 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 return CONVERT_WDI2VOS_STATUS(status) ;
3065}
Jeff Johnson295189b2012-06-20 16:38:30 -07003066/*
3067 * FUNCTION: WDA_DelBSSReqCallback
3068 * Dens DEL BSS RSP back to PE
3069 */
3070void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3071 void* pUserData)
3072{
3073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3074 tWDA_CbContext *pWDA;
3075 tDeleteBssParams *delBssReqParam;
3076 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003078 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 if(NULL == pWdaParams)
3080 {
3081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003082 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 VOS_ASSERT(0) ;
3084 return ;
3085 }
3086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3087 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3090 {
3091 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3092 sizeof(tSirMacAddr)) ;
3093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3095 {
3096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003097 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003098 VOS_ASSERT(0) ;
3099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3101 {
3102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003103 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 VOS_ASSERT(0) ;
3105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003106 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3107 {
3108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 VOS_ASSERT(0) ;
3111 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003112 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3113 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 /* reset the the system role*/
3115 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3116
3117 /* Reset the BA related information */
3118 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3119 {
3120 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3121 {
3122 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3123 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3124 /* Reset framesTxed counters here */
3125 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3126 {
3127 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3128 }
3129 }
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003132 return ;
3133}
3134
Jeff Johnson295189b2012-06-20 16:38:30 -07003135/*
3136 * FUNCTION: WDA_ProcessDelBssReq
3137 * Init DEL BSS req with WDI
3138 */
3139VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3140 tDeleteBssParams *delBssParam)
3141{
3142 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3144 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3145 sizeof(WDI_DelBSSReqParamsType)) ;
3146 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003148 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003149 if(NULL == wdiDelBssReqParam)
3150 {
3151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003153 VOS_ASSERT(0);
3154 return VOS_STATUS_E_NOMEM;
3155 }
3156 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3157 if(NULL == pWdaParams)
3158 {
3159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003160 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 VOS_ASSERT(0);
3162 vos_mem_free(wdiDelBssReqParam);
3163 return VOS_STATUS_E_NOMEM;
3164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3166 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3167
3168 /* Store Init Req pointer, as this will be used for response */
3169 /* store Params pass it to WDI */
3170 pWdaParams->pWdaContext = pWDA;
3171 pWdaParams->wdaMsgParam = delBssParam;
3172 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 status = WDI_DelBSSReq(wdiDelBssReqParam,
3174 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003175 if(IS_WDI_STATUS_FAILURE(status))
3176 {
3177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3178 "Failure in Del BSS WDI API, free all the memory " );
3179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3180 vos_mem_free(pWdaParams) ;
3181 delBssParam->status = eSIR_FAILURE ;
3182 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 return CONVERT_WDI2VOS_STATUS(status) ;
3185}
Jeff Johnson295189b2012-06-20 16:38:30 -07003186/*
3187 * FUNCTION: WDA_DelSTAReqCallback
3188 * Dens DEL STA RSP back to PE
3189 */
3190void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3191 void* pUserData)
3192{
3193 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3194 tWDA_CbContext *pWDA;
3195 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003197 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003198 if(NULL == pWdaParams)
3199 {
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003201 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003202 VOS_ASSERT(0) ;
3203 return ;
3204 }
3205 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3206 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003208 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3209 {
3210 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3211 {
3212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 VOS_ASSERT(0) ;
3215 }
3216 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3217 }
3218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3219 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003220 /*Reset the BA information corresponding to this STAIdx */
3221 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3222 WDA_INVALID_STA_INDEX;
3223 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3224
3225 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 return ;
3227}
Jeff Johnson295189b2012-06-20 16:38:30 -07003228/*
3229 * FUNCTION: WDA_ProcessDelStaReq
3230 * Init DEL STA req with WDI
3231 */
3232VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3233 tDeleteStaParams *delStaParam)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3237 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3238 sizeof(WDI_DelSTAReqParamsType)) ;
3239 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003241 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 if(NULL == wdiDelStaReqParam)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if(NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003253 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003254 VOS_ASSERT(0);
3255 vos_mem_free(wdiDelStaReqParam);
3256 return VOS_STATUS_E_NOMEM;
3257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3259 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003260 /* Store Init Req pointer, as this will be used for response */
3261 /* store Params pass it to WDI */
3262 pWdaParams->pWdaContext = pWDA;
3263 pWdaParams->wdaMsgParam = delStaParam;
3264 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 status = WDI_DelSTAReq(wdiDelStaReqParam,
3266 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 if(IS_WDI_STATUS_FAILURE(status))
3268 {
3269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3270 "Failure in Del STA WDI API, free all the memory status = %d",
3271 status );
3272 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3273 vos_mem_free(pWdaParams) ;
3274 delStaParam->status = eSIR_FAILURE ;
3275 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 return CONVERT_WDI2VOS_STATUS(status) ;
3278}
Jeff Johnson295189b2012-06-20 16:38:30 -07003279void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3280{
3281 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3282 tWDA_CbContext *pWDA;
3283 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003285 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003286 if(NULL == pWdaParams)
3287 {
3288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003289 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 VOS_ASSERT(0) ;
3291 return ;
3292 }
3293 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3294 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3296 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3298 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3299 pwdiAddSTASelfRsp->macSelfSta,
3300 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 return ;
3303}
Jeff Johnson295189b2012-06-20 16:38:30 -07003304/*
3305 * FUNCTION: WDA_ProcessAddStaSelfReq
3306 *
3307 */
3308VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3309{
3310 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003311 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3313 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3314 sizeof(WDI_AddSTASelfReqParamsType)) ;
3315 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003317 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 if( NULL == wdiAddStaSelfReq )
3319 {
3320 VOS_ASSERT( 0 );
3321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003322 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 return( VOS_STATUS_E_NOMEM );
3324 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 if( NULL == pWdaParams )
3327 {
3328 VOS_ASSERT( 0 );
3329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003330 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 vos_mem_free(wdiAddStaSelfReq) ;
3332 return( VOS_STATUS_E_NOMEM );
3333 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003335 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3336 /* Store Init Req pointer, as this will be used for response */
3337 /* store Params pass it to WDI */
3338 pWdaParams->pWdaContext = pWDA;
3339 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3340 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003341 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003342
Jeff Johnson43971f52012-07-17 12:26:56 -07003343 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 {
3345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3346 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003347 wstatus );
3348 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3350 vos_mem_free(pWdaParams) ;
3351 pAddStaSelfReq->status = eSIR_FAILURE ;
3352 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3353 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003354 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355}
Jeff Johnson295189b2012-06-20 16:38:30 -07003356/*
3357 * FUNCTION: WDA_DelSTASelfRespCallback
3358 *
3359 */
3360void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3361 wdiDelStaSelfRspParams , void* pUserData)
3362{
3363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3364 tWDA_CbContext *pWDA;
3365 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003367 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003368 if (NULL == pWdaParams)
3369 {
3370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003371 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372 VOS_ASSERT(0);
3373 return;
3374 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3376 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 delStaSelfParams->status =
3378 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3379
3380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3381 vos_mem_free(pWdaParams) ;
3382
3383 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 return ;
3385}
Jeff Johnson295189b2012-06-20 16:38:30 -07003386/*
3387 * FUNCTION: WDA_DelSTASelfReqCallback
3388 *
3389 */
3390void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3391 void* pUserData)
3392{
3393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3394 tWDA_CbContext *pWDA;
3395 tDelStaSelfParams *delStaSelfParams;
3396
3397 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3398 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003399 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003400
3401 if (NULL == pWdaParams)
3402 {
3403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003404 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 VOS_ASSERT(0);
3406 return;
3407 }
3408
3409 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3410 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3411
3412 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3413
3414 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3415 {
3416 VOS_ASSERT(0);
3417 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3418 vos_mem_free(pWdaParams) ;
3419 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3420 }
3421
3422 return ;
3423}
3424
3425/*
3426 * FUNCTION: WDA_DelSTASelfReq
3427 * Trigger Config STA processing in WDI
3428 */
3429VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3430 tDelStaSelfParams* pDelStaSelfReqParam)
3431{
3432 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003433 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003434 tWDA_ReqParams *pWdaParams = NULL;
3435 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3436 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3437 sizeof(WDI_DelSTASelfReqParamsType)) ;
3438
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003440 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 if( NULL == wdiDelStaSelfReq )
3442 {
3443 VOS_ASSERT( 0 );
3444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003445 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 return( VOS_STATUS_E_NOMEM );
3447 }
3448
3449 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3450 if( NULL == pWdaParams )
3451 {
3452 VOS_ASSERT( 0 );
3453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003454 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 vos_mem_free(wdiDelStaSelfReq) ;
3456 return( VOS_STATUS_E_NOMEM );
3457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003458 pWdaParams->pWdaContext = pWDA;
3459 /* Store param pointer as passed in by caller */
3460 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3461 /* store Params pass it to WDI */
3462 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003463 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3464 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3465
3466 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3467 wdiDelStaSelfReq->pUserData = pWdaParams;
3468
Jeff Johnson43971f52012-07-17 12:26:56 -07003469 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3471
Jeff Johnson43971f52012-07-17 12:26:56 -07003472 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003473 {
3474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3475 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3476 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003477 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3479 vos_mem_free(pWdaParams) ;
3480 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3481 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3482 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003483 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003484}
3485
Jeff Johnson295189b2012-06-20 16:38:30 -07003486/*
3487 * FUNCTION: WDA_SendMsg
3488 * Send Message back to PE
3489 */
3490void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3491 void *pBodyptr, tANI_U32 bodyVal)
3492{
3493 tSirMsgQ msg = {0} ;
3494 tANI_U32 status = VOS_STATUS_SUCCESS ;
3495 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003496 msg.type = msgType;
3497 msg.bodyval = bodyVal;
3498 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003499 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 if (VOS_STATUS_SUCCESS != status)
3501 {
3502 if(NULL != pBodyptr)
3503 {
3504 vos_mem_free(pBodyptr);
3505 }
3506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003507 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 VOS_ASSERT(0) ;
3509 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 return ;
3511}
Jeff Johnson295189b2012-06-20 16:38:30 -07003512/*
3513 * FUNCTION: WDA_UpdateBSSParams
3514 * Translated WDA/PE BSS info into WDI BSS info..
3515 */
3516void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3517 WDI_ConfigBSSReqInfoType *wdiBssParams,
3518 tAddBssParams *wdaBssParams)
3519{
3520 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 /* copy bssReq Params to WDI structure */
3522 vos_mem_copy(wdiBssParams->macBSSID,
3523 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3524 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3525 sizeof(tSirMacAddr)) ;
3526 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3527 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3528 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 wdiBssParams->ucShortSlotTimeSupported =
3530 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3532 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3533 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3534 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3535 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3536
3537 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3538 wdiBssParams->ucTXOPProtectionFullSupport =
3539 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3541 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3544 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3545 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3546 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3547
3548 /* copy SSID into WDI structure */
3549 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3550 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3551 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3553 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003555#ifdef WLAN_FEATURE_VOWIFI
3556 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3557#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560#ifdef WLAN_FEATURE_VOWIFI_11R
3561 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 if(wdiBssParams->bExtSetStaKeyParamValid)
3563 {
3564 /* copy set STA key params to WDI structure */
3565 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3566 wdaBssParams->extSetStaKeyParam.staIdx;
3567 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3568 wdaBssParams->extSetStaKeyParam.encType;
3569 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3570 wdaBssParams->extSetStaKeyParam.wepType;
3571 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3572 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3574 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003575 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003576 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3577 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3578 {
3579 WDA_GetWepKeysFromCfg( pWDA,
3580 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3581 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3582 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3583 }
3584 else
3585 {
3586#ifdef WLAN_SOFTAP_FEATURE
3587 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3588 keyIndex++)
3589 {
3590 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3591 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3592 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3593 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3594 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3595 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003596 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3597 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3598 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3599 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3600 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3601 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3602 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3603 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003605 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3606 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3607#else
3608 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3609 wdaBssParams->extSetStaKeyParam.key.keyId;
3610 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3611 wdaBssParams->extSetStaKeyParam.key.unicast;
3612 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3613 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3614 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3615 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3616 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3617 wdaBssParams->extSetStaKeyParam.key.paeRole;
3618 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3619 wdaBssParams->extSetStaKeyParam.key.keyLength;
3620 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3621 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3622 SIR_MAC_MAX_KEY_LENGTH);
3623 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3624#endif
3625 }
3626 }
3627 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3628 }
3629 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3630 {
3631 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3632 sizeof(wdaBssParams->extSetStaKeyParam) );
3633 }
3634#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003635#ifdef WLAN_FEATURE_11AC
3636 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3637 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3638#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003639
3640 return ;
3641}
Jeff Johnson295189b2012-06-20 16:38:30 -07003642/*
3643 * FUNCTION: WDA_UpdateSTAParams
3644 * Translated WDA/PE BSS info into WDI BSS info..
3645 */
3646void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3647 WDI_ConfigStaReqInfoType *wdiStaParams,
3648 tAddStaParams *wdaStaParams)
3649{
3650 tANI_U8 i = 0;
3651 /* Update STA params */
3652 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3653 sizeof(tSirMacAddr)) ;
3654 wdiStaParams->usAssocId = wdaStaParams->assocId;
3655 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3656
3657 wdiStaParams->ucShortPreambleSupported =
3658 wdaStaParams->shortPreambleSupported;
3659 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3660 sizeof(tSirMacAddr)) ;
3661 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3662
3663 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3664
3665 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3666 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3667 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3668 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3669 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3670 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3671 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3672
3673 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3674 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003675 wdiStaParams->wdiSupportedRates.opRateMode =
3676 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003677 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3678 {
3679 wdiStaParams->wdiSupportedRates.llbRates[i] =
3680 wdaStaParams->supportedRates.llbRates[i];
3681 }
3682 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3683 {
3684 wdiStaParams->wdiSupportedRates.llaRates[i] =
3685 wdaStaParams->supportedRates.llaRates[i];
3686 }
3687 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3688 {
3689 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3690 wdaStaParams->supportedRates.aniLegacyRates[i];
3691 }
3692 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3693 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003694#ifdef WLAN_FEATURE_11AC
3695 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3696 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3697 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3698 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3699#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3701 {
3702 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3703 wdaStaParams->supportedRates.supportedMCSSet[i];
3704 }
3705 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3706 wdaStaParams->supportedRates.rxHighestDataRate;
3707
3708 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3709
3710 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3711
3712 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3713 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3714 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3715
3716 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3717 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3718 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3719 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3720#ifdef WLAN_FEATURE_P2P
3721 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3722#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003723#ifdef WLAN_FEATURE_11AC
3724 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3725 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3726#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 return ;
3728}
Jeff Johnson295189b2012-06-20 16:38:30 -07003729/*
3730 * -------------------------------------------------------------------------
3731 * CFG update to WDI
3732 * -------------------------------------------------------------------------
3733 */
3734
3735 /*
3736 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3737 * Convert the WNI CFG ID to HAL CFG ID
3738 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003739static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003740{
3741 switch(wniCfgId)
3742 {
3743 case WNI_CFG_STA_ID:
3744 return QWLAN_HAL_CFG_STA_ID;
3745 case WNI_CFG_CURRENT_TX_ANTENNA:
3746 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3747 case WNI_CFG_CURRENT_RX_ANTENNA:
3748 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3749 case WNI_CFG_LOW_GAIN_OVERRIDE:
3750 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3751 case WNI_CFG_POWER_STATE_PER_CHAIN:
3752 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3753 case WNI_CFG_CAL_PERIOD:
3754 return QWLAN_HAL_CFG_CAL_PERIOD;
3755 case WNI_CFG_CAL_CONTROL:
3756 return QWLAN_HAL_CFG_CAL_CONTROL;
3757 case WNI_CFG_PROXIMITY:
3758 return QWLAN_HAL_CFG_PROXIMITY;
3759 case WNI_CFG_NETWORK_DENSITY:
3760 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3761 case WNI_CFG_MAX_MEDIUM_TIME:
3762 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3763 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3764 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3765 case WNI_CFG_RTS_THRESHOLD:
3766 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3767 case WNI_CFG_SHORT_RETRY_LIMIT:
3768 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3769 case WNI_CFG_LONG_RETRY_LIMIT:
3770 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3771 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3772 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3773 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3774 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3775 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3776 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3777 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3778 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3779 case WNI_CFG_FIXED_RATE:
3780 return QWLAN_HAL_CFG_FIXED_RATE;
3781 case WNI_CFG_RETRYRATE_POLICY:
3782 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3783 case WNI_CFG_RETRYRATE_SECONDARY:
3784 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3785 case WNI_CFG_RETRYRATE_TERTIARY:
3786 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3787 case WNI_CFG_FORCE_POLICY_PROTECTION:
3788 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3789 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3790 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3791 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3792 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3793 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3794 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3795 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3796 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3797 case WNI_CFG_MAX_BA_SESSIONS:
3798 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3799 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3800 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3801 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3802 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3803 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3804 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3805 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3806 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3807 case WNI_CFG_STATS_PERIOD:
3808 return QWLAN_HAL_CFG_STATS_PERIOD;
3809 case WNI_CFG_CFP_MAX_DURATION:
3810 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3811#if 0 /*This is not part of CFG*/
3812 case WNI_CFG_FRAME_TRANS_ENABLED:
3813 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3814#endif
3815 case WNI_CFG_DTIM_PERIOD:
3816 return QWLAN_HAL_CFG_DTIM_PERIOD;
3817 case WNI_CFG_EDCA_WME_ACBK:
3818 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3819 case WNI_CFG_EDCA_WME_ACBE:
3820 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3821 case WNI_CFG_EDCA_WME_ACVI:
3822 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3823 case WNI_CFG_EDCA_WME_ACVO:
3824 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3825#if 0
3826 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3827 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3828 case WNI_CFG_TELE_BCN_TRANS_LI:
3829 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3830 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3831 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3832 case WNI_CFG_TELE_BCN_MAX_LI:
3833 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3834 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3835 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3836#endif
3837 case WNI_CFG_ENABLE_CLOSE_LOOP:
3838 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
3839 default:
3840 {
3841 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3842 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3843 wniCfgId);
3844 return VOS_STATUS_E_INVAL;
3845 }
3846 }
3847}
Jeff Johnson295189b2012-06-20 16:38:30 -07003848/*
3849 * FUNCTION: WDA_UpdateCfgCallback
3850 *
3851 */
3852void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3853{
3854 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3855 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3856 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003858 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003859 /*
3860 * currently there is no response message is expected between PE and
3861 * WDA, Failure return from WDI is a ASSERT condition
3862 */
3863 if(WDI_STATUS_SUCCESS != wdiStatus)
3864 {
3865 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003866 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003867 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3868 }
3869
3870 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3871 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3872 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 return ;
3874}
Jeff Johnson295189b2012-06-20 16:38:30 -07003875/*
3876 * FUNCTION: WDA_UpdateCfg
3877 *
3878 */
3879VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3880{
3881
3882 WDI_Status status = WDI_STATUS_SUCCESS ;
3883 tANI_U32 val =0;
3884 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3885 tHalCfg *configData;
3886 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3887 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 if (NULL == pMac )
3891 {
3892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003893 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 return VOS_STATUS_E_FAILURE;
3895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 if(WDA_START_STATE != pWDA->wdaState)
3897 {
3898 return VOS_STATUS_E_FAILURE;
3899 }
3900
3901 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003904 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 VOS_ASSERT(0);
3906 return VOS_STATUS_E_FAILURE;
3907 }
3908
3909 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3910 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003911 if(NULL == wdiCfgReqParam)
3912 {
3913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 VOS_ASSERT(0);
3916 return VOS_STATUS_E_NOMEM;
3917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3919 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 if(NULL == wdiCfgReqParam->pConfigBuffer)
3921 {
3922 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003923 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003924 vos_mem_free(wdiCfgReqParam);
3925 VOS_ASSERT(0);
3926 return VOS_STATUS_E_NOMEM;
3927 }
3928
3929 /*convert the WNI CFG Id to HAL CFG Id*/
3930 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3931 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3932
3933 /*TODO: revisit this for handling string parameters */
3934 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3935 &val) != eSIR_SUCCESS)
3936 {
3937 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3938 "Failed to cfg get id %d\n", cfgParam->bodyval);
3939 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3940 vos_mem_free(wdiCfgReqParam);
3941 return eSIR_FAILURE;
3942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3944 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3945 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3946 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3947 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3948
3949 /* store Params pass it to WDI */
3950 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003951#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3952 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3953 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 if(IS_WDI_STATUS_FAILURE(status))
3955 {
3956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3957 "Failure in Update CFG WDI API, free all the memory " );
3958 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3959 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3960 pWDA->wdaWdiCfgApiMsgParam = NULL;
3961 /* Failure is not expected */
3962 VOS_ASSERT(0) ;
3963 }
3964#else
3965 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3966 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3967 pWDA->wdaWdiCfgApiMsgParam = NULL;
3968#endif
3969 return CONVERT_WDI2VOS_STATUS(status) ;
3970}
3971
Jeff Johnson295189b2012-06-20 16:38:30 -07003972VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
3973 v_U8_t *pDefaultKeyId,
3974 v_U8_t *pNumKeys,
3975 WDI_KeysType *pWdiKeys )
3976{
3977 v_U32_t i, j, defKeyId = 0;
3978 v_U32_t val = SIR_MAC_KEY_LENGTH;
3979 VOS_STATUS status = WDI_STATUS_SUCCESS;
3980 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 if (NULL == pMac )
3982 {
3983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003984 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 return VOS_STATUS_E_FAILURE;
3986 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
3988 &defKeyId ))
3989 {
3990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3991 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
3992 }
3993
3994 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 /* Need to extract ALL of the configured WEP Keys */
3996 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
3997 {
3998 val = SIR_MAC_KEY_LENGTH;
3999 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4000 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4001 pWdiKeys[j].key,
4002 &val ))
4003 {
4004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4005 "WEP Key index [%d] may not configured in CFG\n",i);
4006 }
4007 else
4008 {
4009 pWdiKeys[j].keyId = (tANI_U8) i;
4010 /*
4011 * Actually, a DC (Don't Care) because
4012 * this is determined (and set) by PE/MLME
4013 */
4014 pWdiKeys[j].unicast = 0;
4015 /*
4016 * Another DC (Don't Care)
4017 */
4018 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4019 /* Another DC (Don't Care). Unused for WEP */
4020 pWdiKeys[j].paeRole = 0;
4021 /* Determined from wlan_cfgGetStr() above.*/
4022 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 j++;
4024 *pNumKeys = (tANI_U8) j;
4025 }
4026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 return status;
4028}
Jeff Johnson295189b2012-06-20 16:38:30 -07004029/*
4030 * FUNCTION: WDA_SetBssKeyReqCallback
4031 * send SET BSS key RSP back to PE
4032 */
4033void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4034{
4035 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4036 tWDA_CbContext *pWDA;
4037 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004039 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004040 if(NULL == pWdaParams)
4041 {
4042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004043 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004044 VOS_ASSERT(0) ;
4045 return ;
4046 }
4047 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4048 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4050 vos_mem_free(pWdaParams) ;
4051 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004052 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004053 return ;
4054}
Jeff Johnson295189b2012-06-20 16:38:30 -07004055/*
4056 * FUNCTION: WDA_ProcessSetBssKeyReq
4057 * Request to WDI for programming the BSS key( key for
4058 * broadcast/multicast frames Encryption)
4059 */
4060VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4061 tSetBssKeyParams *setBssKeyParams )
4062{
4063 WDI_Status status = WDI_STATUS_SUCCESS ;
4064 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4065 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4066 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4067 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004070 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 if(NULL == wdiSetBssKeyParam)
4072 {
4073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004074 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 VOS_ASSERT(0);
4076 return VOS_STATUS_E_NOMEM;
4077 }
4078 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4079 if(NULL == pWdaParams)
4080 {
4081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004083 VOS_ASSERT(0);
4084 vos_mem_free(wdiSetBssKeyParam);
4085 return VOS_STATUS_E_NOMEM;
4086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004088 /* copy set BSS params to WDI structure */
4089 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4090 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4091 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 if(setBssKeyParams->encType != eSIR_ED_NONE)
4093 {
4094 if( setBssKeyParams->numKeys == 0 &&
4095 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4096 setBssKeyParams->encType == eSIR_ED_WEP104))
4097 {
4098 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4100 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4101 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4102 }
4103 else
4104 {
4105 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4106 {
4107 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4108 setBssKeyParams->key[keyIndex].keyId;
4109 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4110 setBssKeyParams->key[keyIndex].unicast;
4111 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4112 setBssKeyParams->key[keyIndex].keyDirection;
4113 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4114 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4115 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4116 setBssKeyParams->key[keyIndex].paeRole;
4117 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4118 setBssKeyParams->key[keyIndex].keyLength;
4119 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4120 setBssKeyParams->key[keyIndex].key,
4121 SIR_MAC_MAX_KEY_LENGTH);
4122 }
4123 }
4124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4126 setBssKeyParams->singleTidRc;
4127 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004128 /* Store set key pointer, as this will be used for response */
4129 /* store Params pass it to WDI */
4130 pWdaParams->pWdaContext = pWDA;
4131 pWdaParams->wdaMsgParam = setBssKeyParams;
4132 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004133 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4134 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4135
4136 if(IS_WDI_STATUS_FAILURE(status))
4137 {
4138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4139 "Failure in Set BSS Key Req WDI API, free all the memory " );
4140 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4141 vos_mem_free(pWdaParams) ;
4142 setBssKeyParams->status = eSIR_FAILURE ;
4143 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004145 return CONVERT_WDI2VOS_STATUS(status) ;
4146}
Jeff Johnson295189b2012-06-20 16:38:30 -07004147/*
4148 * FUNCTION: WDA_RemoveBssKeyReqCallback
4149 * send SET BSS key RSP back to PE
4150 */
4151void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4152{
4153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4154 tWDA_CbContext *pWDA;
4155 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004157 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 if(NULL == pWdaParams)
4159 {
4160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004161 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004162 VOS_ASSERT(0) ;
4163 return ;
4164 }
4165 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4166 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4168 vos_mem_free(pWdaParams) ;
4169
4170 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004171 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 return ;
4173}
Jeff Johnson295189b2012-06-20 16:38:30 -07004174/*
4175 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4176 * Request to WDI to remove the BSS key( key for broadcast/multicast
4177 * frames Encryption)
4178 */
4179VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4180 tRemoveBssKeyParams *removeBssKeyParams )
4181{
4182 WDI_Status status = WDI_STATUS_SUCCESS ;
4183 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4184 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4185 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4186 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004188 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 if(NULL == wdiRemoveBssKeyParam)
4190 {
4191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004192 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 VOS_ASSERT(0);
4194 return VOS_STATUS_E_NOMEM;
4195 }
4196 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4197 if(NULL == pWdaParams)
4198 {
4199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004200 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 VOS_ASSERT(0);
4202 vos_mem_free(wdiRemoveBssKeyParam);
4203 return VOS_STATUS_E_NOMEM;
4204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 /* copy Remove BSS key params to WDI structure*/
4206 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4207 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4208 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4209 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4210 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 /* Store remove key pointer, as this will be used for response */
4212 /* store Params pass it to WDI */
4213 pWdaParams->pWdaContext = pWDA;
4214 pWdaParams->wdaMsgParam = removeBssKeyParams;
4215 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4217 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 if(IS_WDI_STATUS_FAILURE(status))
4219 {
4220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4221 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4222 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4223 vos_mem_free(pWdaParams) ;
4224 removeBssKeyParams->status = eSIR_FAILURE ;
4225 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 return CONVERT_WDI2VOS_STATUS(status) ;
4228}
Jeff Johnson295189b2012-06-20 16:38:30 -07004229/*
4230 * FUNCTION: WDA_SetBssKeyReqCallback
4231 * send SET BSS key RSP back to PE
4232 */
4233void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4234{
4235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4236 tWDA_CbContext *pWDA;
4237 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004239 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004240 if(NULL == pWdaParams)
4241 {
4242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004243 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 VOS_ASSERT(0) ;
4245 return ;
4246 }
4247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4248 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4250 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004252 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004253 return ;
4254}
Jeff Johnson295189b2012-06-20 16:38:30 -07004255/*
4256 * FUNCTION: WDA_ProcessSetStaKeyReq
4257 * Request to WDI for programming the STA key( key for Unicast frames
4258 * Encryption)
4259 */
4260VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4261 tSetStaKeyParams *setStaKeyParams )
4262{
4263 WDI_Status status = WDI_STATUS_SUCCESS ;
4264 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4265 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4266 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4267 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004270 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 if(NULL == wdiSetStaKeyParam)
4272 {
4273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004274 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 VOS_ASSERT(0);
4276 return VOS_STATUS_E_NOMEM;
4277 }
4278 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4279 if(NULL == pWdaParams)
4280 {
4281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 VOS_ASSERT(0);
4284 vos_mem_free(wdiSetStaKeyParam);
4285 return VOS_STATUS_E_NOMEM;
4286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004288 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004289 /* copy set STA key params to WDI structure */
4290 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4291 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4292 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4293 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 if(setStaKeyParams->encType != eSIR_ED_NONE)
4295 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004296 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004297 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4298 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4299 {
4300 WDA_GetWepKeysFromCfg( pWDA,
4301 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4302 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4303 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4304 }
4305 else
4306 {
4307#ifdef WLAN_SOFTAP_FEATURE
4308 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4309 keyIndex++)
4310 {
4311 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4312 setStaKeyParams->key[keyIndex].keyId;
4313 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4314 setStaKeyParams->key[keyIndex].unicast;
4315 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4316 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004317 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4318 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4319 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4320 setStaKeyParams->key[keyIndex].paeRole;
4321 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4322 setStaKeyParams->key[keyIndex].keyLength;
4323 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4324 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4325 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4326 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4327 {
4328 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4329 }
4330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004331 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4332 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4333#else
4334 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4335 setStaKeyParams->key.keyId;
4336 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4337 setStaKeyParams->key.unicast;
4338 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4339 setStaKeyParams->key.keyDirection;
4340 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4341 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4342 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4343 setStaKeyParams->key.paeRole;
4344 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4345 setStaKeyParams->key.keyLength;
4346 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4347 setStaKeyParams->key[keyIndex].key,
4348 SIR_MAC_MAX_KEY_LENGTH);
4349 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4350#endif
4351 }
4352 }
4353 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4354 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 /* Store set key pointer, as this will be used for response */
4356 /* store Params pass it to WDI */
4357 pWdaParams->pWdaContext = pWDA;
4358 pWdaParams->wdaMsgParam = setStaKeyParams;
4359 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004360 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4361 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 if(IS_WDI_STATUS_FAILURE(status))
4363 {
4364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4365 "Failure in set STA Key Req WDI API, free all the memory " );
4366 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4367 vos_mem_free(pWdaParams) ;
4368 setStaKeyParams->status = eSIR_FAILURE ;
4369 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 return CONVERT_WDI2VOS_STATUS(status) ;
4372}
Jeff Johnson295189b2012-06-20 16:38:30 -07004373/*
4374 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4375 * send SET Bcast STA key RSP back to PE
4376 */
4377void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4378{
4379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4380 tWDA_CbContext *pWDA;
4381 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004384 if(NULL == pWdaParams)
4385 {
4386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004387 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 VOS_ASSERT(0) ;
4389 return ;
4390 }
4391 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4392 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4394 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004397 return ;
4398}
4399
Jeff Johnson295189b2012-06-20 16:38:30 -07004400/*
4401 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4402 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4403 * Encryption)
4404 */
4405VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4406 tSetStaKeyParams *setStaKeyParams )
4407{
4408 WDI_Status status = WDI_STATUS_SUCCESS ;
4409 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4410 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4411 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4412 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 if(NULL == wdiSetStaKeyParam)
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004419 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 VOS_ASSERT(0);
4421 return VOS_STATUS_E_NOMEM;
4422 }
4423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4424 if(NULL == pWdaParams)
4425 {
4426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 VOS_ASSERT(0);
4429 vos_mem_free(wdiSetStaKeyParam);
4430 return VOS_STATUS_E_NOMEM;
4431 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004433 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004434 /* copy set STA key params to WDI structure */
4435 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4436 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4437 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4438 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 if(setStaKeyParams->encType != eSIR_ED_NONE)
4440 {
4441#ifdef WLAN_SOFTAP_FEATURE
4442 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4443 keyIndex++)
4444 {
4445 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4446 setStaKeyParams->key[keyIndex].keyId;
4447 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4448 setStaKeyParams->key[keyIndex].unicast;
4449 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4450 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004451 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4452 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4453 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4454 setStaKeyParams->key[keyIndex].paeRole;
4455 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4456 setStaKeyParams->key[keyIndex].keyLength;
4457 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4458 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4459 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4461 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4462#else
4463 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4464 setStaKeyParams->key.keyId;
4465 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4466 setStaKeyParams->key.unicast;
4467 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4468 setStaKeyParams->key.keyDirection;
4469 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4470 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4471 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4472 setStaKeyParams->key.paeRole;
4473 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4474 setStaKeyParams->key.keyLength;
4475 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4476 setStaKeyParams->key[keyIndex].key,
4477 SIR_MAC_MAX_KEY_LENGTH);
4478 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4479#endif
4480 }
4481 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004482 /* Store set key pointer, as this will be used for response */
4483 /* store Params pass it to WDI */
4484 pWdaParams->pWdaContext = pWDA;
4485 pWdaParams->wdaMsgParam = setStaKeyParams;
4486 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004487 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4488 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 if(IS_WDI_STATUS_FAILURE(status))
4490 {
4491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4492 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4494 vos_mem_free(pWdaParams) ;
4495 setStaKeyParams->status = eSIR_FAILURE ;
4496 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 return CONVERT_WDI2VOS_STATUS(status) ;
4499}
Jeff Johnson295189b2012-06-20 16:38:30 -07004500/*
4501 * FUNCTION: WDA_RemoveStaKeyReqCallback
4502 * send SET BSS key RSP back to PE
4503 */
4504void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4505{
4506 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4507 tWDA_CbContext *pWDA;
4508 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004510 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 if(NULL == pWdaParams)
4512 {
4513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004514 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 VOS_ASSERT(0) ;
4516 return ;
4517 }
4518 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4519 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4521 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004523 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004524 return ;
4525}
4526
Jeff Johnson295189b2012-06-20 16:38:30 -07004527/*
4528 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4529 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4530 */
4531VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4532 tRemoveStaKeyParams *removeStaKeyParams )
4533{
4534 WDI_Status status = WDI_STATUS_SUCCESS ;
4535 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4536 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4537 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4538 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 if(NULL == wdiRemoveStaKeyParam)
4542 {
4543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004545 VOS_ASSERT(0);
4546 return VOS_STATUS_E_NOMEM;
4547 }
4548 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4549 if(NULL == pWdaParams)
4550 {
4551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 VOS_ASSERT(0);
4554 vos_mem_free(wdiRemoveStaKeyParam);
4555 return VOS_STATUS_E_NOMEM;
4556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 /* copy remove STA key params to WDI structure*/
4558 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4559 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4560 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4561 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4562 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004563 /* Store remove key pointer, as this will be used for response */
4564 /* store Params pass it to WDI */
4565 pWdaParams->pWdaContext = pWDA;
4566 pWdaParams->wdaMsgParam = removeStaKeyParams;
4567 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4569 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 if(IS_WDI_STATUS_FAILURE(status))
4571 {
4572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4573 "Failure in remove STA Key Req WDI API, free all the memory " );
4574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4575 vos_mem_free(pWdaParams) ;
4576 removeStaKeyParams->status = eSIR_FAILURE ;
4577 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 return CONVERT_WDI2VOS_STATUS(status) ;
4580}
Jeff Johnson295189b2012-06-20 16:38:30 -07004581/*
4582 * FUNCTION: WDA_IsHandleSetLinkStateReq
4583 * Update the WDA state and return the status to handle this message or not
4584 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004585WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4586 tWDA_CbContext *pWDA,
4587 tLinkStateParams *linkStateParams)
4588{
4589 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 switch(linkStateParams->state)
4591 {
4592 case eSIR_LINK_PREASSOC_STATE:
4593 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4594 /*
4595 * set the WDA state to PRE ASSOC
4596 * copy the BSSID into pWDA to use it in join request and return,
4597 * No need to handle these messages.
4598 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004599 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4600 {
4601 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004603 }
4604 else
4605 {
4606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004607 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004608 VOS_ASSERT(0);
4609 }
4610
4611 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4612 {
4613 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004614 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004615 }
4616 else
4617 {
4618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004619 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004620 VOS_ASSERT(0);
4621 }
4622
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4624 *channel and after ) so reset the WDA state to ready when the second
4625 * time UMAC issue the link state with PREASSOC
4626 */
4627 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4628 {
4629 /* RESET WDA state back to WDA_READY_STATE */
4630 pWDA->wdaState = WDA_READY_STATE;
4631 }
4632 else
4633 {
4634 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4635 }
4636 //populate linkState info in WDACbCtxt
4637 pWDA->linkState = linkStateParams->state;
4638 status = WDA_IGNORE_SET_LINK_STATE;
4639 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004640 default:
4641 if(pWDA->wdaState != WDA_READY_STATE)
4642 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004643 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4644 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4645 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4646 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4647 *the ASSERT in WDA_Stop during module unload.*/
4648 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4649 {
4650 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004651 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004652 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004653 else
4654 {
4655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004656 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004657 status = WDA_IGNORE_SET_LINK_STATE;
4658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004659 }
4660 break;
4661 }
4662
4663 return status;
4664}
Jeff Johnson295189b2012-06-20 16:38:30 -07004665/*
4666 * FUNCTION: WDA_SetLinkStateCallback
4667 * call back function for set link state from WDI
4668 */
4669void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4670{
4671 tWDA_CbContext *pWDA;
4672 tLinkStateParams *linkStateParams;
4673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004675 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 if(NULL == pWdaParams)
4677 {
4678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004679 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004680 VOS_ASSERT(0) ;
4681 return ;
4682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 /*
4686 * In STA mode start the BA activity check timer after association
4687 * and in AP mode start BA activity check timer after BSS start */
4688 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4689 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4690 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4691 {
4692 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004694 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 /*
4696 * No respone required for WDA_SET_LINK_STATE so free the request
4697 * param here
4698 */
4699 if( pWdaParams != NULL )
4700 {
4701 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4702 {
4703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4704 }
4705 vos_mem_free(pWdaParams);
4706 }
4707 return ;
4708}
Jeff Johnson295189b2012-06-20 16:38:30 -07004709/*
4710 * FUNCTION: WDA_ProcessSetLinkState
4711 * Request to WDI to set the link status.
4712 */
4713VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4714 tLinkStateParams *linkStateParams)
4715{
4716 WDI_Status status = WDI_STATUS_SUCCESS ;
4717 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4718 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4719 sizeof(WDI_SetLinkReqParamsType)) ;
4720 tWDA_ReqParams *pWdaParams ;
4721 tpAniSirGlobal pMac;
4722 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4723
4724 if(NULL == pMac)
4725 {
4726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004727 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004729 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 return VOS_STATUS_E_FAILURE;
4731 }
4732
4733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004734 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 if(NULL == wdiSetLinkStateParam)
4736 {
4737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 VOS_ASSERT(0);
4740 return VOS_STATUS_E_NOMEM;
4741 }
4742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4743 if(NULL == pWdaParams)
4744 {
4745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004747 VOS_ASSERT(0);
4748 vos_mem_free(wdiSetLinkStateParam);
4749 return VOS_STATUS_E_NOMEM;
4750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 if(WDA_IGNORE_SET_LINK_STATE ==
4752 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4753 {
4754 status = WDI_STATUS_E_FAILURE;
4755 }
4756 else
4757 {
4758 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4759 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4761 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4763 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004764 pWdaParams->pWdaContext = pWDA;
4765 /* Store remove key pointer, as this will be used for response */
4766 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 /* store Params pass it to WDI */
4768 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4769 /* Stop Timer only other than GO role and concurrent session */
4770 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4771 && !vos_concurrent_sessions_running() &&
4772 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4773 {
4774 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4777 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 if(IS_WDI_STATUS_FAILURE(status))
4779 {
4780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4781 "Failure in set link state Req WDI API, free all the memory " );
4782 }
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 if(IS_WDI_STATUS_FAILURE(status))
4785 {
4786 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004787 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004788 vos_mem_free(pWdaParams);
4789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004790 return CONVERT_WDI2VOS_STATUS(status) ;
4791}
Jeff Johnson295189b2012-06-20 16:38:30 -07004792/*
4793 * FUNCTION: WDA_GetStatsReqParamsCallback
4794 * send the response to PE with Stats received from WDI
4795 */
4796void WDA_GetStatsReqParamsCallback(
4797 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4798 void* pUserData)
4799{
4800 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4801 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4802
4803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004804 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 pGetPEStatsRspParams =
4806 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4807 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4808
4809 if(NULL == pGetPEStatsRspParams)
4810 {
4811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004812 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004813 VOS_ASSERT(0);
4814 return;
4815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4817 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4818 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4819 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4820 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4821
4822 //Fill the Session Id Properly in PE
4823 pGetPEStatsRspParams->sessionId = 0;
4824 pGetPEStatsRspParams->rc =
4825 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4826 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4827 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 vos_mem_copy( pGetPEStatsRspParams + 1,
4829 wdiGetStatsRsp + 1,
4830 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 /* send response to UMAC*/
4832 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4833
4834 return;
4835}
4836
Jeff Johnson295189b2012-06-20 16:38:30 -07004837/*
4838 * FUNCTION: WDA_ProcessGetStatsReq
4839 * Request to WDI to get the statistics
4840 */
4841VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4842 tAniGetPEStatsReq *pGetStatsParams)
4843{
4844 WDI_Status status = WDI_STATUS_SUCCESS ;
4845 WDI_GetStatsReqParamsType wdiGetStatsParam;
4846 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004848 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4850 pGetStatsParams->staId;
4851 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4852 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 status = WDI_GetStatsReq(&wdiGetStatsParam,
4855 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if(IS_WDI_STATUS_FAILURE(status))
4857 {
4858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4859 "Failure in Get Stats Req WDI API, free all the memory " );
4860 pGetPEStatsRspParams =
4861 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4862 if(NULL == pGetPEStatsRspParams)
4863 {
4864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004866 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004867 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004868 return VOS_STATUS_E_NOMEM;
4869 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4871 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4872 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4873 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4874 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4875 (void *)pGetPEStatsRspParams, 0) ;
4876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 /* Free the request message */
4878 vos_mem_free(pGetStatsParams);
4879 return CONVERT_WDI2VOS_STATUS(status);
4880}
Jeff Johnson295189b2012-06-20 16:38:30 -07004881/*
4882 * FUNCTION: WDA_UpdateEDCAParamCallback
4883 * call back function for Update EDCA params from WDI
4884 */
4885void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4886{
4887 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4888 tEdcaParams *pEdcaParams;
4889
4890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004892 if(NULL == pWdaParams)
4893 {
4894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004895 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004896 VOS_ASSERT(0) ;
4897 return ;
4898 }
4899 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4901 vos_mem_free(pWdaParams);
4902 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 return ;
4904}
Jeff Johnson295189b2012-06-20 16:38:30 -07004905/*
4906 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4907 * Request to WDI to Update the EDCA params.
4908 */
4909VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4910 tEdcaParams *pEdcaParams)
4911{
4912 WDI_Status status = WDI_STATUS_SUCCESS ;
4913 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4914 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4915 sizeof(WDI_UpdateEDCAParamsType)) ;
4916 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004918 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 if(NULL == wdiEdcaParam)
4920 {
4921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004922 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004923 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004924 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 return VOS_STATUS_E_NOMEM;
4926 }
4927 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4928 if(NULL == pWdaParams)
4929 {
4930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004931 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 VOS_ASSERT(0);
4933 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004934 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 return VOS_STATUS_E_NOMEM;
4936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004937 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4938 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4939 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4940 &pEdcaParams->acbe);
4941 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4942 &pEdcaParams->acbk);
4943 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4944 &pEdcaParams->acvi);
4945 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4946 &pEdcaParams->acvo);
4947 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 pWdaParams->pWdaContext = pWDA;
4949 /* Store remove key pointer, as this will be used for response */
4950 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 /* store Params pass it to WDI */
4952 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4954 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 if(IS_WDI_STATUS_FAILURE(status))
4956 {
4957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4958 "Failure in Update EDCA Params WDI API, free all the memory " );
4959 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4960 vos_mem_free(pWdaParams);
4961 vos_mem_free(pEdcaParams);
4962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004963 return CONVERT_WDI2VOS_STATUS(status) ;
4964}
Jeff Johnson295189b2012-06-20 16:38:30 -07004965/*
4966 * FUNCTION: WDA_AddBAReqCallback
4967 * send ADD BA RSP back to PE
4968 */
4969void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
4970 void* pUserData)
4971{
4972 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4973 tWDA_CbContext *pWDA;
4974 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004976 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004977 if(NULL == pWdaParams)
4978 {
4979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004980 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 VOS_ASSERT(0) ;
4982 return ;
4983 }
4984 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4985 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4987 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004989 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 return ;
4991}
4992
Jeff Johnson295189b2012-06-20 16:38:30 -07004993/*
4994 * FUNCTION: WDA_ProcessAddBAReq
4995 * Request to WDI to Update the ADDBA REQ params.
4996 */
4997VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
4998 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
4999{
Jeff Johnson43971f52012-07-17 12:26:56 -07005000 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5002 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5003 sizeof(WDI_AddBAReqParamsType)) ;
5004 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 if(NULL == wdiAddBAReqParam)
5008 {
5009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005011 VOS_ASSERT(0);
5012 return VOS_STATUS_E_NOMEM;
5013 }
5014 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5015 if(NULL == pWdaParams)
5016 {
5017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005018 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 VOS_ASSERT(0);
5020 vos_mem_free(wdiAddBAReqParam);
5021 return VOS_STATUS_E_NOMEM;
5022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 do
5024 {
5025 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 wdiAddBaInfo->ucSTAIdx = staIdx ;
5027 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5028 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005029 } while(0) ;
5030 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 pWdaParams->pWdaContext = pWDA;
5032 /* store Params pass it to WDI */
5033 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5034 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005035 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5036 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005037
Jeff Johnson43971f52012-07-17 12:26:56 -07005038 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 {
5040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005041 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5042 status = CONVERT_WDI2VOS_STATUS(wstatus);
5043 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 vos_mem_free(pWdaParams);
5045 pAddBAReqParams->status = eSIR_FAILURE;
5046 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5047 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005048 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005049}
Jeff Johnson295189b2012-06-20 16:38:30 -07005050/*
5051 * FUNCTION: WDA_AddBASessionReqCallback
5052 * send ADD BA SESSION RSP back to PE/(or TL)
5053 */
5054void WDA_AddBASessionReqCallback(
5055 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5056{
5057 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5058 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5059 tWDA_CbContext *pWDA;
5060 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005062 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 if(NULL == pWdaParams)
5064 {
5065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005066 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005067 VOS_ASSERT(0) ;
5068 return ;
5069 }
5070 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5071 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 if( NULL == pAddBAReqParams )
5073 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005075 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5078 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 return ;
5080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5082 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 /*
5084 * if WDA in update TL state, update TL with BA session parama and send
5085 * another request to HAL(/WDI) (ADD_BA_REQ)
5086 */
5087
5088 if((VOS_STATUS_SUCCESS ==
5089 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5090 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5091 {
5092 /* Update TL with BA info received from HAL/WDI */
5093 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5094 wdiAddBaSession->usBaSessionID,
5095 wdiAddBaSession->ucSTAIdx,
5096 wdiAddBaSession->ucBaTID,
5097 wdiAddBaSession->ucBaBufferSize,
5098 wdiAddBaSession->ucWinSize,
5099 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5101 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5102 }
5103 else
5104 {
5105 pAddBAReqParams->status =
5106 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5107
5108 /* Setting Flag to indicate that Set BA is success */
5109 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5110 {
5111 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5112 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5113 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005117 /*Reset the WDA state to READY */
5118 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005119 return ;
5120}
5121
Jeff Johnson295189b2012-06-20 16:38:30 -07005122/*
5123 * FUNCTION: WDA_ProcessAddBASessionReq
5124 * Request to WDI to Update the ADDBA REQ params.
5125 */
5126VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5127 tAddBAParams *pAddBAReqParams)
5128{
5129 WDI_Status status = WDI_STATUS_SUCCESS ;
5130 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5131 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5132 sizeof(WDI_AddBASessionReqParamsType)) ;
5133 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005135 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 if(NULL == wdiAddBASessionReqParam)
5137 {
5138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005139 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005140 VOS_ASSERT(0);
5141 return VOS_STATUS_E_NOMEM;
5142 }
5143 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5144 if(NULL == pWdaParams)
5145 {
5146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005147 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 VOS_ASSERT(0);
5149 vos_mem_free(wdiAddBASessionReqParam);
5150 return VOS_STATUS_E_NOMEM;
5151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 /*
5153 * Populate ADD BA parameters and pass these paarmeters to WDI.
5154 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5155 * the state to track if these is BA recipient case or BA initiator
5156 * case.
5157 */
5158 do
5159 {
5160 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5161 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5162 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5163 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5164 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5165 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5166 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5169 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5170 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5171 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5172 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 /* check the BA direction and update state accordingly */
5174 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5175 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5176 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5177
5178 }while(0) ;
5179 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 pWdaParams->pWdaContext = pWDA;
5181 /* Store ADD BA pointer, as this will be used for response */
5182 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5183 /* store Params pass it to WDI */
5184 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5186 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, 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 ADD BA Session REQ Params WDI API, free all the memory " );
5191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5192 vos_mem_free(pWdaParams->wdaMsgParam);
5193 vos_mem_free(pWdaParams);
5194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005195 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196}
Jeff Johnson295189b2012-06-20 16:38:30 -07005197/*
5198 * FUNCTION: WDA_DelBANotifyTL
5199 * send DEL BA IND to TL
5200 */
5201void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5202 tDelBAParams *pDelBAReqParams)
5203{
5204 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5205 //tSirMsgQ msg;
5206 vos_msg_t vosMsg;
5207 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005208 if(NULL == pDelBAInd)
5209 {
5210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 VOS_ASSERT(0) ;
5213 return;
5214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5216 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5217 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5218 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005219
Jeff Johnson295189b2012-06-20 16:38:30 -07005220
5221 vosMsg.type = WDA_DELETEBA_IND;
5222 vosMsg.bodyptr = pDelBAInd;
5223 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5224 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5225 {
5226 vosStatus = VOS_STATUS_E_BADMSG;
5227 }
5228}
Jeff Johnson295189b2012-06-20 16:38:30 -07005229/*
5230 * FUNCTION: WDA_DelBAReqCallback
5231 * send DEL BA RSP back to PE
5232 */
5233void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5234{
5235 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5236 tWDA_CbContext *pWDA;
5237 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005239 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if(NULL == pWdaParams)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT(0) ;
5245 return ;
5246 }
5247 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5248 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 /* Notify TL about DEL BA in case of recipinet */
5250 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5251 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5252 {
5253 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 /*
5256 * No respone required for WDA_DELBA_IND so just free the request
5257 * param here
5258 */
5259 vos_mem_free(pDelBAReqParams);
5260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5261 vos_mem_free(pWdaParams);
5262 return ;
5263}
5264
Jeff Johnson295189b2012-06-20 16:38:30 -07005265/*
5266 * FUNCTION: WDA_ProcessDelBAReq
5267 * Request to WDI to Update the DELBA REQ params.
5268 */
5269VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5270 tDelBAParams *pDelBAReqParams)
5271{
5272 WDI_Status status = WDI_STATUS_SUCCESS ;
5273 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5274 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5275 sizeof(WDI_DelBAReqParamsType)) ;
5276 tWDA_ReqParams *pWdaParams ;
5277 tANI_U16 staIdx = 0;
5278 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005280 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 if(NULL == wdiDelBAReqParam)
5282 {
5283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005285 VOS_ASSERT(0);
5286 return VOS_STATUS_E_NOMEM;
5287 }
5288 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5289 if(NULL == pWdaParams)
5290 {
5291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005293 VOS_ASSERT(0);
5294 vos_mem_free(wdiDelBAReqParam);
5295 return VOS_STATUS_E_NOMEM;
5296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5298 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5299 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5300 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 pWdaParams->pWdaContext = pWDA;
5302 /* Store DEL BA pointer, as this will be used for response */
5303 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 /* store Params pass it to WDI */
5305 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005306 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5307 * maintained in WDA, so that WDA can retry for another BA session
5308 */
5309 staIdx = pDelBAReqParams->staIdx;
5310 tid = pDelBAReqParams->baTID;
5311 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005312 status = WDI_DelBAReq(wdiDelBAReqParam,
5313 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 if(IS_WDI_STATUS_FAILURE(status))
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5317 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5319 vos_mem_free(pWdaParams->wdaMsgParam);
5320 vos_mem_free(pWdaParams);
5321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005323}
Jeff Johnson295189b2012-06-20 16:38:30 -07005324/*
5325 * FUNCTION: WDA_AddTSReqCallback
5326 * send ADD TS RSP back to PE
5327 */
5328void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5329{
5330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5331 tWDA_CbContext *pWDA;
5332 tAddTsParams *pAddTsReqParams;
5333
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 if(NULL == pWdaParams)
5337 {
5338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005339 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 VOS_ASSERT(0) ;
5341 return ;
5342 }
5343 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5344 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5345 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5346 vos_mem_free(pWdaParams);
5347
5348 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005349 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 return ;
5351}
5352
Jeff Johnson295189b2012-06-20 16:38:30 -07005353/*
5354 * FUNCTION: WDA_ProcessAddTSReq
5355 * Request to WDI to Update the ADD TS REQ params.
5356 */
5357VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5358 tAddTsParams *pAddTsReqParams)
5359{
5360 WDI_Status status = WDI_STATUS_SUCCESS ;
5361 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5362 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5363 sizeof(WDI_AddTSReqParamsType)) ;
5364 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005366 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005367 if(NULL == wdiAddTSReqParam)
5368 {
5369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005370 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005371 VOS_ASSERT(0);
5372 return VOS_STATUS_E_NOMEM;
5373 }
5374 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5375 if(NULL == pWdaParams)
5376 {
5377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005378 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 VOS_ASSERT(0);
5380 vos_mem_free(wdiAddTSReqParam);
5381 return VOS_STATUS_E_NOMEM;
5382 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5384 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 //TS IE
5386 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5387 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5388 pAddTsReqParams->tspec.length;
5389
5390 //TS IE : TS INFO : TRAFFIC
5391 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5392 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5393 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5394 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5395 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5396 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5397 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5398 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5399 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5400 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5401 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5402 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5403 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5404 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5405 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5406 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5407
5408 //TS IE : TS INFO : SCHEDULE
5409 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5410 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5411 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5412 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005413 //TS IE
5414 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5415 pAddTsReqParams->tspec.nomMsduSz;
5416 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5417 pAddTsReqParams->tspec.maxMsduSz;
5418 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5419 pAddTsReqParams->tspec.minSvcInterval;
5420 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5421 pAddTsReqParams->tspec.maxSvcInterval;
5422 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5423 pAddTsReqParams->tspec.inactInterval;
5424 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5425 pAddTsReqParams->tspec.suspendInterval;
5426 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5427 pAddTsReqParams->tspec.svcStartTime;
5428 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5429 pAddTsReqParams->tspec.minDataRate;
5430 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5431 pAddTsReqParams->tspec.meanDataRate;
5432 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5433 pAddTsReqParams->tspec.peakDataRate;
5434 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5435 pAddTsReqParams->tspec.maxBurstSz;
5436 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5437 pAddTsReqParams->tspec.delayBound;
5438 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5439 pAddTsReqParams->tspec.minPhyRate;
5440 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5441 pAddTsReqParams->tspec.surplusBw;
5442 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5443 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005444 /* TODO: tAddTsParams doesn't have the following fields */
5445#if 0
5446 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5447 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5448 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5449 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5450#endif
5451 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5452
5453 pWdaParams->pWdaContext = pWDA;
5454 /* Store ADD TS pointer, as this will be used for response */
5455 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 /* store Params pass it to WDI */
5457 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005458 status = WDI_AddTSReq(wdiAddTSReqParam,
5459 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 if(IS_WDI_STATUS_FAILURE(status))
5461 {
5462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5463 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5465 vos_mem_free(pWdaParams);
5466 pAddTsReqParams->status = eSIR_FAILURE ;
5467 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005470}
5471
Jeff Johnson295189b2012-06-20 16:38:30 -07005472/*
5473 * FUNCTION: WDA_DelTSReqCallback
5474 * send DEL TS RSP back to PE
5475 */
5476void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5477{
5478 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005480 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005481 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5482 vos_mem_free(pWdaParams->wdaMsgParam) ;
5483 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005484 /*
5485 * No respone required for WDA_DEL_TS_REQ so just free the request
5486 * param here
5487 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 return ;
5489}
5490
Jeff Johnson295189b2012-06-20 16:38:30 -07005491/*
5492 * FUNCTION: WDA_ProcessDelTSReq
5493 * Request to WDI to Update the DELTS REQ params.
5494 */
5495VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5496 tDelTsParams *pDelTSReqParams)
5497{
5498 WDI_Status status = WDI_STATUS_SUCCESS ;
5499 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5500 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5501 sizeof(WDI_DelTSReqParamsType)) ;
5502 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005504 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 if(NULL == wdiDelTSReqParam)
5506 {
5507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005508 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005509 VOS_ASSERT(0);
5510 return VOS_STATUS_E_NOMEM;
5511 }
5512 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5513 if(NULL == pWdaParams)
5514 {
5515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005516 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 VOS_ASSERT(0);
5518 vos_mem_free(wdiDelTSReqParam);
5519 return VOS_STATUS_E_NOMEM;
5520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5522 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5523 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5524 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5525 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005526 pWdaParams->pWdaContext = pWDA;
5527 /* Store DEL TS pointer, as this will be used for response */
5528 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005529 /* store Params pass it to WDI */
5530 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005531 status = WDI_DelTSReq(wdiDelTSReqParam,
5532 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 if(IS_WDI_STATUS_FAILURE(status))
5534 {
5535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5536 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5538 vos_mem_free(pWdaParams->wdaMsgParam);
5539 vos_mem_free(pWdaParams);
5540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005542}
Jeff Johnson295189b2012-06-20 16:38:30 -07005543/*
5544 * FUNCTION: WDA_UpdateBeaconParamsCallback
5545 * Free the memory. No need to send any response to PE in this case
5546 */
5547void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5548{
5549 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005551 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 if(NULL == pWdaParams)
5553 {
5554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005555 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005556 VOS_ASSERT(0) ;
5557 return ;
5558 }
5559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5560 vos_mem_free(pWdaParams->wdaMsgParam) ;
5561 vos_mem_free(pWdaParams);
5562 /*
5563 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5564 * param here
5565 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 return ;
5567}
Jeff Johnson295189b2012-06-20 16:38:30 -07005568/*
5569 * FUNCTION: WDA_ProcessUpdateBeaconParams
5570 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5571 */
5572VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5573 tUpdateBeaconParams *pUpdateBeaconParams)
5574{
5575 WDI_Status status = WDI_STATUS_SUCCESS ;
5576 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5577 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5578 sizeof(WDI_UpdateBeaconParamsType)) ;
5579 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005581 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 if(NULL == wdiUpdateBeaconParams)
5583 {
5584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005586 VOS_ASSERT(0);
5587 return VOS_STATUS_E_NOMEM;
5588 }
5589 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5590 if(NULL == pWdaParams)
5591 {
5592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005593 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005594 VOS_ASSERT(0);
5595 vos_mem_free(wdiUpdateBeaconParams);
5596 return VOS_STATUS_E_NOMEM;
5597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5599 pUpdateBeaconParams->bssIdx;
5600 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5601 pUpdateBeaconParams->fShortPreamble;
5602 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5603 pUpdateBeaconParams->fShortSlotTime;
5604 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5605 pUpdateBeaconParams->beaconInterval;
5606 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5607 pUpdateBeaconParams->llaCoexist;
5608 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5609 pUpdateBeaconParams->llbCoexist;
5610 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5611 pUpdateBeaconParams->llgCoexist;
5612 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5613 pUpdateBeaconParams->ht20MhzCoexist;
5614 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5615 pUpdateBeaconParams->llnNonGFCoexist;
5616 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5617 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5618 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5619 pUpdateBeaconParams->fRIFSMode;
5620 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5621 pUpdateBeaconParams->paramChangeBitmap;
5622 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5623
5624 pWdaParams->pWdaContext = pWDA;
5625 /* Store UpdateBeacon Req pointer, as this will be used for response */
5626 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 /* store Params pass it to WDI */
5628 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005629 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5630 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5631 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 if(IS_WDI_STATUS_FAILURE(status))
5633 {
5634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5635 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5636 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5637 vos_mem_free(pWdaParams->wdaMsgParam);
5638 vos_mem_free(pWdaParams);
5639 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005641}
Jeff Johnson295189b2012-06-20 16:38:30 -07005642#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005643/*
5644 * FUNCTION: WDA_TSMStatsReqCallback
5645 * send TSM Stats RSP back to PE
5646 */
5647void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5648{
5649 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5650 tWDA_CbContext *pWDA = NULL;
5651 tTSMStats *pTsmRspParams = NULL;
5652
5653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005654 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 if(NULL == pWdaParams)
5656 {
5657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 VOS_ASSERT(0) ;
5660 return ;
5661 }
5662 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5663 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if( NULL == pTsmRspParams )
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005667 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005668 VOS_ASSERT( 0 );
5669 return ;
5670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5672 vos_mem_free(pWdaParams);
5673
5674 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5675 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5676 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5677 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5678 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5679 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5680 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5681 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5682 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5683 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005685 return ;
5686}
5687
5688
Jeff Johnson295189b2012-06-20 16:38:30 -07005689/*
5690 * FUNCTION: WDA_ProcessTsmStatsReq
5691 * Request to WDI to get the TSM Stats params.
5692 */
5693VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5694 tTSMStats *pTsmStats)
5695{
5696 WDI_Status status = WDI_STATUS_SUCCESS ;
5697 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5698 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
5702 {
5703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005704 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005705 VOS_ASSERT(0);
5706 return VOS_STATUS_E_FAILURE;
5707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005708 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5709 sizeof(WDI_TSMStatsReqParamsType));
5710 if(NULL == wdiTSMReqParam)
5711 {
5712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005713 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 VOS_ASSERT(0);
5715 return VOS_STATUS_E_NOMEM;
5716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5718 if(NULL == pWdaParams)
5719 {
5720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005722 VOS_ASSERT(0);
5723 vos_mem_free(wdiTSMReqParam);
5724 return VOS_STATUS_E_NOMEM;
5725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5727 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5728 pTsmStats->bssId,
5729 sizeof(wpt_macAddr));
5730 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5731
5732 pWdaParams->pWdaContext = pWDA;
5733 /* Store TSM Stats pointer, as this will be used for response */
5734 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 /* store Params pass it to WDI */
5736 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005737 status = WDI_TSMStatsReq(wdiTSMReqParam,
5738 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 if(IS_WDI_STATUS_FAILURE(status))
5740 {
5741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5742 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5744 vos_mem_free(pWdaParams) ;
5745 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 return CONVERT_WDI2VOS_STATUS(status) ;
5747}
5748#endif
5749/*
5750 * FUNCTION: WDA_SendBeaconParamsCallback
5751 * No need to send any response to PE in this case
5752 */
5753void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5754{
5755
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 return ;
5759}
Jeff Johnson295189b2012-06-20 16:38:30 -07005760/*
5761 * FUNCTION: WDA_ProcessSendBeacon
5762 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5763 * start beacon trasmission
5764 */
5765VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5766 tSendbeaconParams *pSendbeaconParams)
5767{
5768 WDI_Status status = WDI_STATUS_SUCCESS ;
5769 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005771 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5773 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5774 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5775 pSendbeaconParams->beaconLength;
5776#ifdef WLAN_SOFTAP_FEATURE
5777 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5778 pSendbeaconParams->timIeOffset;
5779#endif
5780#ifdef WLAN_FEATURE_P2P
5781 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5782 pSendbeaconParams->p2pIeOffset;
5783#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 /* Copy the beacon template to local buffer */
5785 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5786 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5787 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5788
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5790 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 if(IS_WDI_STATUS_FAILURE(status))
5792 {
5793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5794 "Failure in SEND BEACON REQ Params WDI API" );
5795 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 vos_mem_free(pSendbeaconParams);
5797 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798}
Jeff Johnson295189b2012-06-20 16:38:30 -07005799/*
5800 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5801 * No need to send any response to PE in this case
5802 */
5803void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5804{
Jeff Johnson295189b2012-06-20 16:38:30 -07005805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005806 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005807 return ;
5808}
5809
Jeff Johnson295189b2012-06-20 16:38:30 -07005810/*
5811 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5812 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5813 * send probe response
5814 */
5815VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5816 tSendProbeRespParams *pSendProbeRspParams)
5817{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005818 WDI_Status status = WDI_STATUS_SUCCESS;
5819 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5820 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005822 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005823
5824 if (!wdiSendProbeRspParam)
5825 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5826
Jeff Johnson295189b2012-06-20 16:38:30 -07005827 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005828 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005829 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005830 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 /* Copy the Probe Response template to local buffer */
5833 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005834 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005835 pSendProbeRspParams->pProbeRespTemplate,
5836 pSendProbeRspParams->probeRespTemplateLen);
5837 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005838 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5840 WDI_PROBE_REQ_BITMAP_IE_LEN);
5841
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005842 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005843
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005844 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 if(IS_WDI_STATUS_FAILURE(status))
5847 {
5848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5849 "Failure in SEND Probe RSP Params WDI API" );
5850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005852 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005854}
Jeff Johnson295189b2012-06-20 16:38:30 -07005855#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5856/*
5857 * FUNCTION: WDA_SetMaxTxPowerCallBack
5858 * send the response to PE with power value received from WDI
5859 */
5860void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5861 void* pUserData)
5862{
5863 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5864 tWDA_CbContext *pWDA = NULL;
5865 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5866
5867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005868 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005869 if(NULL == pWdaParams)
5870 {
5871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005872 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005873 VOS_ASSERT(0) ;
5874 return ;
5875 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005876 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5877 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 if( NULL == pMaxTxPowerParams )
5879 {
5880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005881 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005882 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005883 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5884 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005885 return ;
5886 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005887
Jeff Johnson295189b2012-06-20 16:38:30 -07005888
5889 /*need to free memory for the pointers used in the
5890 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005891 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5892 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005894
Jeff Johnson295189b2012-06-20 16:38:30 -07005895
5896 /* send response to UMAC*/
5897 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5898
5899 return;
5900}
Jeff Johnson295189b2012-06-20 16:38:30 -07005901/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005902 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 * Request to WDI to send set Max Tx Power Request
5904 */
5905 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5906 tMaxTxPowerParams *MaxTxPowerParams)
5907{
5908 WDI_Status status = WDI_STATUS_SUCCESS;
5909 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5910 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005911
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005913 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005914
Jeff Johnson295189b2012-06-20 16:38:30 -07005915 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5916 sizeof(WDI_SetMaxTxPowerParamsType));
5917 if(NULL == wdiSetMaxTxPowerParams)
5918 {
5919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 VOS_ASSERT(0);
5922 return VOS_STATUS_E_NOMEM;
5923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005924 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5925 if(NULL == pWdaParams)
5926 {
5927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005928 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 vos_mem_free(wdiSetMaxTxPowerParams);
5930 VOS_ASSERT(0);
5931 return VOS_STATUS_E_NOMEM;
5932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005933 /* Copy.Max.Tx.Power Params to WDI structure */
5934 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5935 MaxTxPowerParams->bssId,
5936 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005937 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5938 MaxTxPowerParams->selfStaMacAddr,
5939 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005940 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5941 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 pWdaParams->pWdaContext = pWDA;
5944 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 /* store Params pass it to WDI */
5946 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5948 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 if(IS_WDI_STATUS_FAILURE(status))
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5952 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5954 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005955 /* send response to UMAC*/
5956 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 }
5958 return CONVERT_WDI2VOS_STATUS(status);
5959
5960}
Jeff Johnson295189b2012-06-20 16:38:30 -07005961#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005962#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005963/*
5964 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5965 * Free the memory. No need to send any response to PE in this case
5966 */
5967void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5968{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5970
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005972 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005973
5974 if(NULL == pWdaParams)
5975 {
5976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005977 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005978 VOS_ASSERT(0) ;
5979 return ;
5980 }
5981
5982 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5983 vos_mem_free(pWdaParams->wdaMsgParam) ;
5984 vos_mem_free(pWdaParams);
5985
Jeff Johnson295189b2012-06-20 16:38:30 -07005986 /*
5987 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
5988 * so just free the request param here
5989 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005990 return ;
5991}
5992
Jeff Johnson295189b2012-06-20 16:38:30 -07005993/*
5994 * FUNCTION: WDA_ProcessSetP2PGONOAReq
5995 * Request to WDI to set the P2P Group Owner Notice of Absence Req
5996 */
5997VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
5998 tP2pPsParams *pP2pPsConfigParams)
5999{
6000 WDI_Status status = WDI_STATUS_SUCCESS ;
6001 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6002 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6003 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006004 tWDA_ReqParams *pWdaParams = NULL;
6005
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006007 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 if(NULL == wdiSetP2PGONOAReqParam)
6009 {
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_ASSERT(0);
6013 return VOS_STATUS_E_NOMEM;
6014 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006015
6016 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6017 if(NULL == pWdaParams)
6018 {
6019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006020 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006021 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006022 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006023 VOS_ASSERT(0);
6024 return VOS_STATUS_E_NOMEM;
6025 }
6026
Jeff Johnson295189b2012-06-20 16:38:30 -07006027 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6028 pP2pPsConfigParams->opp_ps;
6029 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6030 pP2pPsConfigParams->ctWindow;
6031 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6032 pP2pPsConfigParams->count;
6033 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6034 pP2pPsConfigParams->duration;
6035 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6036 pP2pPsConfigParams->interval;
6037 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6038 pP2pPsConfigParams->single_noa_duration;
6039 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6040 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006041
Jeff Johnson295189b2012-06-20 16:38:30 -07006042 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6043 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006044 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6045
Jeff Johnson295189b2012-06-20 16:38:30 -07006046 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006047 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6048 pWdaParams->pWdaContext = pWDA;
6049
Jeff Johnson295189b2012-06-20 16:38:30 -07006050 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006051 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6052
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 if(IS_WDI_STATUS_FAILURE(status))
6054 {
6055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6056 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006057 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6058 vos_mem_free(pWdaParams->wdaMsgParam);
6059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 return CONVERT_WDI2VOS_STATUS(status);
6062
Jeff Johnson295189b2012-06-20 16:38:30 -07006063}
6064#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006065#ifdef WLAN_FEATURE_VOWIFI_11R
6066/*
6067 * FUNCTION: WDA_AggrAddTSReqCallback
6068 * send ADD AGGREGATED TS RSP back to PE
6069 */
6070void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6071{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006072 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6073 tWDA_CbContext *pWDA;
6074 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006075 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006077 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006078 if(NULL == pWdaParams)
6079 {
6080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006081 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006082 VOS_ASSERT(0) ;
6083 return ;
6084 }
6085
6086 pWDA = pWdaParams->pWdaContext;
6087 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006088
6089 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6090 {
6091 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006093 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006094
6095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6096 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006097 return ;
6098}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006099/*
6100 * FUNCTION: WDA_ProcessAddTSReq
6101 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6102 */
6103VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6104 tAggrAddTsParams *pAggrAddTsReqParams)
6105{
6106 WDI_Status status = WDI_STATUS_SUCCESS ;
6107 int i;
6108 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006109 tWDA_ReqParams *pWdaParams = NULL;
6110
6111
Jeff Johnson295189b2012-06-20 16:38:30 -07006112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006113 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006114 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6115 sizeof(WDI_AggrAddTSReqParamsType)) ;
6116 if(NULL == wdiAggrAddTSReqParam)
6117 {
6118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006119 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 VOS_ASSERT(0);
6121 return VOS_STATUS_E_NOMEM;
6122 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006123
6124
6125 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6126 if(NULL == pWdaParams)
6127 {
6128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006129 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006130 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006131 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006132 VOS_ASSERT(0);
6133 return VOS_STATUS_E_NOMEM;
6134 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006135 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6136 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6137 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6139 {
6140 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6141 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6142 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6144 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6145 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6146 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6147 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6148 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6149 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6150 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6151 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6152 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6153 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6154 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6155 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6156 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6157 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6158 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6160 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6162 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6163 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6164 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6165 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6166 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6168 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6170 pAggrAddTsReqParams->tspec[i].inactInterval;
6171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6172 pAggrAddTsReqParams->tspec[i].suspendInterval;
6173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6174 pAggrAddTsReqParams->tspec[i].svcStartTime;
6175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6176 pAggrAddTsReqParams->tspec[i].minDataRate;
6177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6178 pAggrAddTsReqParams->tspec[i].meanDataRate;
6179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6180 pAggrAddTsReqParams->tspec[i].peakDataRate;
6181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6182 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6184 pAggrAddTsReqParams->tspec[i].delayBound;
6185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6186 pAggrAddTsReqParams->tspec[i].minPhyRate;
6187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6188 pAggrAddTsReqParams->tspec[i].surplusBw;
6189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6190 pAggrAddTsReqParams->tspec[i].mediumTime;
6191 }
6192
6193 /* TODO: tAggrAddTsParams doesn't have the following fields */
6194#if 0
6195 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6196 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6197 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6198 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6199#endif
6200 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6201
6202 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006203 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006204 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006205 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6206
6207 pWdaParams->pWdaContext = pWDA;
6208
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006210 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6211
Jeff Johnson295189b2012-06-20 16:38:30 -07006212 if(IS_WDI_STATUS_FAILURE(status))
6213 {
6214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6215 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006216 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6217 vos_mem_free(pWdaParams);
6218
6219 /* send the failure response back to PE*/
6220 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6221 {
6222 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6223 }
6224
6225 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6226 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 return CONVERT_WDI2VOS_STATUS(status) ;
6229}
6230#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006231/*
6232 * FUNCTION: WDA_EnterImpsReqCallback
6233 * send Enter IMPS RSP back to PE
6234 */
6235void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6236{
6237 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006239 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006240 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 return ;
6242}
Jeff Johnson295189b2012-06-20 16:38:30 -07006243/*
6244 * FUNCTION: WDA_ProcessEnterImpsReq
6245 * Request to WDI to Enter IMPS power state.
6246 */
6247VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6248{
6249 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006251 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006252 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 if(IS_WDI_STATUS_FAILURE(status))
6254 {
6255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6256 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006257 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 return CONVERT_WDI2VOS_STATUS(status) ;
6260}
Jeff Johnson295189b2012-06-20 16:38:30 -07006261/*
6262 * FUNCTION: WDA_ExitImpsReqCallback
6263 * send Exit IMPS RSP back to PE
6264 */
6265void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6266{
6267 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006269 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 return ;
6272}
Jeff Johnson295189b2012-06-20 16:38:30 -07006273/*
6274 * FUNCTION: WDA_ProcessExitImpsReq
6275 * Request to WDI to Exit IMPS power state.
6276 */
6277VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6278{
6279 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006282 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 if(IS_WDI_STATUS_FAILURE(status))
6284 {
6285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6286 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006287 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 return CONVERT_WDI2VOS_STATUS(status) ;
6290}
Jeff Johnson295189b2012-06-20 16:38:30 -07006291/*
6292 * FUNCTION: WDA_EnterBmpsReqCallback
6293 * send Enter BMPS RSP back to PE
6294 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006295void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006296{
6297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6298 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006299 tEnterBmpsParams *pEnterBmpsRspParams;
6300
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006302 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006303 if(NULL == pWdaParams)
6304 {
6305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006306 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 VOS_ASSERT(0) ;
6308 return ;
6309 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006310
6311 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6312 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6313
6314 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6315 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6316
6317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006319 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6320
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 return ;
6322}
Jeff Johnson295189b2012-06-20 16:38:30 -07006323/*
6324 * FUNCTION: WDA_ProcessEnterBmpsReq
6325 * Request to WDI to Enter BMPS power state.
6326 */
6327VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6328 tEnterBmpsParams *pEnterBmpsReqParams)
6329{
6330 WDI_Status status = WDI_STATUS_SUCCESS;
6331 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6332 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006334 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6336 {
6337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006338 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006339 VOS_ASSERT(0);
6340 return VOS_STATUS_E_FAILURE;
6341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6343 if (NULL == wdiEnterBmpsReqParams)
6344 {
6345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006346 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006348 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6349 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006350 return VOS_STATUS_E_NOMEM;
6351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6353 if (NULL == pWdaParams)
6354 {
6355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 VOS_ASSERT(0);
6358 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006359 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6360 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 return VOS_STATUS_E_NOMEM;
6362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006363 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6364 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6365 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6366 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 // For CCX and 11R Roaming
6368 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6369 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6370 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6371 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006372
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 /* Store param pointer as passed in by caller */
6374 /* store Params pass it to WDI */
6375 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006376 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6379 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 if (IS_WDI_STATUS_FAILURE(status))
6381 {
6382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6383 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006385 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006386 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006387 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 return CONVERT_WDI2VOS_STATUS(status);
6390}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006391
6392
6393static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6394 WDI_Status wdiStatus,
6395 tExitBmpsParams *pExitBmpsReqParams)
6396{
6397 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6398
6399 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6400}
6401
6402
Jeff Johnson295189b2012-06-20 16:38:30 -07006403/*
6404 * FUNCTION: WDA_ExitBmpsReqCallback
6405 * send Exit BMPS RSP back to PE
6406 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006407void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006408{
6409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6410 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006411 tExitBmpsParams *pExitBmpsRspParams;
6412
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 if(NULL == pWdaParams)
6416 {
6417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006419 VOS_ASSERT(0) ;
6420 return ;
6421 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006422
6423 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6424 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6425
6426 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6427 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006428
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6430 vos_mem_free(pWdaParams) ;
6431
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006432 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006433 return ;
6434}
Jeff Johnson295189b2012-06-20 16:38:30 -07006435/*
6436 * FUNCTION: WDA_ProcessExitBmpsReq
6437 * Request to WDI to Exit BMPS power state.
6438 */
6439VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6440 tExitBmpsParams *pExitBmpsReqParams)
6441{
6442 WDI_Status status = WDI_STATUS_SUCCESS ;
6443 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6444 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6445 sizeof(WDI_ExitBmpsReqParamsType)) ;
6446 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006449 if(NULL == wdiExitBmpsReqParams)
6450 {
6451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006453 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006454 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 return VOS_STATUS_E_NOMEM;
6456 }
6457 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6458 if(NULL == pWdaParams)
6459 {
6460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006461 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006462 VOS_ASSERT(0);
6463 vos_mem_free(wdiExitBmpsReqParams);
6464 return VOS_STATUS_E_NOMEM;
6465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006466 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006467
6468 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6469
Jeff Johnson295189b2012-06-20 16:38:30 -07006470 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6471
6472 /* Store param pointer as passed in by caller */
6473 /* store Params pass it to WDI */
6474 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6475 pWdaParams->pWdaContext = pWDA;
6476 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006477 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6478 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 if(IS_WDI_STATUS_FAILURE(status))
6480 {
6481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6482 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6484 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006485 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 return CONVERT_WDI2VOS_STATUS(status) ;
6488}
Jeff Johnson295189b2012-06-20 16:38:30 -07006489/*
6490 * FUNCTION: WDA_EnterUapsdReqCallback
6491 * send Enter UAPSD RSP back to PE
6492 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006493void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006494{
6495 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6496 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006497 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006499 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 if(NULL == pWdaParams)
6501 {
6502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006503 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 VOS_ASSERT(0) ;
6505 return ;
6506 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006507
6508 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6509 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6510
6511 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6512 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6513
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6515 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006516 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006517 return ;
6518}
Jeff Johnson295189b2012-06-20 16:38:30 -07006519/*
6520 * FUNCTION: WDA_ProcessEnterUapsdReq
6521 * Request to WDI to Enter UAPSD power state.
6522 */
6523VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6524 tUapsdParams *pEnterUapsdReqParams)
6525{
6526 WDI_Status status = WDI_STATUS_SUCCESS ;
6527 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6528 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6529 sizeof(WDI_EnterUapsdReqParamsType)) ;
6530 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006532 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006533 if(NULL == wdiEnterUapsdReqParams)
6534 {
6535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006537 VOS_ASSERT(0);
6538 return VOS_STATUS_E_NOMEM;
6539 }
6540 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6541 if(NULL == pWdaParams)
6542 {
6543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006544 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006545 VOS_ASSERT(0);
6546 vos_mem_free(wdiEnterUapsdReqParams);
6547 return VOS_STATUS_E_NOMEM;
6548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006549 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6550 pEnterUapsdReqParams->beDeliveryEnabled;
6551 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6552 pEnterUapsdReqParams->beTriggerEnabled;
6553 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6554 pEnterUapsdReqParams->bkDeliveryEnabled;
6555 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6556 pEnterUapsdReqParams->bkTriggerEnabled;
6557 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6558 pEnterUapsdReqParams->viDeliveryEnabled;
6559 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6560 pEnterUapsdReqParams->viTriggerEnabled;
6561 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6562 pEnterUapsdReqParams->voDeliveryEnabled;
6563 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6564 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006565 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006566
6567 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6568
Jeff Johnson295189b2012-06-20 16:38:30 -07006569 /* Store param pointer as passed in by caller */
6570 /* store Params pass it to WDI */
6571 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6572 pWdaParams->pWdaContext = pWDA;
6573 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6575 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 if(IS_WDI_STATUS_FAILURE(status))
6577 {
6578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6579 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6580 vos_mem_free(pWdaParams->wdaMsgParam) ;
6581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6582 vos_mem_free(pWdaParams) ;
6583 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 return CONVERT_WDI2VOS_STATUS(status) ;
6585}
Jeff Johnson295189b2012-06-20 16:38:30 -07006586/*
6587 * FUNCTION: WDA_ExitUapsdReqCallback
6588 * send Exit UAPSD RSP back to PE
6589 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006590void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006591{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006592
6593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6594 tWDA_CbContext *pWDA;
6595 tExitUapsdParams *pExitUapsdRspParams;
6596
Jeff Johnson295189b2012-06-20 16:38:30 -07006597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006598 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006599 if(NULL == pWdaParams)
6600 {
6601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006602 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006603 VOS_ASSERT(0);
6604 return;
6605 }
6606
6607 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6608 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6609
6610 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6611 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6612
6613 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6614 vos_mem_free(pWdaParams) ;
6615
6616 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006617 return ;
6618}
Jeff Johnson295189b2012-06-20 16:38:30 -07006619/*
6620 * FUNCTION: WDA_ProcessExitUapsdReq
6621 * Request to WDI to Exit UAPSD power state.
6622 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006623VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6624 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006625{
6626 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006627 tWDA_ReqParams *pWdaParams ;
6628 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6629 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6630 sizeof(WDI_ExitUapsdReqParamsType)) ;
6631
Jeff Johnson295189b2012-06-20 16:38:30 -07006632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006633 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006634
6635 if(NULL == wdiExitUapsdReqParams)
6636 {
6637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006638 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006639 VOS_ASSERT(0);
6640 return VOS_STATUS_E_NOMEM;
6641 }
6642 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6643 if(NULL == pWdaParams)
6644 {
6645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006646 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006647 VOS_ASSERT(0);
6648 vos_mem_free(wdiExitUapsdReqParams);
6649 return VOS_STATUS_E_NOMEM;
6650 }
6651
6652 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6653 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6654
6655 /* Store param pointer as passed in by caller */
6656 /* store Params pass it to WDI */
6657 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6658 pWdaParams->pWdaContext = pWDA;
6659 pWdaParams->wdaMsgParam = pExitUapsdParams;
6660
6661 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006662 if(IS_WDI_STATUS_FAILURE(status))
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6665 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006666 vos_mem_free(pWdaParams->wdaMsgParam) ;
6667 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6668 vos_mem_free(pWdaParams) ;
6669
Jeff Johnson295189b2012-06-20 16:38:30 -07006670 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 return CONVERT_WDI2VOS_STATUS(status) ;
6672}
6673
Jeff Johnson295189b2012-06-20 16:38:30 -07006674/*
6675 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6676 *
6677 */
6678void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6679{
6680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006682 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006683 if(NULL == pWdaParams)
6684 {
6685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006686 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006687 VOS_ASSERT(0) ;
6688 return ;
6689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 if( pWdaParams != NULL )
6691 {
6692 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6693 {
6694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6695 }
6696 if( pWdaParams->wdaMsgParam != NULL )
6697 {
6698 vos_mem_free(pWdaParams->wdaMsgParam) ;
6699 }
6700 vos_mem_free(pWdaParams) ;
6701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 return ;
6703}
Jeff Johnson295189b2012-06-20 16:38:30 -07006704/*
6705 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6706 * Request to WDI to set the power save params at start.
6707 */
6708VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6709 tSirPowerSaveCfg *pPowerSaveCfg)
6710{
6711 WDI_Status status = WDI_STATUS_SUCCESS ;
6712 tHalCfg *tlvStruct = NULL ;
6713 tANI_U8 *tlvStructStart = NULL ;
6714 v_PVOID_t *configParam;
6715 tANI_U32 configParamSize;
6716 tANI_U32 *configDataValue;
6717 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6718 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006720 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6722 {
6723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006724 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006725 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006726 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006727 return VOS_STATUS_E_FAILURE;
6728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6730 if (NULL == wdiPowerSaveCfg)
6731 {
6732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006735 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 return VOS_STATUS_E_NOMEM;
6737 }
6738 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6739 if(NULL == pWdaParams)
6740 {
6741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006742 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006743 VOS_ASSERT(0);
6744 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006745 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 return VOS_STATUS_E_NOMEM;
6747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6749 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006750 if(NULL == configParam)
6751 {
6752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006753 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006754 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 vos_mem_free(pWdaParams);
6756 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006757 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 return VOS_STATUS_E_NOMEM;
6759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 vos_mem_set(configParam, configParamSize, 0);
6761 wdiPowerSaveCfg->pConfigBuffer = configParam;
6762 tlvStruct = (tHalCfg *)configParam;
6763 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006764 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6765 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6766 tlvStruct->length = sizeof(tANI_U32);
6767 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6768 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6770 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006771 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6772 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6773 tlvStruct->length = sizeof(tANI_U32);
6774 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6775 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6777 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006778 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6779 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6780 tlvStruct->length = sizeof(tANI_U32);
6781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6782 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6784 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6786 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6787 tlvStruct->length = sizeof(tANI_U32);
6788 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6789 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6791 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006792 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6793 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6794 tlvStruct->length = sizeof(tANI_U32);
6795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6796 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6798 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6800 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6801 tlvStruct->length = sizeof(tANI_U32);
6802 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6803 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6805 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006806 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6807 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6808 tlvStruct->length = sizeof(tANI_U32);
6809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6810 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6812 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006813 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6814 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6815 tlvStruct->length = sizeof(tANI_U32);
6816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6817 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6818 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6819 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006820 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6821 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6822 tlvStruct->length = sizeof(tANI_U32);
6823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6824 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6826 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006827 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6828 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6829 tlvStruct->length = sizeof(tANI_U32);
6830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6831 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6833 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006834 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6835 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6836 tlvStruct->length = sizeof(tANI_U32);
6837 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6838 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 /* store Params pass it to WDI */
6844 pWdaParams->wdaMsgParam = configParam;
6845 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6846 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6848 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 if(IS_WDI_STATUS_FAILURE(status))
6850 {
6851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6852 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6853 vos_mem_free(pWdaParams->wdaMsgParam);
6854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6855 vos_mem_free(pWdaParams);
6856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 return CONVERT_WDI2VOS_STATUS(status);
6859}
Jeff Johnson295189b2012-06-20 16:38:30 -07006860/*
6861 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6862 *
6863 */
6864void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6865{
6866 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006868 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6870 vos_mem_free(pWdaParams);
6871
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 return ;
6873}
Jeff Johnson295189b2012-06-20 16:38:30 -07006874/*
6875 * FUNCTION: WDA_SetUapsdAcParamsReq
6876 * Request to WDI to set the UAPSD params for an ac (sta mode).
6877 */
6878VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6879 tUapsdInfo *pUapsdInfo)
6880{
6881 WDI_Status status = WDI_STATUS_SUCCESS;
6882 tWDA_CbContext *pWDA = NULL ;
6883 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6884 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6885 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6886 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006888 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006889 if(NULL == wdiUapsdParams)
6890 {
6891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 VOS_ASSERT(0);
6894 return VOS_STATUS_E_NOMEM;
6895 }
6896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6897 if(NULL == pWdaParams)
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 VOS_ASSERT(0);
6902 vos_mem_free(wdiUapsdParams);
6903 return VOS_STATUS_E_NOMEM;
6904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6906 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6907 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6908 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6909 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6910 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 pWdaParams->pWdaContext = pWDA;
6914 /* Store param pointer as passed in by caller */
6915 pWdaParams->wdaMsgParam = pUapsdInfo;
6916 /* store Params pass it to WDI */
6917 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6919 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6920 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 if(IS_WDI_STATUS_FAILURE(status))
6922 {
6923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6924 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6926 vos_mem_free(pWdaParams);
6927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6929 return VOS_STATUS_SUCCESS;
6930 else
6931 return VOS_STATUS_E_FAILURE;
6932
Jeff Johnson295189b2012-06-20 16:38:30 -07006933}
6934/*
6935 * FUNCTION: WDA_ClearUapsdAcParamsReq
6936 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6937 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6938 * and again enter the UPASD with the modified params. Hence the disable
6939 * function was kept empty.
6940 *
6941 */
6942VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6943{
6944 /* do nothing */
6945 return VOS_STATUS_SUCCESS;
6946}
Jeff Johnson295189b2012-06-20 16:38:30 -07006947/*
6948 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6949 *
6950 */
6951void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6952{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006953 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6954
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006956 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006957
6958 if(NULL == pWdaParams)
6959 {
6960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006961 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006962 VOS_ASSERT(0) ;
6963 return ;
6964 }
6965
6966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6967 vos_mem_free(pWdaParams->wdaMsgParam);
6968 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006969
Jeff Johnson295189b2012-06-20 16:38:30 -07006970 //print a msg, nothing else to do
6971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6972 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006973 return ;
6974}
Jeff Johnson295189b2012-06-20 16:38:30 -07006975/*
6976 * FUNCTION: WDA_UpdateUapsdParamsReq
6977 * Request to WDI to update UAPSD params (in softAP mode) for a station.
6978 */
6979VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
6980 tUpdateUapsdParams* pUpdateUapsdInfo)
6981{
6982 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07006983 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006984 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
6985 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
6986 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006987 tWDA_ReqParams *pWdaParams = NULL;
6988
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006990 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006991 if(NULL == wdiUpdateUapsdParams)
6992 {
6993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006995 VOS_ASSERT(0);
6996 return VOS_STATUS_E_NOMEM;
6997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006998 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
6999 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7000 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007001
7002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7003 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007004 {
7005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007007 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007008 vos_mem_free(pUpdateUapsdInfo);
7009 vos_mem_free(wdiUpdateUapsdParams);
7010 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007013 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007015 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7016 pWdaParams->pWdaContext = pWDA;
7017
Jeff Johnson43971f52012-07-17 12:26:56 -07007018 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007019 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7020 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021
Jeff Johnson43971f52012-07-17 12:26:56 -07007022 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007023 {
7024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7025 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007026 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7027 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7028 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007029 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007031 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007032}
Jeff Johnson295189b2012-06-20 16:38:30 -07007033/*
7034 * FUNCTION: WDA_ConfigureRxpFilterCallback
7035 *
7036 */
7037void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7038{
7039 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007041 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007042 if(WDI_STATUS_SUCCESS != wdiStatus)
7043 {
7044 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007045 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 if(NULL == pWdaParams)
7048 {
7049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 VOS_ASSERT(0) ;
7052 return ;
7053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7055 vos_mem_free(pWdaParams->wdaMsgParam);
7056 vos_mem_free(pWdaParams);
7057 return ;
7058}
Jeff Johnson295189b2012-06-20 16:38:30 -07007059/*
7060 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7061 *
7062 */
7063VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7064 tSirWlanSetRxpFilters *pWlanSuspendParam)
7065{
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007067 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7069 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7070 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7071 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007073 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 if(NULL == wdiRxpFilterParams)
7075 {
7076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 VOS_ASSERT(0);
7079 vos_mem_free(pWlanSuspendParam);
7080 return VOS_STATUS_E_NOMEM;
7081 }
7082 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7083 if(NULL == pWdaParams)
7084 {
7085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007087 VOS_ASSERT(0);
7088 vos_mem_free(wdiRxpFilterParams);
7089 vos_mem_free(pWlanSuspendParam);
7090 return VOS_STATUS_E_NOMEM;
7091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7093 pWlanSuspendParam->setMcstBcstFilter;
7094 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7095 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7096
7097 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 pWdaParams->pWdaContext = pWDA;
7099 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7100 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007101 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7103 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007104 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 {
7106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7107 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007108 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7110 vos_mem_free(pWdaParams->wdaMsgParam);
7111 vos_mem_free(pWdaParams);
7112 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007113 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007114}
Jeff Johnson295189b2012-06-20 16:38:30 -07007115/*
7116 * FUNCTION: WDA_WdiIndicationCallback
7117 *
7118 */
7119void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7120 void* pUserData)
7121{
7122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007123 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007124}
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
7126 * FUNCTION: WDA_ProcessWlanSuspendInd
7127 *
7128 */
7129VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7130 tSirWlanSuspendParam *pWlanSuspendParam)
7131{
7132 WDI_Status wdiStatus;
7133 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007135 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7137 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7138 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7139 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7142 if(WDI_STATUS_PENDING == wdiStatus)
7143 {
7144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 }
7147 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7148 {
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 vos_mem_free(pWlanSuspendParam);
7153 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7154}
7155
Jeff Johnson295189b2012-06-20 16:38:30 -07007156/*
7157 * FUNCTION: WDA_ProcessWlanResumeCallback
7158 *
7159 */
7160void WDA_ProcessWlanResumeCallback(
7161 WDI_SuspendResumeRspParamsType *resumeRspParams,
7162 void* pUserData)
7163{
7164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 if(NULL == pWdaParams)
7168 {
7169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007170 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007171 VOS_ASSERT(0) ;
7172 return ;
7173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007174 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7175 {
7176 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007177 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7180 vos_mem_free(pWdaParams->wdaMsgParam);
7181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 return ;
7183}
Jeff Johnson295189b2012-06-20 16:38:30 -07007184/*
7185 * FUNCTION: WDA_ProcessWlanResumeReq
7186 *
7187 */
7188VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7189 tSirWlanResumeParam *pWlanResumeParam)
7190{
7191 WDI_Status wdiStatus;
7192 WDI_ResumeParamsType *wdiResumeParams =
7193 (WDI_ResumeParamsType *)vos_mem_malloc(
7194 sizeof(WDI_ResumeParamsType) ) ;
7195 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007197 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 if(NULL == wdiResumeParams)
7199 {
7200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007202 VOS_ASSERT(0);
7203 return VOS_STATUS_E_NOMEM;
7204 }
7205 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7206 if(NULL == pWdaParams)
7207 {
7208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007209 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 VOS_ASSERT(0);
7211 vos_mem_free(wdiResumeParams);
7212 return VOS_STATUS_E_NOMEM;
7213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007214 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7215 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 wdiResumeParams->wdiReqStatusCB = NULL;
7218 pWdaParams->wdaMsgParam = pWlanResumeParam;
7219 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7220 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7222 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7223 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7227 "Failure in Host Resume REQ WDI API, free all the memory " );
7228 VOS_ASSERT(0);
7229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7230 vos_mem_free(pWdaParams->wdaMsgParam);
7231 vos_mem_free(pWdaParams);
7232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7234}
7235
Jeff Johnson295189b2012-06-20 16:38:30 -07007236/*
7237 * FUNCTION: WDA_SetBeaconFilterReqCallback
7238 *
7239 */
7240void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7241{
7242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007244 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007245 if(NULL == pWdaParams)
7246 {
7247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007248 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 VOS_ASSERT(0) ;
7250 return ;
7251 }
7252
7253 vos_mem_free(pWdaParams->wdaMsgParam) ;
7254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7255 vos_mem_free(pWdaParams) ;
7256 /*
7257 * No respone required for SetBeaconFilter req so just free the request
7258 * param here
7259 */
7260
Jeff Johnson295189b2012-06-20 16:38:30 -07007261 return ;
7262}
Jeff Johnson295189b2012-06-20 16:38:30 -07007263/*
7264 * FUNCTION: WDA_SetBeaconFilterReq
7265 * Request to WDI to send the beacon filtering related information.
7266 */
7267VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7268 tBeaconFilterMsg* pBeaconFilterInfo)
7269{
7270 WDI_Status status = WDI_STATUS_SUCCESS;
7271 tANI_U8 *dstPtr, *srcPtr;
7272 tANI_U8 filterLength;
7273 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7274 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7275 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7276 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007279 if(NULL == wdiBeaconFilterInfo)
7280 {
7281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007282 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007283 VOS_ASSERT(0);
7284 return VOS_STATUS_E_NOMEM;
7285 }
7286 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7287 if(NULL == pWdaParams)
7288 {
7289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007291 VOS_ASSERT(0);
7292 vos_mem_free(wdiBeaconFilterInfo);
7293 return VOS_STATUS_E_NOMEM;
7294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007295 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7296 pBeaconFilterInfo->beaconInterval;
7297 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7298 pBeaconFilterInfo->capabilityInfo;
7299 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7300 pBeaconFilterInfo->capabilityMask;
7301 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007302
7303 //Fill the BssIdx
7304 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7305
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 //Fill structure with info contained in the beaconFilterTable
7307 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7308 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7309 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7310 if(WDI_BEACON_FILTER_LEN < filterLength)
7311 {
7312 filterLength = WDI_BEACON_FILTER_LEN;
7313 }
7314 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7316 /* Store param pointer as passed in by caller */
7317 /* store Params pass it to WDI */
7318 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7319 pWdaParams->pWdaContext = pWDA;
7320 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7321
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7323 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007324 if(IS_WDI_STATUS_FAILURE(status))
7325 {
7326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7327 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7328 vos_mem_free(pWdaParams->wdaMsgParam) ;
7329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7330 vos_mem_free(pWdaParams) ;
7331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 return CONVERT_WDI2VOS_STATUS(status) ;
7333}
Jeff Johnson295189b2012-06-20 16:38:30 -07007334/*
7335 * FUNCTION: WDA_RemBeaconFilterReqCallback
7336 *
7337 */
7338void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7339{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007340 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7341
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007343 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007344
7345 if(NULL == pWdaParams)
7346 {
7347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007348 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007349 VOS_ASSERT(0) ;
7350 return ;
7351 }
7352
7353 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7354 vos_mem_free(pWdaParams->wdaMsgParam);
7355 vos_mem_free(pWdaParams);
7356
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 //print a msg, nothing else to do
7358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7359 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007360 return ;
7361}
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 // TODO: PE does not have this feature for now implemented,
7363 // but the support for removing beacon filter exists between
7364 // HAL and FW. This function can be called whenever PE defines
7365 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007366/*
7367 * FUNCTION: WDA_RemBeaconFilterReq
7368 * Request to WDI to send the removal of beacon filtering related information.
7369 */
7370VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7371 tRemBeaconFilterMsg* pBeaconFilterInfo)
7372{
7373 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007374 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007375 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7376 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7377 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007378 tWDA_ReqParams *pWdaParams ;
7379
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007381 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 if(NULL == wdiBeaconFilterInfo)
7383 {
7384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 VOS_ASSERT(0);
7387 return VOS_STATUS_E_NOMEM;
7388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7390 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 //Fill structure with info contained in the ucRemIeId
7392 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7393 pBeaconFilterInfo->ucRemIeId,
7394 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7395 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007396
7397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7398 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 {
7400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007403 vos_mem_free(wdiBeaconFilterInfo);
7404 vos_mem_free(pBeaconFilterInfo);
7405 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 }
7407
7408 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007409 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007410 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007411 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7412
7413 pWdaParams->pWdaContext = pWDA;
7414
Jeff Johnson43971f52012-07-17 12:26:56 -07007415 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007416 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007417 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 {
7419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7420 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007421 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7423 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007424 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007426 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007427}
Jeff Johnson295189b2012-06-20 16:38:30 -07007428/*
7429 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7430 *
7431 */
7432void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7433{
7434 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007436 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 if(NULL == pWdaParams)
7438 {
7439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007440 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 VOS_ASSERT(0) ;
7442 return ;
7443 }
7444
7445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7446 vos_mem_free(pWdaParams) ;
7447
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 return ;
7449}
Jeff Johnson295189b2012-06-20 16:38:30 -07007450/*
7451 * FUNCTION: WDA_SetRSSIThresholdsReq
7452 * Request to WDI to set the RSSI thresholds (sta mode).
7453 */
7454VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7455{
7456 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007457 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 tWDA_CbContext *pWDA = NULL ;
7459 v_PVOID_t pVosContext = NULL;
7460 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7461 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7462 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7463 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007465 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007466 if(NULL == wdiRSSIThresholdsInfo)
7467 {
7468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007469 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007470 VOS_ASSERT(0);
7471 return VOS_STATUS_E_NOMEM;
7472 }
7473 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7474 if(NULL == pWdaParams)
7475 {
7476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007478 VOS_ASSERT(0);
7479 vos_mem_free(wdiRSSIThresholdsInfo);
7480 return VOS_STATUS_E_NOMEM;
7481 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007482 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7484 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7485 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007486 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7487 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7488 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007489 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7490 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7491 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7494 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7495
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 /* Store param pointer as passed in by caller */
7497 /* store Params pass it to WDI */
7498 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7499 pWdaParams->pWdaContext = pWDA;
7500 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007501 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007503 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 {
7505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7506 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007507 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7509 vos_mem_free(pWdaParams) ;
7510 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007511 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007512
7513}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007514/*
7515 * FUNCTION: WDA_HostOffloadReqCallback
7516 *
7517 */
7518void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7519{
7520 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7521
7522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007523 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007524 if(NULL == pWdaParams)
7525 {
7526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007527 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 VOS_ASSERT(0) ;
7529 return ;
7530 }
7531
7532 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7533 vos_mem_free(pWdaParams->wdaMsgParam);
7534 vos_mem_free(pWdaParams) ;
7535
7536 //print a msg, nothing else to do
7537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7538 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 return ;
7540}
Jeff Johnson295189b2012-06-20 16:38:30 -07007541/*
7542 * FUNCTION: WDA_ProcessHostOffloadReq
7543 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7544 * to broadcast traffic (sta mode).
7545 */
7546VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7547 tSirHostOffloadReq *pHostOffloadParams)
7548{
7549 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007550 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7552 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7553 sizeof(WDI_HostOffloadReqParamsType)) ;
7554 tWDA_ReqParams *pWdaParams ;
7555
7556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007557 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007558
7559 if(NULL == wdiHostOffloadInfo)
7560 {
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563 VOS_ASSERT(0);
7564 return VOS_STATUS_E_NOMEM;
7565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7567 if(NULL == pWdaParams)
7568 {
7569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 VOS_ASSERT(0);
7572 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007573 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007574 return VOS_STATUS_E_NOMEM;
7575 }
7576
7577 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7578 pHostOffloadParams->offloadType;
7579 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7580 pHostOffloadParams->enableOrDisable;
7581
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007582 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7583 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7584
Jeff Johnson295189b2012-06-20 16:38:30 -07007585 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7586 {
7587 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7588 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7589 pHostOffloadParams->params.hostIpv4Addr,
7590 4);
7591 break;
7592 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7593 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7594 pHostOffloadParams->params.hostIpv6Addr,
7595 16);
7596 break;
7597 case SIR_IPV6_NS_OFFLOAD:
7598 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7599 pHostOffloadParams->params.hostIpv6Addr,
7600 16);
7601
7602#ifdef WLAN_NS_OFFLOAD
7603 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7604 {
7605 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7606 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7607 16);
7608 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7609 }
7610 else
7611 {
7612 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7613 }
7614
7615 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7616 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7617 16);
7618 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7619 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7620 6);
7621
7622 //Only two are supported so let's go through them without a loop
7623 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7624 {
7625 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7626 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7627 16);
7628 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7629 }
7630 else
7631 {
7632 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7633 }
7634
7635 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7636 {
7637 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7638 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7639 16);
7640 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7641 }
7642 else
7643 {
7644 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7645 }
7646 break;
7647#endif //WLAN_NS_OFFLOAD
7648 default:
7649 {
7650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7651 "No Handling for Offload Type %x in WDA "
7652 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7653 //WDA_VOS_ASSERT(0) ;
7654 }
7655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007656 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007657
Jeff Johnson295189b2012-06-20 16:38:30 -07007658 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007659 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007660 /* store Params pass it to WDI */
7661 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7662 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007663
Jeff Johnson295189b2012-06-20 16:38:30 -07007664
Jeff Johnson43971f52012-07-17 12:26:56 -07007665 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7667
Jeff Johnson43971f52012-07-17 12:26:56 -07007668 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007669 {
7670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7671 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007672 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7674 vos_mem_free(pWdaParams->wdaMsgParam);
7675 vos_mem_free(pWdaParams) ;
7676 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007677 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007678
7679}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007680/*
7681 * FUNCTION: WDA_KeepAliveReqCallback
7682 *
7683 */
7684void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7685{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7687
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007689 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007690
7691 if(NULL == pWdaParams)
7692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007695 VOS_ASSERT(0) ;
7696 return ;
7697 }
7698
7699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7700 vos_mem_free(pWdaParams->wdaMsgParam);
7701 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007702
Jeff Johnson295189b2012-06-20 16:38:30 -07007703 //print a msg, nothing else to do
7704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7705 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007706 return ;
7707}
Jeff Johnson295189b2012-06-20 16:38:30 -07007708/*
7709 * FUNCTION: WDA_ProcessKeepAliveReq
7710 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7711 * wakeup due to broadcast traffic (sta mode).
7712 */
7713VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7714 tSirKeepAliveReq *pKeepAliveParams)
7715{
7716 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007717 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007718 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7719 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7720 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007721 tWDA_ReqParams *pWdaParams;
7722
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007724 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007725 if(NULL == wdiKeepAliveInfo)
7726 {
7727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007728 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007730 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007731 return VOS_STATUS_E_NOMEM;
7732 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007733
7734 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7735 if(NULL == pWdaParams)
7736 {
7737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007738 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007739 VOS_ASSERT(0);
7740 vos_mem_free(wdiKeepAliveInfo);
7741 vos_mem_free(pKeepAliveParams);
7742 return VOS_STATUS_E_NOMEM;
7743 }
7744
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7746 pKeepAliveParams->packetType;
7747 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7748 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007749
7750 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7751 pKeepAliveParams->bssId,
7752 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007753
7754 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7755 {
7756 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7757 pKeepAliveParams->hostIpv4Addr,
7758 SIR_IPV4_ADDR_LEN);
7759 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7760 pKeepAliveParams->destIpv4Addr,
7761 SIR_IPV4_ADDR_LEN);
7762 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7763 pKeepAliveParams->destMacAddr,
7764 SIR_MAC_ADDR_LEN);
7765 }
7766 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7767 {
7768 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7769 SIR_IPV4_ADDR_LEN,
7770 0);
7771 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7772 SIR_IPV4_ADDR_LEN,
7773 0);
7774 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7775 SIR_MAC_ADDR_LEN,
7776 0);
7777 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007779
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007781 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007782 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007783 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7784 pWdaParams->pWdaContext = pWDA;
7785
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7787 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7788 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7789 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7790 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7792 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7793 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7794 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7795 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7797 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7798 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7799 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7800 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7801 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7802 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7803 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7805 "TimePeriod %d PacketType %d",
7806 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7807 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007808 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007809 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7810
Jeff Johnson43971f52012-07-17 12:26:56 -07007811 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 {
7813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7814 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007815 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7817 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007818 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007819 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007820 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007821
7822}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007823/*
7824 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7825 *
7826 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007827void WDA_WowlAddBcPtrnReqCallback(
7828 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7829 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007830{
7831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 if(NULL == pWdaParams)
7835 {
7836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007837 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 VOS_ASSERT(0) ;
7839 return ;
7840 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7842 vos_mem_free(pWdaParams->wdaMsgParam);
7843 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 return ;
7845}
Jeff Johnson295189b2012-06-20 16:38:30 -07007846/*
7847 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7848 * Request to WDI to add WOWL Bcast pattern
7849 */
7850VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7851 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7852{
7853 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007854 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007855 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7856 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7857 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7858 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007860 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 if(NULL == wdiWowlAddBcPtrnInfo)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007864 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 VOS_ASSERT(0);
7866 return VOS_STATUS_E_NOMEM;
7867 }
7868 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7869 if(NULL == pWdaParams)
7870 {
7871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007873 VOS_ASSERT(0);
7874 vos_mem_free(wdiWowlAddBcPtrnInfo);
7875 return VOS_STATUS_E_NOMEM;
7876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7878 pWowlAddBcPtrnParams->ucPatternId;
7879 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7880 pWowlAddBcPtrnParams->ucPatternByteOffset;
7881 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7882 pWowlAddBcPtrnParams->ucPatternMaskSize;
7883 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7884 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7886 {
7887 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7888 pWowlAddBcPtrnParams->ucPattern,
7889 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7890 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7891 pWowlAddBcPtrnParams->ucPatternMask,
7892 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7893 }
7894 else
7895 {
7896 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7897 pWowlAddBcPtrnParams->ucPattern,
7898 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7899 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7900 pWowlAddBcPtrnParams->ucPatternMask,
7901 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7902
7903 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7904 pWowlAddBcPtrnParams->ucPatternExt,
7905 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7906 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7907 pWowlAddBcPtrnParams->ucPatternMaskExt,
7908 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7909 }
7910
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007911 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7912 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7913
Jeff Johnson295189b2012-06-20 16:38:30 -07007914 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 /* Store param pointer as passed in by caller */
7916 /* store Params pass it to WDI */
7917 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7918 pWdaParams->pWdaContext = pWDA;
7919 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007920 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007921 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007922 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007923 {
7924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7925 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007926 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007927 vos_mem_free(pWdaParams->wdaMsgParam) ;
7928 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7929 vos_mem_free(pWdaParams) ;
7930 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007931 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007932
7933}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007934/*
7935 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7936 *
7937 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007938void WDA_WowlDelBcPtrnReqCallback(
7939 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7940 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007941{
7942 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007944 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007945 if(NULL == pWdaParams)
7946 {
7947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007948 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007949 VOS_ASSERT(0) ;
7950 return ;
7951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7953 vos_mem_free(pWdaParams->wdaMsgParam);
7954 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 return ;
7956}
Jeff Johnson295189b2012-06-20 16:38:30 -07007957/*
7958 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7959 * Request to WDI to delete WOWL Bcast pattern
7960 */
7961VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7962 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7963{
7964 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007965 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007966 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7967 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7968 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7969 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007971 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 if(NULL == wdiWowlDelBcPtrnInfo)
7973 {
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 VOS_ASSERT(0);
7977 return VOS_STATUS_E_NOMEM;
7978 }
7979 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7980 if(NULL == pWdaParams)
7981 {
7982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007984 VOS_ASSERT(0);
7985 vos_mem_free(wdiWowlDelBcPtrnInfo);
7986 return VOS_STATUS_E_NOMEM;
7987 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007988 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
7989 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007990
7991 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
7992 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
7993
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 /* Store param pointer as passed in by caller */
7996 /* store Params pass it to WDI */
7997 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
7998 pWdaParams->pWdaContext = pWDA;
7999 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008000 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008001 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008002 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 {
8004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8005 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008006 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008007 vos_mem_free(pWdaParams->wdaMsgParam) ;
8008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8009 vos_mem_free(pWdaParams) ;
8010 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008011 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008012
8013}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008014/*
8015 * FUNCTION: WDA_WowlEnterReqCallback
8016 *
8017 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008018void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008019{
8020 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8021 tWDA_CbContext *pWDA;
8022 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008024 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008025 if(NULL == pWdaParams)
8026 {
8027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008028 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 VOS_ASSERT(0) ;
8030 return ;
8031 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008032 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8033 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8034
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008035 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8036
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8038 vos_mem_free(pWdaParams) ;
8039
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008040 pWowlEnterParams->status =
8041 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 return ;
8044}
Jeff Johnson295189b2012-06-20 16:38:30 -07008045/*
8046 * FUNCTION: WDA_ProcessWowlEnterReq
8047 * Request to WDI to enter WOWL
8048 */
8049VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8050 tSirHalWowlEnterParams *pWowlEnterParams)
8051{
8052 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008053 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008054 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8055 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8056 sizeof(WDI_WowlEnterReqParamsType)) ;
8057 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008060 if(NULL == wdiWowlEnterInfo)
8061 {
8062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 VOS_ASSERT(0);
8065 return VOS_STATUS_E_NOMEM;
8066 }
8067 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8068 if(NULL == pWdaParams)
8069 {
8070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008071 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008072 VOS_ASSERT(0);
8073 vos_mem_free(wdiWowlEnterInfo);
8074 return VOS_STATUS_E_NOMEM;
8075 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008076 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8077 pWowlEnterParams->magicPtrn,
8078 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008079 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8080 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8082 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008083 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8084 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8086 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8088 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8090 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8092 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8094 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095#ifdef WLAN_WAKEUP_EVENTS
8096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8097 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8098
8099 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8100 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8101
8102 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8103 pWowlEnterParams->ucWowNetScanOffloadMatch;
8104
8105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8106 pWowlEnterParams->ucWowGTKRekeyError;
8107
8108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8109 pWowlEnterParams->ucWoWBSSConnLoss;
8110#endif // WLAN_WAKEUP_EVENTS
8111
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008112 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8113 pWowlEnterParams->bssIdx;
8114
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 /* Store param pointer as passed in by caller */
8117 /* store Params pass it to WDI */
8118 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8119 pWdaParams->pWdaContext = pWDA;
8120 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008121 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008122 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008123 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 {
8125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8126 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008127 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008128 vos_mem_free(pWdaParams->wdaMsgParam) ;
8129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8130 vos_mem_free(pWdaParams) ;
8131 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008132 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008133
8134}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008135/*
8136 * FUNCTION: WDA_WowlExitReqCallback
8137 *
8138 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008139void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008140{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008141 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8142 tWDA_CbContext *pWDA;
8143 tSirHalWowlExitParams *pWowlExitParams;
8144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008145 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008146 if(NULL == pWdaParams)
8147 {
8148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008149 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008150 VOS_ASSERT(0) ;
8151 return ;
8152 }
8153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8154 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8155
8156 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8157 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8158
8159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8160 vos_mem_free(pWdaParams) ;
8161
Jeff Johnson295189b2012-06-20 16:38:30 -07008162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008163 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008164 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008165 return ;
8166}
Jeff Johnson295189b2012-06-20 16:38:30 -07008167/*
8168 * FUNCTION: WDA_ProcessWowlExitReq
8169 * Request to WDI to add WOWL Bcast pattern
8170 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008171VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8172 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008173{
8174 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008175 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8177 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8178 sizeof(WDI_WowlExitReqParamsType)) ;
8179 tWDA_ReqParams *pWdaParams ;
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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008182 if(NULL == wdiWowlExitInfo)
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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008186 VOS_ASSERT(0);
8187 return VOS_STATUS_E_NOMEM;
8188 }
8189 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8190 if(NULL == pWdaParams)
8191 {
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__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008194 VOS_ASSERT(0);
8195 vos_mem_free(wdiWowlExitInfo);
8196 return VOS_STATUS_E_NOMEM;
8197 }
8198
8199 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8200 pWowlExitParams->bssIdx;
8201
8202 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8203
8204 /* Store param pointer as passed in by caller */
8205 /* store Params pass it to WDI */
8206 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8207 pWdaParams->pWdaContext = pWDA;
8208 pWdaParams->wdaMsgParam = pWowlExitParams;
8209
8210 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8211 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008212
Jeff Johnson43971f52012-07-17 12:26:56 -07008213 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008214 {
8215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8216 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008217 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008218 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8219 vos_mem_free(pWdaParams->wdaMsgParam);
8220 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008221 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008222 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008223}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008224/*
8225 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8226 * Request to WDI to determine whether a given station is capable of
8227 * using HW-based frame translation
8228 */
8229v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8230 tANI_U8 staIdx)
8231{
8232 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8233}
Jeff Johnson295189b2012-06-20 16:38:30 -07008234/*
8235 * FUNCTION: WDA_NvDownloadReqCallback
8236 * send NV Download RSP back to PE
8237 */
8238void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8239 void* pUserData)
8240{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008241
8242 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8243 tWDA_CbContext *pWDA;
8244
Jeff Johnson295189b2012-06-20 16:38:30 -07008245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008246 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008247
8248 if(NULL == pWdaParams)
8249 {
8250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008251 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008252 VOS_ASSERT(0) ;
8253 return ;
8254 }
8255
8256 pWDA = pWdaParams->pWdaContext;
8257
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8260 vos_mem_free(pWdaParams);
8261
Jeff Johnson295189b2012-06-20 16:38:30 -07008262 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 return ;
8264}
Jeff Johnson295189b2012-06-20 16:38:30 -07008265/*
8266 * FUNCTION: WDA_ProcessNvDownloadReq
8267 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8268 */
8269VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8270{
8271 /* Initialize the local Variables*/
8272 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8273 v_VOID_t *pNvBuffer=NULL;
8274 v_SIZE_t bufferSize = 0;
8275 WDI_Status status = WDI_STATUS_E_FAILURE;
8276 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008277 tWDA_ReqParams *pWdaParams ;
8278
Jeff Johnson295189b2012-06-20 16:38:30 -07008279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008280 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008281 if(NULL == pWDA)
8282 {
8283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008284 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008285 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 return VOS_STATUS_E_FAILURE;
8287 }
8288
8289 /* Get the NV structure base address and size from VOS */
8290 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8292 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008293 if(NULL == wdiNvDownloadReqParam)
8294 {
8295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 VOS_ASSERT(0);
8298 return VOS_STATUS_E_NOMEM;
8299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 /* Copy Params to wdiNvDownloadReqParam*/
8301 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8302 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008303
8304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8305 if(NULL == pWdaParams)
8306 {
8307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008308 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008309 VOS_ASSERT(0);
8310 vos_mem_free(wdiNvDownloadReqParam);
8311 return VOS_STATUS_E_NOMEM;
8312 }
8313
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008315 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8316 pWdaParams->wdaMsgParam = NULL;
8317 pWdaParams->pWdaContext = pWDA;
8318
8319
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008321
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008323 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8324
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 if(IS_WDI_STATUS_FAILURE(status))
8326 {
8327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8328 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8330 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333}
8334/*
8335 * FUNCTION: WDA_FlushAcReqCallback
8336 * send Flush AC RSP back to TL
8337 */
8338void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8339{
8340 vos_msg_t wdaMsg = {0} ;
8341 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8342 tFlushACReq *pFlushACReqParams;
8343 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008345 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 if(NULL == pWdaParams)
8347 {
8348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008349 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 VOS_ASSERT(0) ;
8351 return ;
8352 }
8353
8354 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8355 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8356 if(NULL == pFlushACRspParams)
8357 {
8358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008359 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008361 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008362 return ;
8363 }
8364 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8365 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8366 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8367 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8368 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8369 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 vos_mem_free(pWdaParams->wdaMsgParam) ;
8371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8372 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8374 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8375 // POST message to TL
8376 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8377
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 return ;
8379}
Jeff Johnson295189b2012-06-20 16:38:30 -07008380/*
8381 * FUNCTION: WDA_ProcessFlushAcReq
8382 * Request to WDI to Update the DELBA REQ params.
8383 */
8384VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8385 tFlushACReq *pFlushAcReqParams)
8386{
8387 WDI_Status status = WDI_STATUS_SUCCESS ;
8388 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8389 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8390 sizeof(WDI_FlushAcReqParamsType)) ;
8391 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008392 if(NULL == wdiFlushAcReqParam)
8393 {
8394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 VOS_ASSERT(0);
8397 return VOS_STATUS_E_NOMEM;
8398 }
8399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8400 if(NULL == pWdaParams)
8401 {
8402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 VOS_ASSERT(0);
8405 vos_mem_free(wdiFlushAcReqParam);
8406 return VOS_STATUS_E_NOMEM;
8407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008409 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8411 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8412 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8413 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 /* Store Flush AC pointer, as this will be used for response */
8415 /* store Params pass it to WDI */
8416 pWdaParams->pWdaContext = pWDA;
8417 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8418 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8420 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008421 if(IS_WDI_STATUS_FAILURE(status))
8422 {
8423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8424 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8425 vos_mem_free(pWdaParams->wdaMsgParam) ;
8426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8427 vos_mem_free(pWdaParams) ;
8428 //TODO: respond to TL with failure
8429 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008431}
Jeff Johnson295189b2012-06-20 16:38:30 -07008432/*
8433 * FUNCTION: WDA_BtAmpEventReqCallback
8434 *
8435 */
8436void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8437{
8438 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8439 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008440 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008441
8442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008443 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008444 if(NULL == pWdaParams)
8445 {
8446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008447 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 VOS_ASSERT(0) ;
8449 return ;
8450 }
8451 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8452 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8453 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8454 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8455 {
8456 pWDA->wdaAmpSessionOn = VOS_FALSE;
8457 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 vos_mem_free(pWdaParams->wdaMsgParam) ;
8459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8460 vos_mem_free(pWdaParams) ;
8461 /*
8462 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8463 * param here
8464 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008465 return ;
8466}
8467
Jeff Johnson295189b2012-06-20 16:38:30 -07008468/*
8469 * FUNCTION: WDA_ProcessBtAmpEventReq
8470 * Request to WDI to Update with BT AMP events.
8471 */
8472VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8473 tSmeBtAmpEvent *pBtAmpEventParams)
8474{
8475 WDI_Status status = WDI_STATUS_SUCCESS ;
8476 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8477 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8478 sizeof(WDI_BtAmpEventParamsType)) ;
8479 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008482 if(NULL == wdiBtAmpEventParam)
8483 {
8484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008486 VOS_ASSERT(0);
8487 return VOS_STATUS_E_NOMEM;
8488 }
8489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8490 if(NULL == pWdaParams)
8491 {
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008494 VOS_ASSERT(0);
8495 vos_mem_free(wdiBtAmpEventParam);
8496 return VOS_STATUS_E_NOMEM;
8497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8499 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008500 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 /* Store BT AMP event pointer, as this will be used for response */
8502 /* store Params pass it to WDI */
8503 pWdaParams->pWdaContext = pWDA;
8504 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8505 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8507 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 if(IS_WDI_STATUS_FAILURE(status))
8509 {
8510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8511 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8512 vos_mem_free(pWdaParams->wdaMsgParam) ;
8513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8514 vos_mem_free(pWdaParams) ;
8515 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8517 {
8518 pWDA->wdaAmpSessionOn = VOS_TRUE;
8519 }
8520 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008521}
8522
Jeff Johnson295189b2012-06-20 16:38:30 -07008523#ifdef ANI_MANF_DIAG
8524/*
8525 * FUNCTION: WDA_FTMCommandReqCallback
8526 * Handle FTM CMD response came from HAL
8527 * Route responce to HDD FTM
8528 */
8529void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8530 void *usrData)
8531{
8532 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8534 {
8535 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008536 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008537 return;
8538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008539 /* Release Current FTM Command Request */
8540 vos_mem_free(pWDA->wdaFTMCmdReq);
8541 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008542#ifndef WLAN_FTM_STUB
8543 /* Post FTM Responce to HDD FTM */
8544 wlan_sys_ftm(ftmCmdRspData);
8545#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008546 return;
8547}
Jeff Johnson295189b2012-06-20 16:38:30 -07008548/*
8549 * FUNCTION: WDA_ProcessFTMCommand
8550 * Send FTM command to WDI
8551 */
8552VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8553 tPttMsgbuffer *pPTTFtmCmd)
8554{
8555 WDI_Status status = WDI_STATUS_SUCCESS;
8556 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008557 ftmCMDReq = (WDI_FTMCommandReqType *)
8558 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8559 if(NULL == ftmCMDReq)
8560 {
8561 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8562 "WDA FTM Command buffer alloc fail");
8563 return VOS_STATUS_E_NOMEM;
8564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8566 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 /* Send command to WDI */
8569 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008570 return status;
8571}
8572#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008573#ifdef FEATURE_OEM_DATA_SUPPORT
8574/*
8575 * FUNCTION: WDA_StartOemDataReqCallback
8576 *
8577 */
8578void WDA_StartOemDataReqCallback(
8579 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8580 void* pUserData)
8581{
8582 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8584 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008585 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008586
Jeff Johnsone7245742012-09-05 17:12:55 -07008587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008588 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008589
8590 if(NULL == pWdaParams)
8591 {
8592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008594 VOS_ASSERT(0) ;
8595 return ;
8596 }
8597 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8598
Jeff Johnsone7245742012-09-05 17:12:55 -07008599 if(NULL == pWDA)
8600 {
8601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008602 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008603 VOS_ASSERT(0);
8604 return ;
8605 }
8606
8607 /*
8608 * Allocate memory for response params sent to PE
8609 */
8610 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8611
8612 // Check if memory is allocated for OemdataMeasRsp Params.
8613 if(NULL == pOemDataRspParams)
8614 {
8615 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8616 "OEM DATA WDA callback alloc fail");
8617 VOS_ASSERT(0) ;
8618 return;
8619 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008620
Jeff Johnsone7245742012-09-05 17:12:55 -07008621 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008622 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8623 vos_mem_free(pWdaParams->wdaMsgParam);
8624 vos_mem_free(pWdaParams) ;
8625
Jeff Johnsone7245742012-09-05 17:12:55 -07008626 /*
8627 * Now go ahead and copy other stuff for PE in incase of sucess only
8628 * Also, here success always means that we have atleast one BSSID.
8629 */
8630 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8631
8632 //enable Tx
8633 status = WDA_ResumeDataTx(pWDA);
8634 if(status != VOS_STATUS_SUCCESS)
8635 {
8636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8637 }
8638 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8639 return ;
8640}
8641/*
8642 * FUNCTION: WDA_ProcessStartOemDataReq
8643 * Send Start Oem Data Req to WDI
8644 */
8645VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8646 tStartOemDataReq *pOemDataReqParams)
8647{
8648 WDI_Status status = WDI_STATUS_SUCCESS;
8649 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008650 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008651
8652 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8653
8654 if(NULL == wdiOemDataReqParams)
8655 {
8656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008657 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008658 VOS_ASSERT(0);
8659 return VOS_STATUS_E_NOMEM;
8660 }
8661
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008662 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8663 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8664 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8665 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008666
8667 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8668
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8670 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008671 {
8672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008674 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008675 vos_mem_free(pOemDataReqParams);
8676 VOS_ASSERT(0);
8677 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008678 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008679
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008680 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8681 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8682
8683 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8684 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008685
8686 if(IS_WDI_STATUS_FAILURE(status))
8687 {
8688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8689 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8691 vos_mem_free(pWdaParams->wdaMsgParam);
8692 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008693 }
8694 return CONVERT_WDI2VOS_STATUS(status) ;
8695}
8696#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008697/*
8698 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8699 *
8700 */
8701void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8702{
8703 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 if(NULL == pWdaParams)
8707 {
8708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008709 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008710 VOS_ASSERT(0) ;
8711 return ;
8712 }
8713
8714 if(NULL != pWdaParams->wdaMsgParam)
8715 {
8716 vos_mem_free(pWdaParams->wdaMsgParam);
8717 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8719 {
8720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8721 }
8722
8723 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 return ;
8725}
Jeff Johnson295189b2012-06-20 16:38:30 -07008726#ifdef WLAN_FEATURE_GTK_OFFLOAD
8727/*
8728 * FUNCTION: WDA_HostOffloadReqCallback
8729 *
8730 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008731void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8732 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008733{
8734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8735
8736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008737 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008738
8739 VOS_ASSERT(NULL != pWdaParams);
8740
8741 vos_mem_free(pWdaParams->wdaMsgParam) ;
8742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8743 vos_mem_free(pWdaParams) ;
8744
8745 //print a msg, nothing else to do
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8747 "WDA_GTKOffloadReqCallback invoked " );
8748
8749 return ;
8750}
8751
8752/*
8753 * FUNCTION: WDA_ProcessGTKOffloadReq
8754 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8755 * to broadcast traffic (sta mode).
8756 */
8757VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8758 tpSirGtkOffloadParams pGtkOffloadParams)
8759{
8760 VOS_STATUS status = VOS_STATUS_SUCCESS;
8761 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8762 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8763 sizeof(WDI_GtkOffloadReqMsg)) ;
8764 tWDA_ReqParams *pWdaParams ;
8765
8766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008768
8769 if(NULL == wdiGtkOffloadReqMsg)
8770 {
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008772 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008773 VOS_ASSERT(0);
8774 return VOS_STATUS_E_NOMEM;
8775 }
8776
8777 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8778 if(NULL == pWdaParams)
8779 {
8780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008781 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 VOS_ASSERT(0);
8783 vos_mem_free(wdiGtkOffloadReqMsg);
8784 return VOS_STATUS_E_NOMEM;
8785 }
8786
8787 //
8788 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8789 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008790
8791 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8792 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8793
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8795 // Copy KCK
8796 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8797 // Copy KEK
8798 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8799 // Copy KeyReplayCounter
8800 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8801 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8802
8803 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8804
8805 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8806 (NULL == pWDA->wdaWdiApiMsgParam));
8807
8808 /* Store Params pass it to WDI */
8809 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8810 pWdaParams->pWdaContext = pWDA;
8811 /* Store param pointer as passed in by caller */
8812 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8813
8814 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8815
8816 if(IS_WDI_STATUS_FAILURE(status))
8817 {
8818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8819 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8821 vos_mem_free(pWdaParams->wdaMsgParam);
8822 vos_mem_free(pWdaParams);
8823 }
8824
8825 return CONVERT_WDI2VOS_STATUS(status) ;
8826}
8827
8828/*
8829 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8830 *
8831 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008832void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8833 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008834{
8835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8836 tWDA_CbContext *pWDA;
8837 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8838 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8839 tANI_U8 i;
8840 vos_msg_t vosMsg;
8841
8842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008844
8845 VOS_ASSERT(NULL != pWdaParams);
8846
8847 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8848 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8849
8850 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8851 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8852
8853 /* Message Header */
8854 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8855 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8856
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008857 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8858 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8859 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8860 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8861 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8862 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008863
8864 /* VOS message wrapper */
8865 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8866 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8867 vosMsg.bodyval = 0;
8868
8869 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8870 {
8871 /* free the mem and return */
8872 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8873 }
8874
8875 vos_mem_free(pWdaParams->wdaMsgParam) ;
8876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8877 vos_mem_free(pWdaParams) ;
8878}
8879#endif
8880
8881/*
8882 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8883 * Request to WDI to set Tx Per Tracking configurations
8884 */
8885VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8886{
8887 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008888 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008889 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8890 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8891 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8892 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008894 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008895 if(NULL == pwdiSetTxPerTrackingReqParams)
8896 {
8897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 vos_mem_free(pTxPerTrackingParams);
8900 VOS_ASSERT(0);
8901 return VOS_STATUS_E_NOMEM;
8902 }
8903 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8904 if(NULL == pWdaParams)
8905 {
8906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008907 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008908 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8909 vos_mem_free(pTxPerTrackingParams);
8910 VOS_ASSERT(0);
8911 return VOS_STATUS_E_NOMEM;
8912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8914 pTxPerTrackingParams->ucTxPerTrackingEnable;
8915 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8916 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8917 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8918 pTxPerTrackingParams->ucTxPerTrackingRatio;
8919 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8920 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 /* Store param pointer as passed in by caller */
8923 /* store Params pass it to WDI
8924 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8925 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8926 pWdaParams->pWdaContext = pWDA;
8927 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008928 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008930 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 {
8932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8933 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008934 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 vos_mem_free(pWdaParams->wdaMsgParam) ;
8936 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8937 vos_mem_free(pWdaParams) ;
8938 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008939 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008940
8941}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008942/*
8943 * FUNCTION: WDA_HALDumpCmdCallback
8944 * Send the VOS complete .
8945 */
8946void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8947 void* pUserData)
8948{
8949 tANI_U8 *buffer = NULL;
8950 tWDA_CbContext *pWDA = NULL;
8951 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008952 if(NULL == pWdaParams)
8953 {
8954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008955 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 VOS_ASSERT(0) ;
8957 return ;
8958 }
8959
8960 pWDA = pWdaParams->pWdaContext;
8961 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 if(wdiRspParams->usBufferLen > 0)
8963 {
8964 /*Copy the Resp data to UMAC supplied buffer*/
8965 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8966 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8968 vos_mem_free(pWdaParams);
8969
8970 /* Indicate VOSS about the start complete */
8971 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 return ;
8973}
8974
Jeff Johnson295189b2012-06-20 16:38:30 -07008975/*
8976 * FUNCTION: WDA_ProcessHALDumpCmdReq
8977 * Send Dump command to WDI
8978 */
8979VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
8980 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
8981 tANI_U32 arg4, tANI_U8 *pBuffer)
8982{
8983 WDI_Status status = WDI_STATUS_SUCCESS;
8984 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
8985 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
8986 tWDA_ReqParams *pWdaParams ;
8987 pVosContextType pVosContext = NULL;
8988 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
8990 (void *)pMac);
8991
8992 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8993 if(NULL == pWdaParams)
8994 {
8995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008996 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008997 return VOS_STATUS_E_NOMEM;
8998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 /* Allocate memory WDI request structure*/
9000 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9001 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9002 if(NULL == wdiHALDumpCmdReqParam)
9003 {
9004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9005 "WDA HAL DUMP Command buffer alloc fail");
9006 vos_mem_free(pWdaParams);
9007 return WDI_STATUS_E_FAILURE;
9008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 /* Extract the arguments */
9011 wdiHalDumpCmdInfo->command = cmd;
9012 wdiHalDumpCmdInfo->argument1 = arg1;
9013 wdiHalDumpCmdInfo->argument2 = arg2;
9014 wdiHalDumpCmdInfo->argument3 = arg3;
9015 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9018
9019 /* Response message will be passed through the buffer */
9020 pWdaParams->wdaMsgParam = (void *)pBuffer;
9021
9022 /* store Params pass it to WDI */
9023 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 /* Send command to WDI */
9025 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 if ( vStatus != VOS_STATUS_SUCCESS )
9028 {
9029 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9030 {
9031 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009032 "%s: Timeout occured before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009033 }
9034 else
9035 {
9036 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009037 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 }
9039 VOS_ASSERT(0);
9040 }
9041 return status;
9042}
Jeff Johnson295189b2012-06-20 16:38:30 -07009043#ifdef WLAN_FEATURE_GTK_OFFLOAD
9044/*
9045 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9046 * Request to WDI to get GTK Offload Information
9047 */
9048VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9049 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9050{
9051 VOS_STATUS status = VOS_STATUS_SUCCESS;
9052 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9053 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9054 tWDA_ReqParams *pWdaParams ;
9055
9056 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
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 return VOS_STATUS_E_NOMEM;
9062 }
9063
9064 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9065 if(NULL == pWdaParams)
9066 {
9067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009069 VOS_ASSERT(0);
9070 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9071 return VOS_STATUS_E_NOMEM;
9072 }
9073
9074 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9075
9076 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9077 (NULL == pWDA->wdaWdiApiMsgParam));
9078
9079 /* Store Params pass it to WDI */
9080 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9081 pWdaParams->pWdaContext = pWDA;
9082 /* Store param pointer as passed in by caller */
9083 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9084
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009085 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9086 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9087
Jeff Johnson295189b2012-06-20 16:38:30 -07009088 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9089
9090 if(IS_WDI_STATUS_FAILURE(status))
9091 {
9092 /* failure returned by WDI API */
9093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9094 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9096 vos_mem_free(pWdaParams) ;
9097 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9098 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9099 }
9100
9101 return CONVERT_WDI2VOS_STATUS(status) ;
9102}
9103#endif // WLAN_FEATURE_GTK_OFFLOAD
9104
9105/*
9106 * -------------------------------------------------------------------------
9107 * DATA interface with WDI for Mgmt Frames
9108 * -------------------------------------------------------------------------
9109 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009110/*
9111 * FUNCTION: WDA_TxComplete
9112 * Callback function for the WDA_TxPacket
9113 */
9114VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9115 VOS_STATUS status )
9116{
9117
9118 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9119 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009120 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009121
9122 if(NULL == wdaContext)
9123 {
9124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9125 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009126 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 VOS_ASSERT(0);
9128 return VOS_STATUS_E_FAILURE;
9129 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009130
9131 /*Check if frame was timed out or not*/
9132 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9133 (v_PVOID_t)&uUserData);
9134
9135 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9136 {
9137 /*Discard frame - no further processing is needed*/
9138 vos_pkt_return_packet(pData);
9139 return VOS_STATUS_SUCCESS;
9140 }
9141
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9143 if( NULL!=wdaContext->pTxCbFunc)
9144 {
9145 /*check if packet is freed already*/
9146 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9147 {
9148 wdaContext->pTxCbFunc(pMac, pData);
9149 }
9150 else
9151 {
9152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9153 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009154 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 //Return from here since we reaching here because the packet already timeout
9156 return status;
9157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009158 }
9159
9160 /*
9161 * Trigger the event to bring the HAL TL Tx complete function to come
9162 * out of wait
9163 * Let the coe above to complete the packet first. When this event is set,
9164 * the thread waiting for the event may run and set Vospacket_freed causing the original
9165 * packet not being freed.
9166 */
9167 status = vos_event_set(&wdaContext->txFrameEvent);
9168 if(!VOS_IS_STATUS_SUCCESS(status))
9169 {
9170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9171 "NEW VOS Event Set failed - status = %d \n", status);
9172 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009173 return status;
9174}
Jeff Johnson295189b2012-06-20 16:38:30 -07009175/*
9176 * FUNCTION: WDA_TxPacket
9177 * Forward TX management frame to WDI
9178 */
9179VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9180 void *pFrmBuf,
9181 tANI_U16 frmLen,
9182 eFrameType frmType,
9183 eFrameTxDir txDir,
9184 tANI_U8 tid,
9185 pWDATxRxCompFunc pCompFunc,
9186 void *pData,
9187 pWDAAckFnTxComp pAckTxComp,
9188 tANI_U8 txFlag)
9189{
9190 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9191 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9192 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9193 tANI_U8 eventIdx = 0;
9194 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9195 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 if((NULL == pWDA)||(NULL == pFrmBuf))
9197 {
9198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9199 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009200 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 VOS_ASSERT(0);
9202 return VOS_STATUS_E_FAILURE;
9203 }
9204
9205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9206 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009207 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9208 if(NULL == pMac)
9209 {
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009211 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 VOS_ASSERT(0);
9213 return VOS_STATUS_E_FAILURE;
9214 }
9215
9216
9217
9218 /* store the call back function in WDA context */
9219 pWDA->pTxCbFunc = pCompFunc;
9220 /* store the call back for the function of ackTxComplete */
9221 if( pAckTxComp )
9222 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009223 if( NULL != pWDA->pAckTxCbFunc )
9224 {
9225 /* Already TxComp is active no need to active again */
9226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9227 "There is already one request pending for tx complete\n");
9228 pWDA->pAckTxCbFunc( pMac, 0);
9229 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009230
Jeff Johnsone7245742012-09-05 17:12:55 -07009231 if( VOS_STATUS_SUCCESS !=
9232 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9233 {
9234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9235 "Tx Complete timeout Timer Stop Failed ");
9236 }
9237 else
9238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9240 "Tx Complete timeout Timer Stop Sucess ");
9241 }
9242 }
9243
9244 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9245 pWDA->pAckTxCbFunc = pAckTxComp;
9246 if( VOS_STATUS_SUCCESS !=
9247 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9248 {
9249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9250 "Tx Complete Timer Start Failed ");
9251 pWDA->pAckTxCbFunc = NULL;
9252 return eHAL_STATUS_FAILURE;
9253 }
9254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 /* Reset the event to be not signalled */
9256 status = vos_event_reset(&pWDA->txFrameEvent);
9257 if(!VOS_IS_STATUS_SUCCESS(status))
9258 {
9259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9260 "VOS Event reset failed - status = %d\n",status);
9261 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9262 if( pAckTxComp )
9263 {
9264 pWDA->pAckTxCbFunc = NULL;
9265 if( VOS_STATUS_SUCCESS !=
9266 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9267 {
9268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9269 "Tx Complete timeout Timer Stop Failed ");
9270 }
9271 }
9272 return VOS_STATUS_E_FAILURE;
9273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 /* Get system role, use the self station if in unknown role or STA role */
9275 systemRole = wdaGetGlobalSystemRole(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07009276 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9277 (( eSYSTEM_STA_ROLE == systemRole )
9278#ifdef FEATURE_WLAN_CCX
9279 && frmType == HAL_TXRX_FRM_802_11_MGMT
9280#endif
9281 ))
9282 {
9283 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9284 }
9285
Jeff Johnsone7245742012-09-05 17:12:55 -07009286 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9287 disassoc frame reaches the HW, HAL has already deleted the peer station */
9288 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009290 if ((pFc->subType == SIR_MAC_MGMT_DISASSOC) ||
9291 (pFc->subType == SIR_MAC_MGMT_DEAUTH) ||
9292 (pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
9293 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009295 /*Send Probe request frames on self sta idx*/
9296 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 /* Since we donot want probe responses to be retried, send probe responses
9299 through the NO_ACK queues */
9300 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9301 {
9302 //probe response is sent out using self station and no retries options.
9303 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9304 }
9305 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9306 {
9307 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9308 }
9309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9311
9312 /*Set frame tag to 0
9313 We will use the WDA user data in order to tag a frame as expired*/
9314 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9315 (v_PVOID_t)0);
9316
9317
9318 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9319 frmLen, ucTypeSubType, tid,
9320 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9321 {
9322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9323 "Sending Mgmt Frame failed - status = %d\n", status);
9324 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9325 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9326 if( pAckTxComp )
9327 {
9328 pWDA->pAckTxCbFunc = NULL;
9329 if( VOS_STATUS_SUCCESS !=
9330 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9331 {
9332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9333 "Tx Complete timeout Timer Stop Failed ");
9334 }
9335 }
9336 return VOS_STATUS_E_FAILURE;
9337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009338 /*
9339 * Wait for the event to be set by the TL, to get the response of TX
9340 * complete, this event should be set by the Callback function called by TL
9341 */
9342 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9343 &eventIdx);
9344 if(!VOS_IS_STATUS_SUCCESS(status))
9345 {
9346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9347 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009348 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009349 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9350 after the packet gets completed(packet freed once)*/
9351
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009352 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9353 WDA_TransportChannelDebug(0, 1);
9354
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009355 /*Tag Frame as timed out for later deletion*/
9356 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9357 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9358
Jeff Johnson295189b2012-06-20 16:38:30 -07009359 /* check whether the packet was freed already,so need not free again when
9360 * TL calls the WDA_Txcomplete routine
9361 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009362 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9363 /*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 -07009364 {
9365 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009366 } */
9367
Jeff Johnson295189b2012-06-20 16:38:30 -07009368 if( pAckTxComp )
9369 {
9370 pWDA->pAckTxCbFunc = NULL;
9371 if( VOS_STATUS_SUCCESS !=
9372 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9373 {
9374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9375 "Tx Complete timeout Timer Stop Failed ");
9376 }
9377 }
9378 status = VOS_STATUS_E_FAILURE;
9379 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009380 return status;
9381}
Jeff Johnson295189b2012-06-20 16:38:30 -07009382/*
9383 * FUNCTION: WDA_McProcessMsg
9384 * Trigger DAL-AL to start CFG download
9385 */
9386VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9387{
9388 VOS_STATUS status = VOS_STATUS_SUCCESS;
9389 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009390 if(NULL == pMsg)
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009393 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 VOS_ASSERT(0);
9395 return VOS_STATUS_E_FAILURE;
9396 }
9397
9398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009399 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009400
9401 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9402 if(NULL == pWDA )
9403 {
9404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009405 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009406 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009407 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 return VOS_STATUS_E_FAILURE;
9409 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 /* Process all the WDA messages.. */
9411 switch( pMsg->type )
9412 {
9413 case WNI_CFG_DNLD_REQ:
9414 {
9415 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009416 /* call WDA complete event if config download success */
9417 if( VOS_IS_STATUS_SUCCESS(status) )
9418 {
9419 vos_WDAComplete_cback(pVosContext);
9420 }
9421 else
9422 {
9423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9424 "WDA Config Download failure" );
9425 }
9426 break ;
9427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 /*
9429 * Init SCAN request from PE, convert it into DAL format
9430 * and send it to DAL
9431 */
9432 case WDA_INIT_SCAN_REQ:
9433 {
9434 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9435 break ;
9436 }
9437 /* start SCAN request from PE */
9438 case WDA_START_SCAN_REQ:
9439 {
9440 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9441 break ;
9442 }
9443 /* end SCAN request from PE */
9444 case WDA_END_SCAN_REQ:
9445 {
9446 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9447 break ;
9448 }
9449 /* end SCAN request from PE */
9450 case WDA_FINISH_SCAN_REQ:
9451 {
9452 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9453 break ;
9454 }
9455 /* join request from PE */
9456 case WDA_CHNL_SWITCH_REQ:
9457 {
9458 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9459 {
9460 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9461 }
9462 else
9463 {
9464 WDA_ProcessChannelSwitchReq(pWDA,
9465 (tSwitchChannelParams*)pMsg->bodyptr) ;
9466 }
9467 break ;
9468 }
9469 /* ADD BSS request from PE */
9470 case WDA_ADD_BSS_REQ:
9471 {
9472 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9473 break ;
9474 }
9475 case WDA_ADD_STA_REQ:
9476 {
9477 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9478 break ;
9479 }
9480 case WDA_DELETE_BSS_REQ:
9481 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009482 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9483 break ;
9484 }
9485 case WDA_DELETE_STA_REQ:
9486 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009487 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9488 break ;
9489 }
9490 case WDA_CONFIG_PARAM_UPDATE_REQ:
9491 {
9492 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9493 break ;
9494 }
9495 case WDA_SET_BSSKEY_REQ:
9496 {
9497 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9498 break ;
9499 }
9500 case WDA_SET_STAKEY_REQ:
9501 {
9502 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9503 break ;
9504 }
9505 case WDA_SET_STA_BCASTKEY_REQ:
9506 {
9507 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9508 break ;
9509 }
9510 case WDA_REMOVE_BSSKEY_REQ:
9511 {
9512 WDA_ProcessRemoveBssKeyReq(pWDA,
9513 (tRemoveBssKeyParams *)pMsg->bodyptr);
9514 break ;
9515 }
9516 case WDA_REMOVE_STAKEY_REQ:
9517 {
9518 WDA_ProcessRemoveStaKeyReq(pWDA,
9519 (tRemoveStaKeyParams *)pMsg->bodyptr);
9520 break ;
9521 }
9522 case WDA_REMOVE_STA_BCASTKEY_REQ:
9523 {
9524 /* TODO: currently UMAC is not sending this request, Add the code for
9525 handling this request when UMAC supports */
9526 break;
9527 }
9528#ifdef FEATURE_WLAN_CCX
9529 case WDA_TSM_STATS_REQ:
9530 {
9531 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9532 break;
9533 }
9534#endif
9535 case WDA_UPDATE_EDCA_PROFILE_IND:
9536 {
9537 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9538 break;
9539 }
9540 case WDA_ADD_TS_REQ:
9541 {
9542 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9543 break;
9544 }
9545 case WDA_DEL_TS_REQ:
9546 {
9547 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9548 break;
9549 }
9550 case WDA_ADDBA_REQ:
9551 {
9552 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9553 break;
9554 }
9555 case WDA_DELBA_IND:
9556 {
9557 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9558 break;
9559 }
9560 case WDA_SET_LINK_STATE:
9561 {
9562 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9563 break;
9564 }
9565 case WDA_GET_STATISTICS_REQ:
9566 {
9567 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9568 break;
9569 }
9570 case WDA_PWR_SAVE_CFG:
9571 {
9572 if(pWDA->wdaState == WDA_READY_STATE)
9573 {
9574 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9575 }
9576 else
9577 {
9578 if(NULL != pMsg->bodyptr)
9579 {
9580 vos_mem_free(pMsg->bodyptr);
9581 }
9582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9583 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9584 }
9585 break;
9586 }
9587 case WDA_ENTER_IMPS_REQ:
9588 {
9589 if(pWDA->wdaState == WDA_READY_STATE)
9590 {
9591 WDA_ProcessEnterImpsReq(pWDA);
9592 }
9593 else
9594 {
9595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9596 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9597 }
9598 break;
9599 }
9600 case WDA_EXIT_IMPS_REQ:
9601 {
9602 if(pWDA->wdaState == WDA_READY_STATE)
9603 {
9604 WDA_ProcessExitImpsReq(pWDA);
9605 }
9606 else
9607 {
9608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9609 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9610 }
9611 break;
9612 }
9613 case WDA_ENTER_BMPS_REQ:
9614 {
9615 if(pWDA->wdaState == WDA_READY_STATE)
9616 {
9617 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9618 }
9619 else
9620 {
9621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9622 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9623 }
9624 break;
9625 }
9626 case WDA_EXIT_BMPS_REQ:
9627 {
9628 if(pWDA->wdaState == WDA_READY_STATE)
9629 {
9630 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9631 }
9632 else
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9635 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9636 }
9637 break;
9638 }
9639 case WDA_ENTER_UAPSD_REQ:
9640 {
9641 if(pWDA->wdaState == WDA_READY_STATE)
9642 {
9643 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9644 }
9645 else
9646 {
9647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9648 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9649 }
9650 break;
9651 }
9652 case WDA_EXIT_UAPSD_REQ:
9653 {
9654 if(pWDA->wdaState == WDA_READY_STATE)
9655 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009656 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 }
9658 else
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9661 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9662 }
9663 break;
9664 }
9665 case WDA_UPDATE_UAPSD_IND:
9666 {
9667 if(pWDA->wdaState == WDA_READY_STATE)
9668 {
9669 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9670 }
9671 else
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9674 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9675 }
9676 break;
9677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009678 case WDA_REGISTER_PE_CALLBACK :
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9681 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9682 /*TODO: store the PE callback */
9683 /* Do Nothing? MSG Body should be freed at here */
9684 if(NULL != pMsg->bodyptr)
9685 {
9686 vos_mem_free(pMsg->bodyptr);
9687 }
9688 break;
9689 }
9690 case WDA_SYS_READY_IND :
9691 {
9692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9693 "Handling msg type WDA_SYS_READY_IND " );
9694 pWDA->wdaState = WDA_READY_STATE;
9695 if(NULL != pMsg->bodyptr)
9696 {
9697 vos_mem_free(pMsg->bodyptr);
9698 }
9699 break;
9700 }
9701 case WDA_BEACON_FILTER_IND :
9702 {
9703 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9704 break;
9705 }
9706 case WDA_BTC_SET_CFG:
9707 {
9708 /*TODO: handle this while dealing with BTC */
9709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9710 "Handling msg type WDA_BTC_SET_CFG " );
9711 /* Do Nothing? MSG Body should be freed at here */
9712 if(NULL != pMsg->bodyptr)
9713 {
9714 vos_mem_free(pMsg->bodyptr);
9715 }
9716 break;
9717 }
9718 case WDA_SIGNAL_BT_EVENT:
9719 {
9720 /*TODO: handle this while dealing with BTC */
9721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9722 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9723 /* Do Nothing? MSG Body should be freed at here */
9724 if(NULL != pMsg->bodyptr)
9725 {
9726 vos_mem_free(pMsg->bodyptr);
9727 }
9728 break;
9729 }
9730 case WDA_CFG_RXP_FILTER_REQ:
9731 {
9732 WDA_ProcessConfigureRxpFilterReq(pWDA,
9733 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9734 break;
9735 }
9736 case WDA_SET_HOST_OFFLOAD:
9737 {
9738 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9739 break;
9740 }
9741 case WDA_SET_KEEP_ALIVE:
9742 {
9743 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9744 break;
9745 }
9746#ifdef WLAN_NS_OFFLOAD
9747 case WDA_SET_NS_OFFLOAD:
9748 {
9749 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9750 break;
9751 }
9752#endif //WLAN_NS_OFFLOAD
9753 case WDA_ADD_STA_SELF_REQ:
9754 {
9755 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9756 break;
9757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009758 case WDA_DEL_STA_SELF_REQ:
9759 {
9760 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9761 break;
9762 }
9763 case WDA_WOWL_ADD_BCAST_PTRN:
9764 {
9765 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9766 break;
9767 }
9768 case WDA_WOWL_DEL_BCAST_PTRN:
9769 {
9770 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9771 break;
9772 }
9773 case WDA_WOWL_ENTER_REQ:
9774 {
9775 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9776 break;
9777 }
9778 case WDA_WOWL_EXIT_REQ:
9779 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009780 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009781 break;
9782 }
9783 case WDA_TL_FLUSH_AC_REQ:
9784 {
9785 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9786 break;
9787 }
9788 case WDA_SIGNAL_BTAMP_EVENT:
9789 {
9790 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9791 break;
9792 }
9793#ifdef WDA_UT
9794 case WDA_WDI_EVENT_MSG:
9795 {
9796 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9797 break ;
9798 }
9799#endif
9800 case WDA_UPDATE_BEACON_IND:
9801 {
9802 WDA_ProcessUpdateBeaconParams(pWDA,
9803 (tUpdateBeaconParams *)pMsg->bodyptr);
9804 break;
9805 }
9806 case WDA_SEND_BEACON_REQ:
9807 {
9808 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9809 break;
9810 }
9811 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9812 {
9813 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9814 (tSendProbeRespParams *)pMsg->bodyptr);
9815 break;
9816 }
9817#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9818 case WDA_SET_MAX_TX_POWER_REQ:
9819 {
9820 WDA_ProcessSetMaxTxPowerReq(pWDA,
9821 (tMaxTxPowerParams *)pMsg->bodyptr);
9822 break;
9823 }
9824#endif
9825#ifdef WLAN_FEATURE_P2P
9826 case WDA_SET_P2P_GO_NOA_REQ:
9827 {
9828 WDA_ProcessSetP2PGONOAReq(pWDA,
9829 (tP2pPsParams *)pMsg->bodyptr);
9830 break;
9831 }
9832#endif
9833 /* timer related messages */
9834 case WDA_TIMER_BA_ACTIVITY_REQ:
9835 {
9836 WDA_BaCheckActivity(pWDA) ;
9837 break ;
9838 }
9839#ifdef WLAN_FEATURE_VOWIFI_11R
9840 case WDA_AGGR_QOS_REQ:
9841 {
9842 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9843 break;
9844 }
9845#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009846#ifdef ANI_MANF_DIAG
9847 case WDA_FTM_CMD_REQ:
9848 {
9849 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9850 break ;
9851 }
9852#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009853#ifdef FEATURE_OEM_DATA_SUPPORT
9854 case WDA_START_OEM_DATA_REQ:
9855 {
9856 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9857 break;
9858 }
9859#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009860 /* Tx Complete Time out Indication */
9861 case WDA_TX_COMPLETE_TIMEOUT_IND:
9862 {
9863 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9864 break;
9865 }
9866 case WDA_WLAN_SUSPEND_IND:
9867 {
9868 WDA_ProcessWlanSuspendInd(pWDA,
9869 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9870 break;
9871 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 case WDA_WLAN_RESUME_REQ:
9873 {
9874 WDA_ProcessWlanResumeReq(pWDA,
9875 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9876 break;
9877 }
9878
9879 case WDA_UPDATE_CF_IND:
9880 {
9881 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9882 pMsg->bodyptr = NULL;
9883 break;
9884 }
9885#ifdef FEATURE_WLAN_SCAN_PNO
9886 case WDA_SET_PNO_REQ:
9887 {
9888 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9889 break;
9890 }
9891 case WDA_UPDATE_SCAN_PARAMS_REQ:
9892 {
9893 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9894 break;
9895 }
9896 case WDA_SET_RSSI_FILTER_REQ:
9897 {
9898 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9899 break;
9900 }
9901#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009902 case WDA_SET_TX_PER_TRACKING_REQ:
9903 {
9904 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9905 break;
9906 }
9907
9908#ifdef WLAN_FEATURE_PACKET_FILTERING
9909 case WDA_8023_MULTICAST_LIST_REQ:
9910 {
9911 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9912 break;
9913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009914 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9915 {
9916 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9917 break;
9918 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009919 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9920 {
9921 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9922 break;
9923 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009924 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9925 {
9926 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9927 break;
9928 }
9929#endif // WLAN_FEATURE_PACKET_FILTERING
9930
9931
9932 case WDA_TRANSMISSION_CONTROL_IND:
9933 {
9934 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9935 break;
9936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 case WDA_SET_POWER_PARAMS_REQ:
9938 {
9939 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9940 break;
9941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009942#ifdef WLAN_FEATURE_GTK_OFFLOAD
9943 case WDA_GTK_OFFLOAD_REQ:
9944 {
9945 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9946 break;
9947 }
9948
9949 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9950 {
9951 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9952 break;
9953 }
9954#endif //WLAN_FEATURE_GTK_OFFLOAD
9955
9956 case WDA_SET_TM_LEVEL_REQ:
9957 {
9958 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9959 break;
9960 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009961#ifdef WLAN_FEATURE_11AC
9962 case WDA_UPDATE_OP_MODE:
9963 {
9964 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9965 {
9966 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
9967 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
9968 else
9969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9970 " VHT OpMode Feature is Not Supported \n");
9971 }
9972 else
9973 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9974 " 11AC Feature is Not Supported \n");
9975 break;
9976 }
9977#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 default:
9979 {
9980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9981 "No Handling for msg type %x in WDA "
9982 ,pMsg->type);
9983 /* Do Nothing? MSG Body should be freed at here */
9984 if(NULL != pMsg->bodyptr)
9985 {
9986 vos_mem_free(pMsg->bodyptr);
9987 }
9988 //WDA_VOS_ASSERT(0) ;
9989 }
9990 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 return status ;
9992}
9993
Jeff Johnson295189b2012-06-20 16:38:30 -07009994/*
9995 * FUNCTION: WDA_LowLevelIndCallback
9996 * IND API callback from WDI, send Ind to PE
9997 */
9998void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
9999 void* pUserData )
10000{
10001 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10002#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10003 tSirRSSINotification rssiNotification;
10004#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010005 if(NULL == pWDA)
10006 {
10007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010008 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 VOS_ASSERT(0);
10010 return ;
10011 }
10012
10013 switch(wdiLowLevelInd->wdiIndicationType)
10014 {
10015 case WDI_RSSI_NOTIFICATION_IND:
10016 {
10017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10018 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010019#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10020 rssiNotification.bReserved =
10021 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10022 rssiNotification.bRssiThres1NegCross =
10023 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10024 rssiNotification.bRssiThres1PosCross =
10025 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10026 rssiNotification.bRssiThres2NegCross =
10027 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10028 rssiNotification.bRssiThres2PosCross =
10029 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10030 rssiNotification.bRssiThres3NegCross =
10031 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10032 rssiNotification.bRssiThres3PosCross =
10033 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Jeff Johnson295189b2012-06-20 16:38:30 -070010034 WLANTL_BMPSRSSIRegionChangedNotification(
10035 pWDA->pVosContext,
10036 &rssiNotification);
10037#endif
10038 break ;
10039 }
10040 case WDI_MISSED_BEACON_IND:
10041 {
10042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10043 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 /* send IND to PE */
10045 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10046 break ;
10047 }
10048 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10049 {
10050 /* TODO: Decode Ind and send Ind to PE */
10051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10052 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10053 break ;
10054 }
10055
10056 case WDI_MIC_FAILURE_IND:
10057 {
10058 tpSirSmeMicFailureInd pMicInd =
10059 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10060
10061 if(NULL == pMicInd)
10062 {
10063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010065 break;
10066 }
10067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10068 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10070 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10071 vos_mem_copy(pMicInd->bssId,
10072 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10073 sizeof(tSirMacAddr));
10074 vos_mem_copy(pMicInd->info.srcMacAddr,
10075 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10076 sizeof(tSirMacAddr));
10077 vos_mem_copy(pMicInd->info.taMacAddr,
10078 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10079 sizeof(tSirMacAddr));
10080 vos_mem_copy(pMicInd->info.dstMacAddr,
10081 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10082 sizeof(tSirMacAddr));
10083 vos_mem_copy(pMicInd->info.rxMacAddr,
10084 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10085 sizeof(tSirMacAddr));
10086 pMicInd->info.multicast =
10087 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10088 pMicInd->info.keyId=
10089 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10090 pMicInd->info.IV1=
10091 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10092 vos_mem_copy(pMicInd->info.TSC,
10093 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010094 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10095 (void *)pMicInd , 0) ;
10096 break ;
10097 }
10098 case WDI_FATAL_ERROR_IND:
10099 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010100 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 /* TODO: Decode Ind and send Ind to PE */
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10103 "Received WDI_FATAL_ERROR_IND from WDI ");
10104 break ;
10105 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010106 case WDI_DEL_STA_IND:
10107 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010108 tpDeleteStaContext pDelSTACtx =
10109 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10110
10111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10112 "Received WDI_DEL_STA_IND from WDI ");
10113 if(NULL == pDelSTACtx)
10114 {
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010116 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010117 break;
10118 }
10119 vos_mem_copy(pDelSTACtx->addr2,
10120 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10121 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 vos_mem_copy(pDelSTACtx->bssId,
10123 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10124 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010125 pDelSTACtx->assocId =
10126 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10127 pDelSTACtx->reasonCode =
10128 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10129 pDelSTACtx->staId =
10130 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010131 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10132 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010133 break ;
10134 }
10135 case WDI_COEX_IND:
10136 {
10137 tANI_U32 index;
10138 vos_msg_t vosMsg;
10139 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10140 if(NULL == pSmeCoexInd)
10141 {
10142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010143 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 break;
10145 }
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10147 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010148 /* Message Header */
10149 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10150 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 /* Info from WDI Indication */
10152 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10153 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10154 {
10155 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10156 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 /* VOS message wrapper */
10158 vosMsg.type = eWNI_SME_COEX_IND;
10159 vosMsg.bodyptr = (void *)pSmeCoexInd;
10160 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 /* Send message to SME */
10162 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10163 {
10164 /* free the mem and return */
10165 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10166 }
10167 else
10168 {
10169 /* DEBUG */
10170 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10171 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10172 pSmeCoexInd->coexIndType,
10173 pSmeCoexInd->coexIndData[0],
10174 pSmeCoexInd->coexIndData[1],
10175 pSmeCoexInd->coexIndData[2],
10176 pSmeCoexInd->coexIndData[3]);
10177 }
10178 break;
10179 }
10180 case WDI_TX_COMPLETE_IND:
10181 {
10182 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10183 /* Calling TxCompleteAck Indication from wda context*/
10184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10185 "Complete Indication received from HAL");
10186 if( pWDA->pAckTxCbFunc )
10187 {
10188 if( VOS_STATUS_SUCCESS !=
10189 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10190 {
10191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10192 "Tx Complete timeout Timer Stop Failed ");
10193 }
10194 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10195 pWDA->pAckTxCbFunc = NULL;
10196 }
10197 else
10198 {
10199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10200 "Tx Complete Indication is received after timeout ");
10201 }
10202 break;
10203 }
10204#ifdef WLAN_FEATURE_P2P
10205 case WDI_P2P_NOA_ATTR_IND :
10206 {
10207 tSirP2PNoaAttr *pP2pNoaAttr =
10208 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10210 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010211 if (NULL == pP2pNoaAttr)
10212 {
10213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10214 "Memory allocation failure, "
10215 "WDI_P2P_NOA_ATTR_IND not forwarded");
10216 break;
10217 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010218 pP2pNoaAttr->index =
10219 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10220 pP2pNoaAttr->oppPsFlag =
10221 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10222 pP2pNoaAttr->ctWin =
10223 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10224
10225 pP2pNoaAttr->uNoa1IntervalCnt =
10226 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10227 pP2pNoaAttr->uNoa1Duration =
10228 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10229 pP2pNoaAttr->uNoa1Interval =
10230 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10231 pP2pNoaAttr->uNoa1StartTime =
10232 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010233 pP2pNoaAttr->uNoa2IntervalCnt =
10234 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10235 pP2pNoaAttr->uNoa2Duration =
10236 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10237 pP2pNoaAttr->uNoa2Interval =
10238 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10239 pP2pNoaAttr->uNoa2StartTime =
10240 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010241 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10242 (void *)pP2pNoaAttr , 0) ;
10243 break;
10244 }
10245#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010246#ifdef FEATURE_WLAN_SCAN_PNO
10247 case WDI_PREF_NETWORK_FOUND_IND:
10248 {
10249 vos_msg_t vosMsg;
10250 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10252 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 if (NULL == pPrefNetworkFoundInd)
10254 {
10255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10256 "Memory allocation failure, "
10257 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10258 break;
10259 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010260 /* Message Header */
10261 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10262 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10263
10264 /* Info from WDI Indication */
10265 pPrefNetworkFoundInd->ssId.length =
10266 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010268 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10269 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10270 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010272 /* VOS message wrapper */
10273 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10274 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10275 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010276 /* Send message to SME */
10277 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10278 {
10279 /* free the mem and return */
10280 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10281 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010282 break;
10283 }
10284#endif // FEATURE_WLAN_SCAN_PNO
10285
10286#ifdef WLAN_WAKEUP_EVENTS
10287 case WDI_WAKE_REASON_IND:
10288 {
10289 vos_msg_t vosMsg;
10290 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10291 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10292 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10293
10294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10295 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10296 wdiLowLevelInd->wdiIndicationType,
10297 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10298 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10299 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10300
10301 if (NULL == pWakeReasonInd)
10302 {
10303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10304 "Memory allocation failure, "
10305 "WDI_WAKE_REASON_IND not forwarded");
10306 break;
10307 }
10308
10309 vos_mem_zero(pWakeReasonInd, allocSize);
10310
10311 /* Message Header */
10312 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10313 pWakeReasonInd->mesgLen = allocSize;
10314
10315 /* Info from WDI Indication */
10316 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10317 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10318 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10319 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10320 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10321 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10322 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10323 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10324
10325 /* VOS message wrapper */
10326 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10327 vosMsg.bodyptr = (void *) pWakeReasonInd;
10328 vosMsg.bodyval = 0;
10329
10330 /* Send message to SME */
10331 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10332 {
10333 /* free the mem and return */
10334 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10335 }
10336
10337 break;
10338 }
10339#endif // WLAN_WAKEUP_EVENTS
10340
10341 case WDI_TX_PER_HIT_IND:
10342 {
10343 vos_msg_t vosMsg;
10344 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10345 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10346 /* VOS message wrapper */
10347 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10348 vosMsg.bodyptr = NULL;
10349 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010350 /* Send message to SME */
10351 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10352 {
10353 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10354 }
10355 break;
10356 }
10357
10358 default:
10359 {
10360 /* TODO error */
10361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10362 "Received UNKNOWN Indication from WDI ");
10363 }
10364 }
10365 return ;
10366}
10367
Jeff Johnson295189b2012-06-20 16:38:30 -070010368/*
10369 * BA related processing in WDA.
10370 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010371void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10372 void* pUserData)
10373{
10374 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10375 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010376 if(NULL == pWdaParams)
10377 {
10378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010379 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010380 VOS_ASSERT(0) ;
10381 return ;
10382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010384 vos_mem_free(pWdaParams->wdaMsgParam) ;
10385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10386 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010388 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10390 {
10391 tANI_U8 i = 0 ;
10392 tBaActivityInd *baActivityInd = NULL ;
10393 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10394 tANI_U8 allocSize = sizeof(tBaActivityInd)
10395 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10396 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10397 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010399 if(NULL == baActivityInd)
10400 {
10401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 VOS_ASSERT(0) ;
10404 return;
10405 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10407 sizeof(tSirMacAddr)) ;
10408 baActivityInd->baCandidateCnt = baCandidateCount ;
10409
10410 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10411 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10412
10413 for(i = 0 ; i < baCandidateCount ; i++)
10414 {
10415 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10417 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10419 {
10420 baCandidate->baInfo[tid].fBaEnable =
10421 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10422 baCandidate->baInfo[tid].startingSeqNum =
10423 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10424 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010425 wdiBaCandidate++ ;
10426 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10429 }
10430 else
10431 {
10432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10433 "BA Trigger RSP with Failure received ");
10434 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010435 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010436}
Jeff Johnson295189b2012-06-20 16:38:30 -070010437/*
10438 * BA Activity check timer handler
10439 */
10440void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10441{
10442 tANI_U8 curSta = 0 ;
10443 tANI_U8 tid = 0 ;
10444 tANI_U8 size = 0 ;
10445 tANI_U8 baCandidateCount = 0 ;
10446 tANI_U8 newBaCandidate = 0 ;
10447 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10448
10449 if(NULL == pWDA)
10450 {
10451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010452 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 VOS_ASSERT(0);
10454 return ;
10455 }
10456 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10457 {
10458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10459 "Inconsistent STA entries in WDA");
10460 VOS_ASSERT(0) ;
10461 }
10462 /* walk through all STA entries and find out TX packet count */
10463 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10464 {
10465 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10466 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010467 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 tANI_U32 txPktCount = 0 ;
10469 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010470 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010471 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10472 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10474 curSta, tid, &txPktCount)))
10475 {
10476#if 0
10477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10478 "************* %d:%d, %d ",curSta, txPktCount,
10479 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10480#endif
10481 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010482 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10484 curSta, tid)))
10485 {
10486 /* get prepare for sending message to HAL */
10487 //baCandidate[baCandidateCount].staIdx = curSta ;
10488 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10489 newBaCandidate = WDA_ENABLE_BA ;
10490 }
10491 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10492 }
10493 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 /* fill the entry for all the sta with given TID's */
10495 if(WDA_ENABLE_BA == newBaCandidate)
10496 {
10497 /* move to next BA candidate */
10498 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10499 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10500 baCandidateCount++ ;
10501 newBaCandidate = WDA_DISABLE_BA ;
10502 }
10503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010504 /* prepare and send message to hal */
10505 if( 0 < baCandidateCount)
10506 {
10507 WDI_Status status = WDI_STATUS_SUCCESS ;
10508 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10509 tWDA_ReqParams *pWdaParams =
10510 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010511 if(NULL == pWdaParams)
10512 {
10513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010514 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 VOS_ASSERT(0) ;
10516 return;
10517 }
10518 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10519 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10520 if(NULL == wdiTriggerBaReq)
10521 {
10522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 VOS_ASSERT(0) ;
10525 vos_mem_free(pWdaParams);
10526 return;
10527 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010528 do
10529 {
10530 WDI_TriggerBAReqinfoType *triggerBaInfo =
10531 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10532 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10533 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10534 * for each request */
10535 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10536 triggerBaInfo->ucBASessionID = 0;
10537 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10538 } while(0) ;
10539 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010541 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 pWdaParams->pWdaContext = pWDA;
10543 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10544 pWdaParams->wdaMsgParam = NULL;
10545 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10546 WDA_TriggerBaReqCallback, pWdaParams) ;
10547 if(IS_WDI_STATUS_FAILURE(status))
10548 {
10549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10550 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10551 vos_mem_free(pWdaParams->wdaMsgParam) ;
10552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10553 vos_mem_free(pWdaParams) ;
10554 }
10555 }
10556 else
10557 {
10558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10559 "There is no TID for initiating BA");
10560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010561 if( VOS_STATUS_SUCCESS !=
10562 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10565 "BA Activity Timer Stop Failed ");
10566 return ;
10567 }
10568 if( VOS_STATUS_SUCCESS !=
10569 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10572 "BA Activity Timer Start Failed ");
10573 return;
10574 }
10575 return ;
10576}
Jeff Johnson295189b2012-06-20 16:38:30 -070010577/*
10578 * WDA common routine to create timer used by WDA.
10579 */
10580static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10581{
Jeff Johnson295189b2012-06-20 16:38:30 -070010582 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10583 tANI_U32 val = 0 ;
10584 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10585
10586 if(NULL == pMac)
10587 {
10588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010589 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010590 VOS_ASSERT(0);
10591 return VOS_STATUS_E_FAILURE;
10592 }
10593 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10594 != eSIR_SUCCESS)
10595 {
10596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10597 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10598 return VOS_STATUS_E_FAILURE;
10599 }
10600 val = SYS_MS_TO_TICKS(val) ;
10601
10602 /* BA activity check timer */
10603 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10604 "BA Activity Check timer", WDA_TimerHandler,
10605 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10606 if(status != TX_SUCCESS)
10607 {
10608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10609 "Unable to create BA activity timer");
10610 return eSIR_FAILURE ;
10611 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010613 /* Tx Complete Timeout timer */
10614 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10615 "Tx Complete Check timer", WDA_TimerHandler,
10616 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010617 if(status != TX_SUCCESS)
10618 {
10619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10620 "Unable to create Tx Complete Timeout timer");
10621 /* Destroy timer of BA activity check timer */
10622 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10623 if(status != TX_SUCCESS)
10624 {
10625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10626 "Unable to Destroy BA activity timer");
10627 return eSIR_FAILURE ;
10628 }
10629 return eSIR_FAILURE ;
10630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 return eSIR_SUCCESS ;
10632}
Jeff Johnson295189b2012-06-20 16:38:30 -070010633/*
10634 * WDA common routine to destroy timer used by WDA.
10635 */
10636static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10637{
10638 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010639 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10640 if(status != TX_SUCCESS)
10641 {
10642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10643 "Unable to Destroy Tx Complete Timeout timer");
10644 return eSIR_FAILURE ;
10645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10647 if(status != TX_SUCCESS)
10648 {
10649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10650 "Unable to Destroy BA activity timer");
10651 return eSIR_FAILURE ;
10652 }
10653
10654 return eSIR_SUCCESS ;
10655}
Jeff Johnson295189b2012-06-20 16:38:30 -070010656/*
10657 * WDA timer handler.
10658 */
10659void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10660{
10661 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10662 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010663 /*
10664 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10665 */
10666 wdaMsg.type = timerInfo ;
10667 wdaMsg.bodyptr = NULL;
10668 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 /* post the message.. */
10670 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10671 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10672 {
10673 vosStatus = VOS_STATUS_E_BADMSG;
10674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010675}
Jeff Johnson295189b2012-06-20 16:38:30 -070010676/*
10677 * WDA Tx Complete timeout Indication.
10678 */
10679void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10680{
10681 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 if( pWDA->pAckTxCbFunc )
10683 {
10684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10685 "TxComplete timer expired\n");
10686 pWDA->pAckTxCbFunc( pMac, 0);
10687 pWDA->pAckTxCbFunc = NULL;
10688 }
10689 else
10690 {
10691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10692 "There is no request pending for TxComplete and wait timer expired\n");
10693 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010694}
Jeff Johnson295189b2012-06-20 16:38:30 -070010695/*
10696 * WDA Set REG Domain to VOS NV
10697 */
10698eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10699{
10700 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10701 {
10702 return eHAL_STATUS_INVALID_PARAMETER;
10703 }
10704 return eHAL_STATUS_SUCCESS;
10705}
10706#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10707
Jeff Johnson295189b2012-06-20 16:38:30 -070010708#ifdef FEATURE_WLAN_SCAN_PNO
10709/*
10710 * FUNCTION: WDA_PNOScanReqCallback
10711 *
10712 */
10713void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10714{
10715 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010717 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010718 if(NULL == pWdaParams)
10719 {
10720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010721 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010722 VOS_ASSERT(0) ;
10723 return ;
10724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 if( pWdaParams != NULL )
10726 {
10727 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10728 {
10729 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 if( pWdaParams->wdaMsgParam != NULL)
10732 {
10733 vos_mem_free(pWdaParams->wdaMsgParam);
10734 }
10735
10736 vos_mem_free(pWdaParams) ;
10737 }
10738
10739 return ;
10740}
Jeff Johnson295189b2012-06-20 16:38:30 -070010741/*
10742 * FUNCTION: WDA_UpdateScanParamsCallback
10743 *
10744 */
10745void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10746{
10747 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010749 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010750 if(NULL == pWdaParams)
10751 {
10752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010753 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010754 VOS_ASSERT(0) ;
10755 return ;
10756 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010757 if( pWdaParams != NULL )
10758 {
10759 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10760 {
10761 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10762 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010763 if( pWdaParams->wdaMsgParam != NULL)
10764 {
10765 vos_mem_free(pWdaParams->wdaMsgParam);
10766 }
10767 vos_mem_free(pWdaParams) ;
10768 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010769 return ;
10770}
Jeff Johnson295189b2012-06-20 16:38:30 -070010771/*
10772 * FUNCTION: WDA_SetPowerParamsCallback
10773 *
10774 */
10775void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
10776{
Jeff Johnsone7245742012-09-05 17:12:55 -070010777 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010778
10779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 if(NULL == pWdaParams)
10782 {
10783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010784 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010785 VOS_ASSERT(0) ;
10786 return ;
10787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010788 if( pWdaParams != NULL )
10789 {
10790 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10791 {
10792 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10793 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 if( pWdaParams->wdaMsgParam != NULL)
10795 {
10796 vos_mem_free(pWdaParams->wdaMsgParam);
10797 }
10798 vos_mem_free(pWdaParams) ;
10799 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010800 return ;
10801}
Jeff Johnson295189b2012-06-20 16:38:30 -070010802/*
10803 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10804 * Request to WDI to set Preferred Network List.Offload
10805 */
10806VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
10807 tSirPNOScanReq *pPNOScanReqParams)
10808{
Jeff Johnson43971f52012-07-17 12:26:56 -070010809 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
10811 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
10812 tWDA_ReqParams *pWdaParams ;
10813 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010815 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010816 if(NULL == pwdiPNOScanReqInfo)
10817 {
10818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010820 VOS_ASSERT(0);
10821 return VOS_STATUS_E_NOMEM;
10822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10824 if(NULL == pWdaParams)
10825 {
10826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 VOS_ASSERT(0);
10829 vos_mem_free(pwdiPNOScanReqInfo);
10830 return VOS_STATUS_E_NOMEM;
10831 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 //
10833 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
10834 //
10835 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
10836 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
10838 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
10839 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010840 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
10841 {
10842 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
10843 &pPNOScanReqParams->aNetworks[i],
10844 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
10845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 /*Scan timer intervals*/
10847 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
10848 &pPNOScanReqParams->scanTimers,
10849 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 /*Probe template for 2.4GHz band*/
10851 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
10852 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10853 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010854 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
10855 pPNOScanReqParams->p24GProbeTemplate,
10856 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010857 /*Probe template for 5GHz band*/
10858 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
10859 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10860 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010861 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
10862 pPNOScanReqParams->p5GProbeTemplate,
10863 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010864 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010865
Jeff Johnson295189b2012-06-20 16:38:30 -070010866 /* Store Params pass it to WDI */
10867 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
10868 pWdaParams->pWdaContext = pWDA;
10869 /* Store param pointer as passed in by caller */
10870 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010871 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
10872 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010873 if(IS_WDI_STATUS_FAILURE(status))
10874 {
10875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10876 "Failure in Set PNO REQ WDI API, free all the memory " );
10877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10878 vos_mem_free(pWdaParams->wdaMsgParam);
10879 pWdaParams->wdaWdiApiMsgParam = NULL;
10880 pWdaParams->wdaMsgParam = NULL;
10881 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 return CONVERT_WDI2VOS_STATUS(status) ;
10883}
Jeff Johnson295189b2012-06-20 16:38:30 -070010884/*
10885 * FUNCTION: WDA_RssiFilterCallback
10886 *
10887 */
10888void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
10889{
10890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10891
10892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010893 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010894
10895 VOS_ASSERT(NULL != pWdaParams);
10896
10897 vos_mem_free(pWdaParams->wdaMsgParam) ;
10898 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10899 vos_mem_free(pWdaParams) ;
10900
10901 return ;
10902}
10903/*
10904 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10905 * Request to WDI to set Preferred Network List.Offload
10906 */
10907VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
10908 tSirSetRSSIFilterReq* pRssiFilterParams)
10909{
Jeff Johnson43971f52012-07-17 12:26:56 -070010910 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010911 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
10912 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
10913 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010916 if(NULL == pwdiSetRssiFilterReqInfo)
10917 {
10918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 VOS_ASSERT(0);
10921 return VOS_STATUS_E_NOMEM;
10922 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10924 if(NULL == pWdaParams)
10925 {
10926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010928 VOS_ASSERT(0);
10929 vos_mem_free(pwdiSetRssiFilterReqInfo);
10930 return VOS_STATUS_E_NOMEM;
10931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
10933 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010934
Jeff Johnson295189b2012-06-20 16:38:30 -070010935 /* Store Params pass it to WDI */
10936 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
10937 pWdaParams->pWdaContext = pWDA;
10938 /* Store param pointer as passed in by caller */
10939 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010940 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
10941 (WDI_PNOScanCb)WDA_RssiFilterCallback,
10942 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010943 if(IS_WDI_STATUS_FAILURE(status))
10944 {
10945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10946 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
10947 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10948 vos_mem_free(pWdaParams->wdaMsgParam);
10949 pWdaParams->wdaWdiApiMsgParam = NULL;
10950 pWdaParams->wdaMsgParam = NULL;
10951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010952 return CONVERT_WDI2VOS_STATUS(status) ;
10953}
10954
Jeff Johnson295189b2012-06-20 16:38:30 -070010955/*
10956 * FUNCTION: WDA_ProcessUpdateScanParams
10957 * Request to WDI to update Scan Parameters
10958 */
10959VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
10960 tSirUpdateScanParams *pUpdateScanParams)
10961{
Jeff Johnson43971f52012-07-17 12:26:56 -070010962 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010963 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
10964 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
10965 sizeof(WDI_UpdateScanParamsInfoType)) ;
10966 tWDA_ReqParams *pWdaParams ;
10967 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010969 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 if(NULL == wdiUpdateScanParamsInfoType)
10971 {
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010974 VOS_ASSERT(0);
10975 return VOS_STATUS_E_NOMEM;
10976 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010977 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10978 if ( NULL == pWdaParams )
10979 {
10980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010981 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010982 VOS_ASSERT(0);
10983 vos_mem_free(wdiUpdateScanParamsInfoType);
10984 return VOS_STATUS_E_NOMEM;
10985 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 //
10987 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
10988 //
Jeff Johnson295189b2012-06-20 16:38:30 -070010989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10990 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
10991 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
10992 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
10993 "sir struct %d wdi struct %d",
10994 pUpdateScanParams->b11dEnabled,
10995 pUpdateScanParams->b11dResolved,
10996 pUpdateScanParams->ucChannelCount,
10997 pUpdateScanParams->usPassiveMinChTime,
10998 pUpdateScanParams->usPassiveMaxChTime,
10999 pUpdateScanParams->usActiveMinChTime,
11000 pUpdateScanParams->usActiveMaxChTime,
11001 sizeof(tSirUpdateScanParams),
11002 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11003
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11005 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11007 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11009 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011010 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11011 pUpdateScanParams->usActiveMaxChTime;
11012 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11013 pUpdateScanParams->usActiveMinChTime;
11014 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11015 pUpdateScanParams->usPassiveMaxChTime;
11016 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11017 pUpdateScanParams->usPassiveMinChTime;
11018
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
11020 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS)?
11021 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS;
11022
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 for ( i = 0; i <
11024 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11025 i++)
11026 {
11027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11028 "Update Scan Parameters channel: %d",
11029 pUpdateScanParams->aChannels[i]);
11030
11031 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11032 pUpdateScanParams->aChannels[i];
11033 }
11034
Jeff Johnson295189b2012-06-20 16:38:30 -070011035 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011036
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 /* Store Params pass it to WDI */
11038 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11039 pWdaParams->pWdaContext = pWDA;
11040 /* Store param pointer as passed in by caller */
11041 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011042
Jeff Johnson295189b2012-06-20 16:38:30 -070011043
11044
11045 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11046 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11047 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 if(IS_WDI_STATUS_FAILURE(status))
11049 {
11050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11051 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11052 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11053 vos_mem_free(pWdaParams->wdaMsgParam);
11054 vos_mem_free(pWdaParams);
11055 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011056 return CONVERT_WDI2VOS_STATUS(status) ;
11057}
11058#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011059#ifdef WLAN_FEATURE_PACKET_FILTERING
11060/*
11061 * FUNCTION: WDA_8023MulticastListReqCallback
11062 *
11063 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011064void WDA_8023MulticastListReqCallback(
11065 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11066 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011067{
11068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011070 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011071 if(NULL == pWdaParams)
11072 {
11073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011074 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 VOS_ASSERT(0) ;
11076 return ;
11077 }
11078
11079 vos_mem_free(pWdaParams->wdaMsgParam) ;
11080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11081 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 //print a msg, nothing else to do
11083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11084 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011085 return ;
11086}
Jeff Johnson295189b2012-06-20 16:38:30 -070011087/*
11088 * FUNCTION: WDA_Process8023MulticastListReq
11089 * Request to WDI to add 8023 Multicast List
11090 */
11091VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11092 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11093{
Jeff Johnson43971f52012-07-17 12:26:56 -070011094 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11096 tWDA_ReqParams *pWdaParams ;
11097 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011099 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 pwdiFltPktSetMcListReqParamsType =
11101 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11102 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11103 ) ;
11104 if(NULL == pwdiFltPktSetMcListReqParamsType)
11105 {
11106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 return VOS_STATUS_E_NOMEM;
11109 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11111 if(NULL == pWdaParams)
11112 {
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011115 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11116 return VOS_STATUS_E_NOMEM;
11117 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011118
Jeff Johnson295189b2012-06-20 16:38:30 -070011119 //
11120 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11121 //
11122 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011123 pRcvFltMcAddrList->ulMulticastAddrCnt;
11124
11125 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11126 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11127 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11128 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11129
Jeff Johnson295189b2012-06-20 16:38:30 -070011130 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11131 {
11132 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11133 &(pRcvFltMcAddrList->multicastAddr[i]),
11134 sizeof(tSirMacAddr));
11135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011136 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011137
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 /* Store Params pass it to WDI */
11139 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11140 pWdaParams->pWdaContext = pWDA;
11141 /* Store param pointer as passed in by caller */
11142 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 status = WDI_8023MulticastListReq(
11144 pwdiFltPktSetMcListReqParamsType,
11145 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11146 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011147 if(IS_WDI_STATUS_FAILURE(status))
11148 {
11149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11150 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11152 vos_mem_free(pWdaParams->wdaMsgParam);
11153 vos_mem_free(pWdaParams);
11154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011155 return CONVERT_WDI2VOS_STATUS(status) ;
11156}
Jeff Johnson295189b2012-06-20 16:38:30 -070011157/*
11158 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11159 *
11160 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011161void WDA_ReceiveFilterSetFilterReqCallback(
11162 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11163 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011164{
11165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011167 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011169 if(NULL == pWdaParams)
11170 {
11171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 VOS_ASSERT(0) ;
11174 return ;
11175 }
11176
11177 vos_mem_free(pWdaParams->wdaMsgParam) ;
11178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11179 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 //print a msg, nothing else to do
11181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11182 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011183 return ;
11184}
Jeff Johnson295189b2012-06-20 16:38:30 -070011185/*
11186 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11187 * Request to WDI to set Receive Filters
11188 */
11189VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11190 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11191{
Jeff Johnson43971f52012-07-17 12:26:56 -070011192 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11194 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11195 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11196 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11197 tWDA_ReqParams *pWdaParams ;
11198 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011200 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11202 {
11203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011204 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011205 VOS_ASSERT(0);
11206 return VOS_STATUS_E_NOMEM;
11207 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011208 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11209 if(NULL == pWdaParams)
11210 {
11211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011213 VOS_ASSERT(0);
11214 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11215 return VOS_STATUS_E_NOMEM;
11216 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11218 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11219 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11220 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011221 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11222 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11223
11224 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11225 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011226
11227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11228 "FID %d FT %d NParams %d CT %d",
11229 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11230 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11231 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11232 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011233 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11234 {
11235 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11236 &pRcvPktFilterCfg->paramsData[i],
11237 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11239 "Proto %d Comp Flag %d \n",
11240 pwdiSetRcvPktFilterReqParamsType->
11241 wdiPktFilterCfg.paramsData[i].protocolLayer,
11242 pwdiSetRcvPktFilterReqParamsType->
11243 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11245 "Data Offset %d Data Len %d\n",
11246 pwdiSetRcvPktFilterReqParamsType->
11247 wdiPktFilterCfg.paramsData[i].dataOffset,
11248 pwdiSetRcvPktFilterReqParamsType->
11249 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11251 "CData: %d:%d:%d:%d:%d:%d\n",
11252 pwdiSetRcvPktFilterReqParamsType->
11253 wdiPktFilterCfg.paramsData[i].compareData[0],
11254 pwdiSetRcvPktFilterReqParamsType->
11255 wdiPktFilterCfg.paramsData[i].compareData[1],
11256 pwdiSetRcvPktFilterReqParamsType->
11257 wdiPktFilterCfg.paramsData[i].compareData[2],
11258 pwdiSetRcvPktFilterReqParamsType->
11259 wdiPktFilterCfg.paramsData[i].compareData[3],
11260 pwdiSetRcvPktFilterReqParamsType->
11261 wdiPktFilterCfg.paramsData[i].compareData[4],
11262 pwdiSetRcvPktFilterReqParamsType->
11263 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11265 "MData: %d:%d:%d:%d:%d:%d\n",
11266 pwdiSetRcvPktFilterReqParamsType->
11267 wdiPktFilterCfg.paramsData[i].dataMask[0],
11268 pwdiSetRcvPktFilterReqParamsType->
11269 wdiPktFilterCfg.paramsData[i].dataMask[1],
11270 pwdiSetRcvPktFilterReqParamsType->
11271 wdiPktFilterCfg.paramsData[i].dataMask[2],
11272 pwdiSetRcvPktFilterReqParamsType->
11273 wdiPktFilterCfg.paramsData[i].dataMask[3],
11274 pwdiSetRcvPktFilterReqParamsType->
11275 wdiPktFilterCfg.paramsData[i].dataMask[4],
11276 pwdiSetRcvPktFilterReqParamsType->
11277 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011280 /* Store Params pass it to WDI */
11281 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11282 pWdaParams->pWdaContext = pWDA;
11283 /* Store param pointer as passed in by caller */
11284 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011285 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11286 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11287 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011288 if(IS_WDI_STATUS_FAILURE(status))
11289 {
11290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11291 "Failure in SetFilter(),free all the memory,status %d ",status);
11292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11293 vos_mem_free(pWdaParams->wdaMsgParam);
11294 vos_mem_free(pWdaParams);
11295 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 return CONVERT_WDI2VOS_STATUS(status) ;
11297}
Jeff Johnson295189b2012-06-20 16:38:30 -070011298/*
11299 * FUNCTION: WDA_FilterMatchCountReqCallback
11300 *
11301 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011302void WDA_FilterMatchCountReqCallback(
11303 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11304 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011305{
11306 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11307 tWDA_CbContext *pWDA;
11308 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11309 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11310 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11311 tANI_U8 i;
11312 vos_msg_t vosMsg;
11313
11314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011316 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11317
Jeff Johnsone7245742012-09-05 17:12:55 -070011318 if(NULL == pRcvFltPktMatchCntRsp)
11319 {
11320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011321 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011322 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011323 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011324 return ;
11325 }
11326
Jeff Johnson295189b2012-06-20 16:38:30 -070011327 if(NULL == pWdaParams)
11328 {
11329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011330 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011331 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011332 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011333 return ;
11334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11336 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011337 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11338 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11339
11340 /* Message Header */
11341 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11342 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11343
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011344 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011345
11346 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11347 {
11348 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11349 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11350 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011351 /* VOS message wrapper */
11352 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11353 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11354 vosMsg.bodyval = 0;
11355 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11356 {
11357 /* free the mem and return */
11358 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11359 }
11360
11361 vos_mem_free(pWdaParams->wdaMsgParam) ;
11362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11363 vos_mem_free(pWdaParams) ;
11364}
Jeff Johnson295189b2012-06-20 16:38:30 -070011365/*
11366 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11367 * Request to WDI to get PC Filter Match Count
11368 */
11369VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11370{
Jeff Johnson43971f52012-07-17 12:26:56 -070011371 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11373 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11374 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011376 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011377 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11378 {
11379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011380 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011381 VOS_ASSERT(0);
11382 return VOS_STATUS_E_NOMEM;
11383 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011384 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11385 if(NULL == pWdaParams)
11386 {
11387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011388 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011389 VOS_ASSERT(0);
11390 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11391 return VOS_STATUS_E_NOMEM;
11392 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011393
Jeff Johnson295189b2012-06-20 16:38:30 -070011394 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11395
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011396 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11397 pRcvFltPktMatchRsp->bssId,
11398 sizeof(wpt_macAddr));
11399
Jeff Johnson295189b2012-06-20 16:38:30 -070011400 /* Store Params pass it to WDI */
11401 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11402 pWdaParams->pWdaContext = pWDA;
11403 /* Store param pointer as passed in by caller */
11404 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011405 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11406 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11407 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011408 if(IS_WDI_STATUS_FAILURE(status))
11409 {
11410 /* failure returned by WDI API */
11411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11412 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11413 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11414 vos_mem_free(pWdaParams) ;
11415 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11416 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 return CONVERT_WDI2VOS_STATUS(status) ;
11419}
Jeff Johnson295189b2012-06-20 16:38:30 -070011420/*
11421 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11422 *
11423 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011424void WDA_ReceiveFilterClearFilterReqCallback(
11425 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11426 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011427{
11428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011430 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011431/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11432 if(NULL == pWdaParams)
11433 {
11434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011435 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 VOS_ASSERT(0) ;
11437 return ;
11438 }
11439
11440 vos_mem_free(pWdaParams->wdaMsgParam) ;
11441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11442 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011443 //print a msg, nothing else to do
11444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11445 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011446 return ;
11447}
Jeff Johnson295189b2012-06-20 16:38:30 -070011448/*
11449 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11450 * Request to WDI to clear Receive Filters
11451 */
11452VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11453 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11454{
Jeff Johnson43971f52012-07-17 12:26:56 -070011455 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11457 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11458 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011460 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 if(NULL == pwdiRcvFltPktClearReqParamsType)
11462 {
11463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011464 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011465 VOS_ASSERT(0);
11466 return VOS_STATUS_E_NOMEM;
11467 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011468 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11469 if(NULL == pWdaParams)
11470 {
11471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011472 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011473 VOS_ASSERT(0);
11474 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11475 return VOS_STATUS_E_NOMEM;
11476 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11478 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011479 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11480 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11481 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11482 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011483
11484 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 /* Store Params pass it to WDI */
11486 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11487 pWdaParams->pWdaContext = pWDA;
11488 /* Store param pointer as passed in by caller */
11489 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11491 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11492 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011493 if(IS_WDI_STATUS_FAILURE(status))
11494 {
11495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11496 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11498 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 return CONVERT_WDI2VOS_STATUS(status) ;
11500}
11501#endif // WLAN_FEATURE_PACKET_FILTERING
11502
Jeff Johnson295189b2012-06-20 16:38:30 -070011503/*
11504 * FUNCTION: WDA_ProcessSetPowerParamsReq
11505 * Request to WDI to set power params
11506 */
11507VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11508 tSirSetPowerParamsReq *pPowerParams)
11509{
Jeff Johnson43971f52012-07-17 12:26:56 -070011510 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11512 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011515 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011516 if(NULL == pwdiSetPowerParamsReqInfo)
11517 {
11518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011520 VOS_ASSERT(0);
11521 return VOS_STATUS_E_NOMEM;
11522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11524 if(NULL == pWdaParams)
11525 {
11526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011528 VOS_ASSERT(0);
11529 vos_mem_free(pwdiSetPowerParamsReqInfo);
11530 return VOS_STATUS_E_NOMEM;
11531 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011532
Jeff Johnson295189b2012-06-20 16:38:30 -070011533
11534 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11535 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11537 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11539 pPowerParams->uListenInterval;
11540 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11541 pPowerParams->uBcastMcastFilter;
11542 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11543 pPowerParams->uEnableBET;
11544 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11545 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011547
Jeff Johnson295189b2012-06-20 16:38:30 -070011548 /* Store Params pass it to WDI */
11549 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11550 pWdaParams->pWdaContext = pWDA;
11551 /* Store param pointer as passed in by caller */
11552 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011553 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11554 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11555 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011556 if(IS_WDI_STATUS_FAILURE(status))
11557 {
11558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11559 "Failure in Set power params REQ WDI API, free all the memory " );
11560 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11561 vos_mem_free(pWdaParams->wdaMsgParam);
11562 pWdaParams->wdaWdiApiMsgParam = NULL;
11563 pWdaParams->wdaMsgParam = NULL;
11564 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011565 return CONVERT_WDI2VOS_STATUS(status) ;
11566}
11567
11568/*
11569 * FUNCTION: WDA_SetTmLevelRspCallback
11570 * Set TM Level response
11571 */
11572void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11573{
11574 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11575
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011577 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011578
11579 if(NULL == pWdaParams)
11580 {
11581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011582 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 VOS_ASSERT(0) ;
11584 return ;
11585 }
11586
11587 /* Dose not need to send notification to upper layer
11588 * Just free allocated resources */
11589 if( pWdaParams != NULL )
11590 {
11591 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11592 {
11593 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11594 }
11595 vos_mem_free(pWdaParams->wdaMsgParam) ;
11596 vos_mem_free(pWdaParams) ;
11597 }
11598}
11599
11600/*
11601 * FUNCTION: WDA_ProcessSetTmLevelReq
11602 * Set TM Level request
11603 */
11604VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11605 tAniSetTmLevelReq *setTmLevelReq)
11606{
11607 WDI_Status status = WDI_STATUS_SUCCESS ;
11608 tWDA_ReqParams *pWdaParams ;
11609 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11610 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11611 sizeof(WDI_SetTmLevelReqType)) ;
11612 if(NULL == wdiSetTmLevelReq)
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011615 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011616 VOS_ASSERT(0);
11617 return VOS_STATUS_E_NOMEM;
11618 }
11619
11620 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11621 if(NULL == pWdaParams)
11622 {
11623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011624 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011625 VOS_ASSERT(0);
11626 vos_mem_free(wdiSetTmLevelReq);
11627 return VOS_STATUS_E_NOMEM;
11628 }
11629
11630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011631 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011632
11633 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11634 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11635
11636 pWdaParams->pWdaContext = pWDA;
11637 pWdaParams->wdaMsgParam = setTmLevelReq;
11638 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11639
11640 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11641 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11642
11643 if(IS_WDI_STATUS_FAILURE(status))
11644 {
11645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11646 "Failure set thernal mitigation level free all the memory " );
11647 vos_mem_free(pWdaParams->wdaMsgParam) ;
11648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11649 vos_mem_free(pWdaParams) ;
11650 }
11651
11652 return CONVERT_WDI2VOS_STATUS(status) ;
11653}
11654
11655VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11656 tpTxControlParams pTxCtrlParam)
11657{
11658 VOS_STATUS wdaStatus;
11659
11660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011661 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011662 if( pTxCtrlParam == NULL )
11663 {
11664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011665 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011666 return VOS_STATUS_E_FAILURE;
11667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011668 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11669 {
11670 wdaStatus = WDA_SuspendDataTx(pWDA);
11671 }
11672 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11673 {
11674 wdaStatus = WDA_ResumeDataTx(pWDA);
11675 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011676 return wdaStatus;
11677}
11678
11679 /* FUNCTION WDA_featureCapsExchange
11680 * WDA API to invoke capability exchange between host and FW.
11681 */
11682void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11683{
11684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011685 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011686 WDI_featureCapsExchangeReq( NULL, pVosContext);
11687}
11688
11689 /* FUNCTION WDA_getHostWlanFeatCaps
11690 * Wrapper for WDI API, that will return if the feature (enum value).passed
11691 * to this API is supported or not in Host
11692 * return value
11693 * 0 - implies feature is NOT Supported
11694 * any non zero value - implies feature is SUPPORTED
11695 */
11696tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11697{
11698 return WDI_getHostWlanFeatCaps(featEnumValue);
11699}
11700
11701 /* FUNCTION WDA_getFwWlanFeatCaps
11702 * Wrapper for WDI API, that will return if the feature (enum value).passed
11703 * to this API is supported or not in FW
11704 * return value
11705 * 0 - implies feature is NOT Supported
11706 * any non zero value - implies feature is SUPPORTED
11707 */
11708tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11709{
11710 return WDI_getFwWlanFeatCaps(featEnumValue);
11711}
11712
11713/*
11714 * FUNCTION: WDA_shutdown
11715 * Shutdown WDA/WDI without handshaking with Riva.
11716 * Synchronous function.
11717 */
11718VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11719{
11720 WDI_Status wdiStatus;
11721 //tANI_U8 eventIdx = 0;
11722 VOS_STATUS status = VOS_STATUS_SUCCESS;
11723 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 if (NULL == pWDA)
11725 {
11726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011727 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011728 VOS_ASSERT(0);
11729 return VOS_STATUS_E_FAILURE;
11730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011731 /* FTM mode stay START_STATE */
11732 if( (WDA_READY_STATE != pWDA->wdaState) &&
11733 (WDA_INIT_STATE != pWDA->wdaState) &&
11734 (WDA_START_STATE != pWDA->wdaState) )
11735 {
11736 VOS_ASSERT(0);
11737 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011738
Jeff Johnson295189b2012-06-20 16:38:30 -070011739 if ( eDRIVER_TYPE_MFG != pWDA->driverMode )
11740 {
11741 wdaDestroyTimers(pWDA);
11742 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011743
Jeff Johnson295189b2012-06-20 16:38:30 -070011744 /* call WDI shutdown */
11745 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11747 {
11748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11749 "error in WDA Stop" );
11750 status = VOS_STATUS_E_FAILURE;
11751 }
11752 /* WDI stop is synchrnous, shutdown is complete when it returns */
11753 pWDA->wdaState = WDA_STOP_STATE;
11754
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 /* shutdown should perform the stop & close actions. */
11756 /* Destroy the event */
11757 status = vos_event_destroy(&pWDA->txFrameEvent);
11758 if(!VOS_IS_STATUS_SUCCESS(status))
11759 {
11760 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11761 "VOS Event destroy failed - status = %d\n", status);
11762 status = VOS_STATUS_E_FAILURE;
11763 }
11764 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
11765 if(!VOS_IS_STATUS_SUCCESS(status))
11766 {
11767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11768 "VOS Event destroy failed - status = %d\n", status);
11769 status = VOS_STATUS_E_FAILURE;
11770 }
11771 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
11772 if(!VOS_IS_STATUS_SUCCESS(status))
11773 {
11774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11775 "VOS Event destroy failed - status = %d\n", status);
11776 status = VOS_STATUS_E_FAILURE;
11777 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011778 /* free WDA context */
11779 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
11780 if ( !VOS_IS_STATUS_SUCCESS(status) )
11781 {
11782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11783 "error in WDA close " );
11784 status = VOS_STATUS_E_FAILURE;
11785 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011786 return status;
11787}
Jeff Johnsone7245742012-09-05 17:12:55 -070011788/*
11789 * FUNCTION: WDA_stopFailed
11790 * WDA stop failed
11791 */
11792
11793void WDA_stopFailed(v_PVOID_t pVosContext)
11794{
11795 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011796 if(pWDA == NULL)
11797 {
11798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11799 "Could not get the WDA Context pointer" );
11800 return;
11801 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011802 pWDA->needShutdown = TRUE;
11803}
11804/*
11805 * FUNCTION: WDA_needShutdown
11806 * WDA needs a shutdown
11807 */
11808
11809v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
11810{
11811 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011812 if(pWDA == NULL)
11813 {
11814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11815 "Could not get the WDA Context pointer" );
11816 return 0;
11817 }
11818 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070011819}
11820
Mohit Khanna4a70d262012-09-11 16:30:12 -070011821#ifdef WLAN_FEATURE_11AC
11822/*
11823 * FUNCTION: WDA_SetBeaconFilterReqCallback
11824 *
11825 */
11826void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
11827{
11828 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011830 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011831 if(NULL == pWdaParams)
11832 {
11833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011834 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011835 VOS_ASSERT(0) ;
11836 return ;
11837 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011838
Mohit Khanna4a70d262012-09-11 16:30:12 -070011839 vos_mem_free(pWdaParams->wdaMsgParam) ;
11840 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11841 vos_mem_free(pWdaParams) ;
11842 /*
11843 * No respone required for SetBeaconFilter req so just free the request
11844 * param here
11845 */
11846
11847 return ;
11848}
11849
11850VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
11851 tUpdateVHTOpMode *pData)
11852{
11853 WDI_Status status = WDI_STATUS_SUCCESS ;
11854 tWDA_ReqParams *pWdaParams ;
11855 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
11856 sizeof(WDI_UpdateVHTOpMode)) ;
11857 if(NULL == wdiTemp)
11858 {
11859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011860 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011861 VOS_ASSERT(0);
11862 return VOS_STATUS_E_NOMEM;
11863 }
11864 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11865 if(NULL == pWdaParams)
11866 {
11867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011868 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011869 VOS_ASSERT(0);
11870 vos_mem_free(wdiTemp);
11871 return VOS_STATUS_E_NOMEM;
11872 }
11873
11874 wdiTemp->opMode = pData->opMode;
11875 wdiTemp->staId = pData->staId;
11876
11877 pWdaParams->pWdaContext = pWDA;
11878 /* Store Req pointer, as this will be used for response */
11879 pWdaParams->wdaMsgParam = (void *)pData;
11880 /* store Params pass it to WDI */
11881 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
11882
11883 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
11884
11885 if(IS_WDI_STATUS_FAILURE(status))
11886 {
11887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11888 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
11889 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11890 vos_mem_free(pWdaParams->wdaMsgParam);
11891 vos_mem_free(pWdaParams);
11892 }
11893 return CONVERT_WDI2VOS_STATUS(status) ;
11894}
11895#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011896
11897/*==========================================================================
11898 FUNCTION WDA_TransportChannelDebug
11899
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070011900 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011901 Display Transport Channel debugging information
11902 User may request to display DXE channel snapshot
11903 Or if host driver detects any abnormal stcuk may display
11904
11905 PARAMETERS
11906 displaySnapshot : Dispaly DXE snapshot option
11907 enableStallDetect : Enable stall detect feature
11908 This feature will take effect to data performance
11909 Not integrate till fully verification
11910
11911 RETURN VALUE
11912 NONE
11913
11914===========================================================================*/
11915void WDA_TransportChannelDebug
11916(
11917 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011918 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011919)
11920{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011921 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011922 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011923}