blob: 826566c45fe7ac01e88ba3377ad5cbd98236c572 [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) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800462 if(VOS_STATUS_SUCCESS == status)
463 {
464 wdaContext->wdaTimersCreated = VOS_TRUE;
465 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 return status;
468}
469
Jeff Johnson295189b2012-06-20 16:38:30 -0700470/*
471 * FUNCTION: WDA_prepareConfigTLV
472 * Function to prepare CFG for DAL(WDA)
473 */
474VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
475 WDI_StartReqParamsType *wdiStartParams )
476{
477 /* get pMac to acess CFG data base */
478 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
479 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
480 tHalCfg *tlvStruct = NULL ;
481 tANI_U8 *tlvStructStart = NULL ;
482 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
483 v_PVOID_t *configParam;
484 tANI_U32 configParamSize;
485 tANI_U32 *configDataValue;
486 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 if ((NULL == pMac)||(NULL == wdaContext))
488 {
489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700490 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 VOS_ASSERT(0);
492 return VOS_STATUS_E_FAILURE;
493 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
495 WNI_CFG_STA_ID_LEN +
496 WNI_CFG_EDCA_WME_ACBK_LEN +
497 WNI_CFG_EDCA_WME_ACBE_LEN +
498 WNI_CFG_EDCA_WME_ACVI_LEN +
499 WNI_CFG_EDCA_WME_ACVO_LEN +
500 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 /* malloc memory for all configs in one shot */
502 configParam = vos_mem_malloc(configParamSize);
503
504 if(NULL == configParam )
505 {
506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700507 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700508 VOS_ASSERT(0) ;
509 return VOS_STATUS_E_NOMEM;
510 }
511 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700513 tlvStruct = (tHalCfg *)configParam;
514 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700515 /* TODO: Remove Later */
516 /* QWLAN_HAL_CFG_STA_ID */
517 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
518 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
519 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
520 eSIR_SUCCESS)
521 {
522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
523 "Failed to get value for WNI_CFG_STA_ID");
524 goto handle_failure;
525 }
526 tlvStruct->length = strLength ;
527 /* calculate the pad bytes to have the CFG in aligned format */
528 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
529 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
531 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700532 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
533 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
534 tlvStruct->length = sizeof(tANI_U32);
535 configDataValue = (tANI_U32 *)(tlvStruct + 1);
536 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
537 != eSIR_SUCCESS)
538 {
539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
540 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
541 goto handle_failure;
542 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700543 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
544 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
546 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
547 tlvStruct->length = sizeof(tANI_U32);
548 configDataValue = (tANI_U32 *)(tlvStruct + 1);
549 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
550 eSIR_SUCCESS)
551 {
552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
553 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
554 goto handle_failure;
555 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
557 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700558 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
559 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
560 tlvStruct->length = sizeof(tANI_U32);
561 configDataValue = (tANI_U32 *)(tlvStruct + 1);
562 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
563 != eSIR_SUCCESS)
564 {
565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
566 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
567 goto handle_failure;
568 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700569 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
570 + sizeof(tHalCfg) + tlvStruct->length)) ;
571
572 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
573 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
574 tlvStruct->length = sizeof(tANI_U32);
575 configDataValue = (tANI_U32 *)(tlvStruct + 1);
576 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
577 configDataValue ) != eSIR_SUCCESS)
578 {
579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
580 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
581 goto handle_failure;
582 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700583 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
584 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700585 /* QWLAN_HAL_CFG_CAL_PERIOD */
586 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
587 tlvStruct->length = sizeof(tANI_U32);
588 configDataValue = (tANI_U32 *)(tlvStruct + 1);
589 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
590 != eSIR_SUCCESS)
591 {
592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
593 "Failed to get value for WNI_CFG_CAL_PERIOD");
594 goto handle_failure;
595 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700596 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
597 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700598 /* QWLAN_HAL_CFG_CAL_CONTROL */
599 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
600 tlvStruct->length = sizeof(tANI_U32);
601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
602 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
603 != eSIR_SUCCESS)
604 {
605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
606 "Failed to get value for WNI_CFG_CAL_CONTROL");
607 goto handle_failure;
608 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700609 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
610 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700611 /* QWLAN_HAL_CFG_PROXIMITY */
612 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
613 tlvStruct->length = sizeof(tANI_U32);
614 configDataValue = (tANI_U32 *)(tlvStruct + 1);
615 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
616 != eSIR_SUCCESS)
617 {
618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
619 "Failed to get value for WNI_CFG_PROXIMITY");
620 goto handle_failure;
621 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700622 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
623 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700624 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
625 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
626 tlvStruct->length = sizeof(tANI_U32);
627 configDataValue = (tANI_U32 *)(tlvStruct + 1);
628 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
629 != eSIR_SUCCESS)
630 {
631 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
632 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
633 goto handle_failure;
634 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700635 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
636 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700637 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
638 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
639 tlvStruct->length = sizeof(tANI_U32);
640 configDataValue = (tANI_U32 *)(tlvStruct + 1);
641 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
642 eSIR_SUCCESS)
643 {
644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
645 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
646 goto handle_failure;
647 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700648 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
649 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700650 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
651 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
652 tlvStruct->length = sizeof(tANI_U32);
653 configDataValue = (tANI_U32 *)(tlvStruct + 1);
654 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
655 configDataValue ) != eSIR_SUCCESS)
656 {
657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
658 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
659 goto handle_failure;
660 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700661 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
662 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700663 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
664 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
665 tlvStruct->length = sizeof(tANI_U32);
666 configDataValue = (tANI_U32 *)(tlvStruct + 1);
667 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
668 eSIR_SUCCESS)
669 {
670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
671 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
672 goto handle_failure;
673 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700674 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
675 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700676 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
677 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
678 tlvStruct->length = sizeof(tANI_U32);
679 configDataValue = (tANI_U32 *)(tlvStruct + 1);
680 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
681 eSIR_SUCCESS)
682 {
683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
684 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
685 goto handle_failure;
686 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700687 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
688 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700689 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
690 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
691 tlvStruct->length = sizeof(tANI_U32);
692 configDataValue = (tANI_U32 *)(tlvStruct + 1);
693 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
694 eSIR_SUCCESS)
695 {
696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
697 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
698 goto handle_failure;
699 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700700 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
701 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700702 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
703 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
704 tlvStruct->length = sizeof(tANI_U32);
705 configDataValue = (tANI_U32 *)(tlvStruct + 1);
706 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
707 configDataValue ) != eSIR_SUCCESS)
708 {
709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
710 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
711 goto handle_failure;
712 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700713 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
714 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700715 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
716 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
717 tlvStruct->length = sizeof(tANI_U32);
718 configDataValue = (tANI_U32 *)(tlvStruct + 1);
719 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
720 configDataValue ) != eSIR_SUCCESS)
721 {
722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
723 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
724 goto handle_failure;
725 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700726 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
727 + sizeof(tHalCfg) + tlvStruct->length));
728
729 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
730 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
731 tlvStruct->length = sizeof(tANI_U32);
732 configDataValue = (tANI_U32 *)(tlvStruct + 1);
733 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
734 configDataValue ) != eSIR_SUCCESS)
735 {
736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
737 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
738 goto handle_failure;
739 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700740 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
741 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700742 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
743 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
744 tlvStruct->length = sizeof(tANI_U32);
745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
746 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
747 configDataValue ) != eSIR_SUCCESS)
748 {
749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
750 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
751 goto handle_failure;
752 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700753 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
754 + sizeof(tHalCfg) + tlvStruct->length));
755
756 /* QWLAN_HAL_CFG_FIXED_RATE */
757 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
758 tlvStruct->length = sizeof(tANI_U32);
759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
760 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
761 != eSIR_SUCCESS)
762 {
763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
764 "Failed to get value for WNI_CFG_FIXED_RATE");
765 goto handle_failure;
766 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700767 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
768 + sizeof(tHalCfg) + tlvStruct->length));
769
770 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
771 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
772 tlvStruct->length = sizeof(tANI_U32);
773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
774 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
775 != eSIR_SUCCESS)
776 {
777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
778 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
779 goto handle_failure;
780 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
782 + sizeof(tHalCfg) + tlvStruct->length));
783
784 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
785 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
786 tlvStruct->length = sizeof(tANI_U32);
787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
788 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
789 configDataValue ) != eSIR_SUCCESS)
790 {
791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
792 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
793 goto handle_failure;
794 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
796 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
798 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
799 tlvStruct->length = sizeof(tANI_U32);
800 configDataValue = (tANI_U32 *)(tlvStruct + 1);
801 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
802 configDataValue ) != eSIR_SUCCESS)
803 {
804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
805 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
806 goto handle_failure;
807 }
808 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
809 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700810 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
811 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
812 tlvStruct->length = sizeof(tANI_U32);
813 configDataValue = (tANI_U32 *)(tlvStruct + 1);
814 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
815 configDataValue ) != eSIR_SUCCESS)
816 {
817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
818 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
819 goto handle_failure;
820 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700821 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
822 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700823 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
824 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
825 tlvStruct->length = sizeof(tANI_U32);
826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
827 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
828 configDataValue ) != eSIR_SUCCESS)
829 {
830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
831 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
832 goto handle_failure;
833 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700834 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
835 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700836 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
837 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
838 tlvStruct->length = sizeof(tANI_U32);
839 configDataValue = (tANI_U32 *)(tlvStruct + 1);
840 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
841 configDataValue ) != eSIR_SUCCESS)
842 {
843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
844 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
845 goto handle_failure;
846 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700847 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
848 + sizeof(tHalCfg) + tlvStruct->length);
849
850#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
851 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
852 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
853 tlvStruct->length = sizeof(tANI_U32);
854 configDataValue = (tANI_U32 *)(tlvStruct + 1);
855 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
856 configDataValue ) != eSIR_SUCCESS)
857 {
858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
859 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
860 goto handle_failure;
861 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700862 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
863 + sizeof(tHalCfg) + tlvStruct->length);
864#endif
865 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
866 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
867 tlvStruct->length = sizeof(tANI_U32);
868 configDataValue = (tANI_U32 *)(tlvStruct + 1);
869 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
870 configDataValue ) != eSIR_SUCCESS)
871 {
872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
873 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
874 goto handle_failure;
875 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700876 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
877 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
879 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
880 tlvStruct->length = sizeof(tANI_U32);
881 configDataValue = (tANI_U32 *)(tlvStruct + 1);
882 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
883 eSIR_SUCCESS)
884 {
885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
886 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
887 goto handle_failure;
888 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700889 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
890 + sizeof(tHalCfg) + tlvStruct->length);
891
892 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
893 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
894 tlvStruct->length = sizeof(tANI_U32);
895 configDataValue = (tANI_U32 *)(tlvStruct + 1);
896 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
897 configDataValue ) != eSIR_SUCCESS)
898 {
899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
900 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
901 goto handle_failure;
902 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700903 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
904 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700905 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
906 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
907 tlvStruct->length = sizeof(tANI_U32);
908 configDataValue = (tANI_U32 *)(tlvStruct + 1);
909 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
910 configDataValue ) != eSIR_SUCCESS)
911 {
912 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
913 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
914 goto handle_failure;
915 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700916 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
917 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700918 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
919 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
920 tlvStruct->length = sizeof(tANI_U32);
921 configDataValue = (tANI_U32 *)(tlvStruct + 1);
922 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
923 configDataValue ) != eSIR_SUCCESS)
924 {
925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
926 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
927 goto handle_failure;
928 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700929 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
930 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700931 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
932 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
933 tlvStruct->length = sizeof(tANI_U32);
934 configDataValue = (tANI_U32 *)(tlvStruct + 1);
935 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
936 configDataValue ) != eSIR_SUCCESS)
937 {
938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
939 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
940 goto handle_failure;
941 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700942 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
943 + sizeof(tHalCfg) + tlvStruct->length);
944
945 /* QWLAN_HAL_CFG_STATS_PERIOD */
946 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
947 tlvStruct->length = sizeof(tANI_U32);
948 configDataValue = (tANI_U32 *)(tlvStruct + 1);
949 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
950 eSIR_SUCCESS)
951 {
952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
953 "Failed to get value for WNI_CFG_STATS_PERIOD");
954 goto handle_failure;
955 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700956 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
957 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700958 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
959 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
960 tlvStruct->length = sizeof(tANI_U32);
961 configDataValue = (tANI_U32 *)(tlvStruct + 1);
962 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
963 eSIR_SUCCESS)
964 {
965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
966 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
967 goto handle_failure;
968 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700969 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
970 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700971 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
972 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
973 tlvStruct->length = sizeof(tANI_U32);
974 configDataValue = (tANI_U32 *)(tlvStruct + 1);
975 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
976 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700977 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
978 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700979 /* QWLAN_HAL_CFG_DTIM_PERIOD */
980 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
981 tlvStruct->length = sizeof(tANI_U32);
982 configDataValue = (tANI_U32 *)(tlvStruct + 1);
983 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
984 != eSIR_SUCCESS)
985 {
986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
987 "Failed to get value for WNI_CFG_DTIM_PERIOD");
988 goto handle_failure;
989 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700990 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
991 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
993 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
994 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
995 configDataValue = (tANI_U32 *)(tlvStruct + 1);
996 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
997 &strLength) != eSIR_SUCCESS)
998 {
999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1000 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1001 goto handle_failure;
1002 }
1003 tlvStruct->length = strLength;
1004 /* calculate the pad bytes to have the CFG in aligned format */
1005 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1006 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001007 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1008 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001009 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1010 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1011 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1012 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1013 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1014 &strLength) != eSIR_SUCCESS)
1015 {
1016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1017 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1018 goto handle_failure;
1019 }
1020 tlvStruct->length = strLength;
1021 /* calculate the pad bytes to have the CFG in aligned format */
1022 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1023 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1025 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1027 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1028 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1030 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1031 &strLength) != eSIR_SUCCESS)
1032 {
1033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1034 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1035 goto handle_failure;
1036 }
1037 tlvStruct->length = strLength;
1038 /* calculate the pad bytes to have the CFG in aligned format */
1039 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1040 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1044 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1045 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1048 &strLength) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1052 goto handle_failure;
1053 }
1054 tlvStruct->length = strLength;
1055 /* calculate the pad bytes to have the CFG in aligned format */
1056 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1057 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1061 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1062 tlvStruct->length = sizeof(tANI_U32);
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1065 != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1069 goto handle_failure;
1070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001071 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1072 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001073 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1074 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1075 tlvStruct->length = sizeof(tANI_U32);
1076 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1077 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1078 != eSIR_SUCCESS)
1079 {
1080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1081 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1082 goto handle_failure;
1083 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001084 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1085 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001086 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1087 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1088 tlvStruct->length = sizeof(tANI_U32);
1089 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1090 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1091 != eSIR_SUCCESS)
1092 {
1093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1094 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1095 goto handle_failure;
1096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001097 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1098 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001099 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1100 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1101 tlvStruct->length = sizeof(tANI_U32);
1102 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1103 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1104 != eSIR_SUCCESS)
1105 {
1106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1107 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1108 goto handle_failure;
1109 }
1110 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1111 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001112 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1113 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1114 tlvStruct->length = sizeof(tANI_U32);
1115 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1116 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1117 != eSIR_SUCCESS)
1118 {
1119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1120 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1121 goto handle_failure;
1122 }
1123 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1124 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001125 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1126 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1127 tlvStruct->length = sizeof(tANI_U32);
1128 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1129 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1130 != eSIR_SUCCESS)
1131 {
1132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1133 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1134 goto handle_failure;
1135 }
1136 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1137 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001138 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1139 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1140 tlvStruct->length = sizeof(tANI_U32);
1141 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1142 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1143 != eSIR_SUCCESS)
1144 {
1145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1146 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1147 goto handle_failure;
1148 }
1149 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1150 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001151 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1152 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1153 tlvStruct->length = sizeof(tANI_U32);
1154 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1155 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1156 != eSIR_SUCCESS)
1157 {
1158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1159 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1160 goto handle_failure;
1161 }
1162 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1163 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001164 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1165 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1166 tlvStruct->length = sizeof(tANI_U32);
1167 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1168 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1169 != eSIR_SUCCESS)
1170 {
1171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1172 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1173 goto handle_failure;
1174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001175 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1176 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001177 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1178 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1179 tlvStruct->length = sizeof(tANI_U32);
1180 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1181 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1182 != eSIR_SUCCESS)
1183 {
1184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1185 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1186 goto handle_failure;
1187 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001188 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1189 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001190 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1191 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1192 tlvStruct->length = sizeof(tANI_U32);
1193 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1194 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1195 != eSIR_SUCCESS)
1196 {
1197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1198 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1199 goto handle_failure;
1200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001201 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1202 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001203 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1204 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1205 * into FW, so the parameters are added here.
1206 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1208 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1209 tlvStruct->length = sizeof(tANI_U32);
1210 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1211 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1212 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1213 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001214 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1215 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1216 tlvStruct->length = sizeof(tANI_U32);
1217 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1218 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1222 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1226 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1227 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001228 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1229 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1230 tlvStruct->length = sizeof(tANI_U32);
1231 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1232 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1233 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1234 + sizeof(tHalCfg) + tlvStruct->length) ;
1235
1236 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1237 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1238 tlvStruct->length = sizeof(tANI_U32);
1239 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1240 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1241 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1242 + sizeof(tHalCfg) + tlvStruct->length) ;
1243
1244 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1245 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1246 tlvStruct->length = sizeof(tANI_U32);
1247 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1248 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1249 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1250 + sizeof(tHalCfg) + tlvStruct->length) ;
1251
1252 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1253 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1254 tlvStruct->length = sizeof(tANI_U32);
1255 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1256 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1257 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1258 + sizeof(tHalCfg) + tlvStruct->length) ;
1259
1260 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1261 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1262 tlvStruct->length = sizeof(tANI_U32);
1263 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1264 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1265 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1266 + sizeof(tHalCfg) + tlvStruct->length) ;
1267
1268 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1269 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1270 tlvStruct->length = sizeof(tANI_U32);
1271 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1272 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1273 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1274 + sizeof(tHalCfg) + tlvStruct->length) ;
1275
1276 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1277 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1278 tlvStruct->length = sizeof(tANI_U32);
1279 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1280 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1281 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1282 + sizeof(tHalCfg) + tlvStruct->length) ;
1283
1284 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1285 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1286 tlvStruct->length = sizeof(tANI_U32);
1287 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1288 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1289 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1290 + sizeof(tHalCfg) + tlvStruct->length) ;
1291
1292 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1293 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1294 tlvStruct->length = sizeof(tANI_U32);
1295 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1296 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1297 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1298 + sizeof(tHalCfg) + tlvStruct->length) ;
1299
1300 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1301 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1302 tlvStruct->length = sizeof(tANI_U32);
1303 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1304 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1305 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1306 + sizeof(tHalCfg) + tlvStruct->length) ;
1307
1308 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1309 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1310 tlvStruct->length = sizeof(tANI_U32);
1311 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1312 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1313 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1314 + sizeof(tHalCfg) + tlvStruct->length) ;
1315
1316 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1317 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1318 tlvStruct->length = sizeof(tANI_U32);
1319 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1320 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1321 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1322 + sizeof(tHalCfg) + tlvStruct->length) ;
1323
1324 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1325 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1326 tlvStruct->length = sizeof(tANI_U32);
1327 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1328 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1329 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1330 + sizeof(tHalCfg) + tlvStruct->length) ;
1331
1332 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001333 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1334 tlvStruct->length = sizeof(tANI_U32);
1335 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1336 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1337 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1338 wcnssCompiledApiVersion.minor,
1339 wcnssCompiledApiVersion.version,
1340 wcnssCompiledApiVersion.revision);
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
Jeff Johnsond13512a2012-07-17 11:42:19 -07001344 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1345 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1349 configDataValue ) != eSIR_SUCCESS)
1350 {
1351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1352 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1353 goto handle_failure;
1354 }
1355
1356 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1357 + sizeof(tHalCfg) + tlvStruct->length) ;
1358 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1359 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1363 configDataValue ) != eSIR_SUCCESS)
1364 {
1365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1366 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1367 goto handle_failure;
1368 }
1369
1370 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1371 + sizeof(tHalCfg) + tlvStruct->length) ;
1372
1373 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1374 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1375 tlvStruct->length = sizeof(tANI_U32);
1376 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1377 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1378 != eSIR_SUCCESS)
1379 {
1380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1381 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1382 goto handle_failure;
1383 }
1384
1385 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1386 + sizeof(tHalCfg) + tlvStruct->length) ;
1387
Jeff Johnson295189b2012-06-20 16:38:30 -07001388 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001389#ifdef WLAN_DEBUG
1390 {
1391 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001392 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1393 "****** Dumping CFG TLV ***** ");
1394 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1395 {
1396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1397 "%02x %02x %02x %02x %02x %02x %02x %02x",
1398 tlvStructStart[i],
1399 tlvStructStart[i+1],
1400 tlvStructStart[i+2],
1401 tlvStructStart[i+3],
1402 tlvStructStart[i+4],
1403 tlvStructStart[i+5],
1404 tlvStructStart[i+6],
1405 tlvStructStart[i+7]);
1406 }
1407 /* Dump the bytes in the last line*/
1408 for (; i < wdiStartParams->usConfigBufferLen; i++)
1409 {
1410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1411 "%02x ",tlvStructStart[i]);
1412 }
1413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1414 "**************************** ");
1415 }
1416#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001417 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001418handle_failure:
1419 vos_mem_free(configParam);
1420 return VOS_STATUS_E_FAILURE;
1421}
Jeff Johnson295189b2012-06-20 16:38:30 -07001422/*
1423 * FUNCTION: WDA_wdiCompleteCB
1424 * call the voss call back function
1425 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001426void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001427{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1429 tWDA_CbContext *wdaContext;
1430
1431 if(NULL == pWdaParams)
1432 {
1433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001434 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001435 VOS_ASSERT(0) ;
1436 return ;
1437 }
1438
1439 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1440
Jeff Johnson295189b2012-06-20 16:38:30 -07001441 if (NULL == wdaContext)
1442 {
1443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001444 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 return ;
1446 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001447
Jeff Johnson295189b2012-06-20 16:38:30 -07001448 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001449 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001450 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001451 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001453 vos_mem_free(pWdaParams);
1454
Jeff Johnson295189b2012-06-20 16:38:30 -07001455 if(WDI_STATUS_SUCCESS != status)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "WDI stop callback returned failure" );
1459 VOS_ASSERT(0) ;
1460 }
1461 else
1462 {
1463 wdaContext->wdaState = WDA_STOP_STATE;
1464 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001465
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001467 vos_WDAComplete_cback(wdaContext->pVosContext);
1468
Jeff Johnson295189b2012-06-20 16:38:30 -07001469 return ;
1470}
Jeff Johnson295189b2012-06-20 16:38:30 -07001471/*
1472 * FUNCTION: WDA_stop
1473 * call WDI_stop
1474 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001475VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1476{
1477 WDI_Status wdiStatus;
1478 VOS_STATUS status = VOS_STATUS_SUCCESS;
1479 WDI_StopReqParamsType *wdiStopReq;
1480 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001481 tWDA_ReqParams *pWdaParams ;
1482
Jeff Johnson295189b2012-06-20 16:38:30 -07001483 if (NULL == pWDA)
1484 {
1485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001486 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001487 VOS_ASSERT(0);
1488 return VOS_STATUS_E_FAILURE;
1489 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001490 if (pWDA->wdiFailed == true)
1491 {
1492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001493 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001494 return VOS_STATUS_E_ALREADY;
1495 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001496
Jeff Johnson295189b2012-06-20 16:38:30 -07001497 /* FTM mode stay START_STATE */
1498 if( (WDA_READY_STATE != pWDA->wdaState) &&
1499 (WDA_INIT_STATE != pWDA->wdaState) &&
1500 (WDA_START_STATE != pWDA->wdaState) )
1501 {
1502 VOS_ASSERT(0);
1503 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001504 wdiStopReq = (WDI_StopReqParamsType *)
1505 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1506 if(NULL == wdiStopReq)
1507 {
1508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001510 VOS_ASSERT(0);
1511 return VOS_STATUS_E_NOMEM;
1512 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001513
Jeff Johnson295189b2012-06-20 16:38:30 -07001514 wdiStopReq->wdiStopReason = reason;
1515 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001516
1517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1518 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001519 {
1520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001522 VOS_ASSERT(0);
1523 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001524 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001525 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001526
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001527 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1528 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 {
1530 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001531 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001532 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001533
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001534 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1535 pWdaParams->wdaMsgParam = NULL;
1536 pWdaParams->pWdaContext = pWDA;
1537
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 /* call WDI stop */
1539 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001540 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1541
Jeff Johnson295189b2012-06-20 16:38:30 -07001542 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1543 {
1544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1545 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001546 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1547 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001548 status = VOS_STATUS_E_FAILURE;
1549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001550 return status;
1551}
Jeff Johnson295189b2012-06-20 16:38:30 -07001552/*
1553 * FUNCTION: WDA_close
1554 * call WDI_close and free the WDA context
1555 */
1556VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1557{
Jeff Johnson43971f52012-07-17 12:26:56 -07001558 VOS_STATUS status = VOS_STATUS_SUCCESS;
1559 WDI_Status wstatus;
1560 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001561 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001562 if (NULL == wdaContext)
1563 {
1564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001565 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 return VOS_STATUS_E_FAILURE;
1567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001568 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1569 (WDA_STOP_STATE != wdaContext->wdaState))
1570 {
1571 VOS_ASSERT(0);
1572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001573 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001574 wstatus = WDI_Close();
1575 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001576 {
1577 status = VOS_STATUS_E_FAILURE;
1578 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001579 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001581 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1582 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 {
1584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1585 "WDI Sync Event destroy failed - status = %d\n", status);
1586 status = VOS_STATUS_E_FAILURE;
1587 }
1588
Jeff Johnson43971f52012-07-17 12:26:56 -07001589 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
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->suspendDataTxEvent);
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 Johnson43971f52012-07-17 12:26:56 -07001603 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001604 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001605 {
1606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1607 "VOS Event destroy failed - status = %d\n", status);
1608 status = VOS_STATUS_E_FAILURE;
1609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001610 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001611 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001612 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001613 {
1614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1615 "error in WDA close " );
1616 status = VOS_STATUS_E_FAILURE;
1617 }
1618 return status;
1619}
Jeff Johnson295189b2012-06-20 16:38:30 -07001620/*
1621 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1622 * returns 1 if the compiled version is greater than or equal to the input version
1623 */
1624
1625uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1626{
1627 VOS_STATUS status = VOS_STATUS_SUCCESS;
1628 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1629 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001630 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001631 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1632 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1633 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1634 (compiledVersion.revision >= revision)))
1635 return 1;
1636 else
1637 return 0;
1638}
Jeff Johnson295189b2012-06-20 16:38:30 -07001639/*
1640 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1641 * returns 1 if the compiled version is greater than or equal to the input version
1642 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001643uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1644{
1645 VOS_STATUS status = VOS_STATUS_SUCCESS;
1646 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1647 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001649 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1650 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1651 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1652 (reportedVersion.revision >= revision)))
1653 return 1;
1654 else
1655 return 0;
1656}
Jeff Johnson295189b2012-06-20 16:38:30 -07001657/*
1658 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1659 * Returns the version of the WCNSS WLAN API with which the HOST
1660 * device driver was compiled
1661 */
1662VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1663 tSirVersionType *pVersion)
1664{
1665 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001666 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001667 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 if ((NULL == pvosGCtx) || (NULL == pVersion))
1669 {
1670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001671 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 VOS_ASSERT(0);
1673 return VOS_STATUS_E_FAILURE;
1674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001675 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1676 if (NULL == pWDA )
1677 {
1678 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001679 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001680 VOS_ASSERT(0);
1681 return VOS_STATUS_E_FAILURE;
1682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001683 *pVersion = pWDA->wcnssWlanCompiledVersion;
1684 return VOS_STATUS_SUCCESS;
1685}
Jeff Johnson295189b2012-06-20 16:38:30 -07001686/*
1687 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1688 * Returns the version of the WCNSS WLAN API with which the WCNSS
1689 * device driver was compiled
1690 */
1691VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1692 tSirVersionType *pVersion)
1693{
1694 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001695 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001696 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001697 if ((NULL == pvosGCtx) || (NULL == pVersion))
1698 {
1699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001700 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 VOS_ASSERT(0);
1702 return VOS_STATUS_E_FAILURE;
1703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001704 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1705 if (NULL == pWDA )
1706 {
1707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001708 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001709 VOS_ASSERT(0);
1710 return VOS_STATUS_E_FAILURE;
1711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001712 *pVersion = pWDA->wcnssWlanReportedVersion;
1713 return VOS_STATUS_SUCCESS;
1714}
Jeff Johnson295189b2012-06-20 16:38:30 -07001715/*
1716 * FUNCTION: WDA_GetWcnssSoftwareVersion
1717 * Returns the WCNSS Software version string
1718 */
1719VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1720 tANI_U8 *pVersion,
1721 tANI_U32 versionBufferSize)
1722{
1723 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001724 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001725 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001726 if ((NULL == pvosGCtx) || (NULL == pVersion))
1727 {
1728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001729 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 VOS_ASSERT(0);
1731 return VOS_STATUS_E_FAILURE;
1732 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001733 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1734 if (NULL == pWDA )
1735 {
1736 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001737 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001738 VOS_ASSERT(0);
1739 return VOS_STATUS_E_FAILURE;
1740 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001741 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1742 return VOS_STATUS_SUCCESS;
1743}
Jeff Johnson295189b2012-06-20 16:38:30 -07001744/*
1745 * FUNCTION: WDA_GetWcnssHardwareVersion
1746 * Returns the WCNSS Hardware version string
1747 */
1748VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1749 tANI_U8 *pVersion,
1750 tANI_U32 versionBufferSize)
1751{
1752 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001754 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001755 if ((NULL == pvosGCtx) || (NULL == pVersion))
1756 {
1757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001758 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 VOS_ASSERT(0);
1760 return VOS_STATUS_E_FAILURE;
1761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001762 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1763 if (NULL == pWDA )
1764 {
1765 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001766 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001767 VOS_ASSERT(0);
1768 return VOS_STATUS_E_FAILURE;
1769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001770 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1771 return VOS_STATUS_SUCCESS;
1772}
Jeff Johnson295189b2012-06-20 16:38:30 -07001773/*
1774 * FUNCTION: WDA_WniCfgDnld
1775 * Trigger CFG Download
1776 */
1777VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1778{
1779 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001781 v_VOID_t *pFileImage = NULL;
1782 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001783 v_VOID_t *pCfgBinary = NULL;
1784 v_SIZE_t cbCfgBinarySize = 0;
1785
1786 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 if (NULL == pMac )
1788 {
1789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001790 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 VOS_ASSERT(0);
1792 return VOS_STATUS_E_FAILURE;
1793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001794 /* get the number of bytes in the CFG Binary... */
1795 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1796 &cbFileImageSize );
1797 if ( VOS_STATUS_E_NOMEM != vosStatus )
1798 {
1799 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1800 "Error obtaining binary size" );
1801 goto fail;
1802 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 // malloc a buffer to read in the Configuration binary file.
1804 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001805 if ( NULL == pFileImage )
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1808 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1809 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 vosStatus = VOS_STATUS_E_NOMEM;
1811 goto fail;
1812 }
1813
1814 /* Get the entire CFG file image... */
1815 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1816 &cbFileImageSize );
1817 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1818 {
1819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1820 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1821 cbFileImageSize );
1822 goto fail;
1823 }
1824
1825 /*
1826 * Validate the binary image. This function will return a pointer
1827 * and length where the CFG binary is located within the binary image file.
1828 */
1829 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1830 &pCfgBinary, &cbCfgBinarySize );
1831 if ( VOS_FALSE == bStatus )
1832 {
1833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1834 "Error: Cannot find STA CFG in binary image file" );
1835 vosStatus = VOS_STATUS_E_FAILURE;
1836 goto fail;
1837 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001838 /*
1839 * TODO: call the config download function
1840 * for now calling the existing cfg download API
1841 */
1842 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001843 if( pFileImage != NULL )
1844 {
1845 vos_mem_free( pFileImage );
1846 }
1847 return vosStatus;
1848
1849fail:
1850 if(pCfgBinary != NULL)
1851 vos_mem_free( pFileImage );
1852
1853 return vosStatus;
1854}
Jeff Johnson295189b2012-06-20 16:38:30 -07001855/* -----------------------------------------------------------------
1856 * WDI interface
1857 * -----------------------------------------------------------------
1858 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/*
1860 * FUNCTION: WDA_suspendDataTxCallback
1861 * call back function called from TL after suspend Transmission
1862 */
1863VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1864 v_U8_t* ucSTAId,
1865 VOS_STATUS vosStatus)
1866{
1867 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001869 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001870 if (NULL == pWDA )
1871 {
1872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001873 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 VOS_ASSERT(0);
1875 return VOS_STATUS_E_FAILURE;
1876 }
1877 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1878 {
1879 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1880 }
1881 else
1882 {
1883 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001885 /* Trigger the event to bring the WDA TL suspend function to come
1886 * out of wait*/
1887 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1888 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1891 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001893 /* If TL suspended had timedout before this callback was called, resume back
1894 * TL.*/
1895 if (pWDA->txSuspendTimedOut)
1896 {
1897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1898 "Late TLSuspendCallback, resuming TL back again\n");
1899 WDA_ResumeDataTx(pWDA);
1900 pWDA->txSuspendTimedOut = FALSE;
1901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001902 return VOS_STATUS_SUCCESS;
1903}
Jeff Johnson295189b2012-06-20 16:38:30 -07001904/*
1905 * FUNCTION: WDA_suspendDataTx
1906 * Update TL to suspend the data Transmission
1907 */
1908VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1909{
1910 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1911 tANI_U8 eventIdx = 0;
1912 tANI_U8 ucSTAId = 0;
1913
1914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001915 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001916 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 if (pWDA->txSuspendTimedOut)
1918 {
1919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1920 "TL suspend timedout previously, CB not called yet\n");
1921 return status;
1922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001923 /* Reset the event to be not signalled */
1924 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1925 if(!VOS_IS_STATUS_SUCCESS(status))
1926 {
1927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1928 "VOS Event reset failed - status = %d\n",status);
1929 return VOS_STATUS_E_FAILURE;
1930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 /*Indicate TL to suspend transmission for all Sta Id */
1932 ucSTAId = WLAN_ALL_STA;
1933 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1934 WDA_SuspendDataTxCallback);
1935 if(status != VOS_STATUS_SUCCESS)
1936 {
1937 return status;
1938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001939 /* Wait for the event to be set by the TL, to get the response of
1940 * suspending the TX queues, this event should be set by the Callback
1941 * function called by TL*/
1942 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1943 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1944 if(!VOS_IS_STATUS_SUCCESS(status))
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1947 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001948 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001949 /* Set this flag to true when TL suspend times out, so that when TL
1950 * suspend eventually happens and calls the callback, TL can be resumed
1951 * right away by looking at this flag when true.*/
1952 pWDA->txSuspendTimedOut = TRUE;
1953 }
1954 else
1955 {
1956 pWDA->txSuspendTimedOut = FALSE;
1957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001958 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1959 {
1960 status = VOS_STATUS_SUCCESS;
1961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001962 return status;
1963}
Jeff Johnson295189b2012-06-20 16:38:30 -07001964/*
1965 * FUNCTION: WDA_resumeDataTx
1966 * Update TL to resume the data Transmission
1967 */
1968VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1969{
1970 VOS_STATUS status = VOS_STATUS_SUCCESS;
1971 tANI_U8 ucSTAId = 0;
1972
1973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001974 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001975 ucSTAId = WLAN_ALL_STA;
1976 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1977 return status;
1978}
Jeff Johnson295189b2012-06-20 16:38:30 -07001979/*
1980 * FUNCTION: WDA_InitScanReqCallback
1981 * Trigger Init SCAN callback
1982 */
1983void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
1984{
1985 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1986 tWDA_CbContext *pWDA;
1987 tInitScanParams *pWDA_ScanParam ;
1988 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001990 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001991 if(NULL == pWdaParams)
1992 {
1993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001994 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 VOS_ASSERT(0) ;
1996 return ;
1997 }
1998 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
1999 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002000 if(NULL == pWDA_ScanParam)
2001 {
2002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002003 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002004 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002005 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2006 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002007 return ;
2008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 if(WDI_STATUS_SUCCESS != wdiStatus)
2010 {
2011 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002012 if(VOS_STATUS_SUCCESS != status)
2013 {
2014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002015 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 }
2017 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002018 /* free WDI command buffer */
2019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002021
Jeff Johnson295189b2012-06-20 16:38:30 -07002022
2023 /* assign status to scan params */
2024 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 /* send SCAN RSP message back to PE */
2026 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 return ;
2028}
2029
2030/*
2031 * FUNCTION: WDA_ProcessInitScanReq
2032 * Trigger Init SCAN in DAL
2033 */
2034VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2035 tInitScanParams *initScanParams)
2036{
2037 WDI_Status status = WDI_STATUS_SUCCESS ;
2038 WDI_InitScanReqParamsType *wdiInitScanParam =
2039 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2040 sizeof(WDI_InitScanReqParamsType)) ;
2041 tWDA_ReqParams *pWdaParams;
2042 tANI_U8 i = 0;
2043
2044 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002045 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 if(NULL == wdiInitScanParam)
2047 {
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002049 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 VOS_ASSERT(0);
2051 return VOS_STATUS_E_NOMEM;
2052 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002053 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2054 if(NULL == pWdaParams)
2055 {
2056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002057 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002058 VOS_ASSERT(0);
2059 vos_mem_free(wdiInitScanParam);
2060 return VOS_STATUS_E_NOMEM;
2061 }
2062
2063 /* Copy init Scan params to WDI structure */
2064 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2065 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2066 sizeof(tSirMacAddr)) ;
2067 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2068 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2069 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2070#ifdef WLAN_FEATURE_P2P
2071 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2072 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2073#else
2074 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2075 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2076#endif
2077 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2078 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002079 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2080 {
2081 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2082 initScanParams->scanEntry.bssIdx[i] ;
2083 }
2084
2085 /* if Frame length, copy macMgmtHdr or WDI structure */
2086 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2087 {
2088 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2089 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2090 }
2091 wdiInitScanParam->wdiReqStatusCB = NULL ;
2092
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 /* Store Init Req pointer, as this will be used for response */
2094 pWdaParams->pWdaContext = pWDA;
2095 pWdaParams->wdaMsgParam = initScanParams;
2096 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 /* first try to suspend TX */
2098 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002099 if(WDI_STATUS_SUCCESS != status)
2100 {
2101 goto handleWdiFailure;
2102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 /* call DAL API to pass init scan request to DAL */
2104 status = WDI_InitScanReq(wdiInitScanParam,
2105 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 if(IS_WDI_STATUS_FAILURE(status))
2107 {
2108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2109 "error in WDA Init Scan, Resume Tx " );
2110 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 VOS_ASSERT(0) ;
2112
2113 goto handleWdiFailure;
2114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002116handleWdiFailure:
2117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2118 "Failure in WDI Api, free all the memory " );
2119 /* free WDI command buffer */
2120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2121 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002122 /* send Failure to PE */
2123 initScanParams->status = eSIR_FAILURE ;
2124 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 return CONVERT_WDI2VOS_STATUS(status) ;
2126}
2127
Jeff Johnson295189b2012-06-20 16:38:30 -07002128/*
2129 * FUNCTION: WDA_StartScanReqCallback
2130 * send Start SCAN RSP back to PE
2131 */
2132void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2133 void* pUserData)
2134{
2135 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2136 tWDA_CbContext *pWDA;
2137 tStartScanParams *pWDA_ScanParam;
2138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002139 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 if(NULL == pWdaParams)
2141 {
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 VOS_ASSERT(0) ;
2145 return ;
2146 }
2147 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2148 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002149 if(NULL == pWDA_ScanParam)
2150 {
2151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002152 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002154 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002155 return ;
2156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2158 {
2159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002160 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002162 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 return ;
2164 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2166 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002167
Jeff Johnson295189b2012-06-20 16:38:30 -07002168
2169 /* assign status to scan params */
2170 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 /* send SCAN RSP message back to PE */
2172 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 return ;
2174}
2175
Jeff Johnson295189b2012-06-20 16:38:30 -07002176/*
2177 * FUNCTION: WDA_ProcessStartScanReq
2178 * Trigger start SCAN in WDI
2179 */
2180VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2181 tStartScanParams *startScanParams)
2182{
2183 WDI_Status status = WDI_STATUS_SUCCESS;
2184 WDI_StartScanReqParamsType *wdiStartScanParams =
2185 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2186 sizeof(WDI_StartScanReqParamsType)) ;
2187 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 if(NULL == wdiStartScanParams)
2191 {
2192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 VOS_ASSERT(0);
2195 return VOS_STATUS_E_NOMEM;
2196 }
2197 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2198 if(NULL == pWdaParams)
2199 {
2200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002201 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 VOS_ASSERT(0);
2203 vos_mem_free(wdiStartScanParams);
2204 return VOS_STATUS_E_NOMEM;
2205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 /* Copy init Scan params to WDI structure */
2207 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2208 wdiStartScanParams->wdiReqStatusCB = NULL ;
2209
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 /* Store Init Req pointer, as this will be used for response */
2211 /* store Params pass it to WDI */
2212 pWdaParams->pWdaContext = pWDA;
2213 pWdaParams->wdaMsgParam = startScanParams;
2214 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002215 /* call DAL API to pass init scan request to DAL */
2216 status = WDI_StartScanReq(wdiStartScanParams,
2217 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002218 /* failure returned by WDI API */
2219 if(IS_WDI_STATUS_FAILURE(status))
2220 {
2221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2222 "Failure in Start Scan WDI API, free all the memory "
2223 "It should be due to previous abort scan." );
2224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2225 vos_mem_free(pWdaParams) ;
2226 startScanParams->status = eSIR_FAILURE ;
2227 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 return CONVERT_WDI2VOS_STATUS(status) ;
2230}
Jeff Johnson295189b2012-06-20 16:38:30 -07002231/*
2232 * FUNCTION: WDA_EndScanReqCallback
2233 * END SCAN callback
2234 */
2235void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2236{
2237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2238 tWDA_CbContext *pWDA;
2239 tEndScanParams *endScanParam;
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002241 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002242 if(NULL == pWdaParams)
2243 {
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002245 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 VOS_ASSERT(0) ;
2247 return ;
2248 }
2249 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2250 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002251 if(NULL == endScanParam)
2252 {
2253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002254 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002255 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2257 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002258 return ;
2259 }
2260
2261 /* Free WDI command buffer */
2262 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2263 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 /* assign status to scan params */
2265 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002266 /* send response back to PE */
2267 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2268 return ;
2269}
2270
Jeff Johnson295189b2012-06-20 16:38:30 -07002271/*
2272 * FUNCTION: WDA_ProcessEndScanReq
2273 * Trigger END SCAN in WDI
2274 */
2275VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2276 tEndScanParams *endScanParams)
2277{
2278 WDI_Status status = WDI_STATUS_SUCCESS;
2279 WDI_EndScanReqParamsType *wdiEndScanParams =
2280 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2281 sizeof(WDI_EndScanReqParamsType)) ;
2282 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002284 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 if(NULL == wdiEndScanParams)
2286 {
2287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 VOS_ASSERT(0);
2290 return VOS_STATUS_E_NOMEM;
2291 }
2292 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2293 if(NULL == pWdaParams)
2294 {
2295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002296 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002297 VOS_ASSERT(0);
2298 vos_mem_free(wdiEndScanParams);
2299 return VOS_STATUS_E_NOMEM;
2300 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 /* Copy init Scan params to WDI structure */
2302 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2303 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 /* Store Init Req pointer, as this will be used for response */
2305 /* store Params pass it to WDI */
2306 pWdaParams->pWdaContext = pWDA;
2307 pWdaParams->wdaMsgParam = endScanParams;
2308 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 /* call DAL API to pass init scan request to DAL */
2310 status = WDI_EndScanReq(wdiEndScanParams,
2311 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002312 if(IS_WDI_STATUS_FAILURE(status))
2313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2315 "Failure in End Scan WDI API, free all the memory "
2316 "It should be due to previous abort scan." );
2317 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2318 vos_mem_free(pWdaParams) ;
2319 endScanParams->status = eSIR_FAILURE ;
2320 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 return CONVERT_WDI2VOS_STATUS(status) ;
2323}
Jeff Johnson295189b2012-06-20 16:38:30 -07002324/*
2325 * FUNCTION: WDA_FinishScanReqCallback
2326 * Trigger Finish SCAN callback
2327 */
2328void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2329{
2330 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2331 tWDA_CbContext *pWDA;
2332 tFinishScanParams *finishScanParam;
2333 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002335 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002336 if(NULL == pWdaParams)
2337 {
2338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002339 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 VOS_ASSERT(0) ;
2341 return ;
2342 }
2343
2344 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2345 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002346 if(NULL == finishScanParam)
2347 {
2348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002349 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2352 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 return ;
2354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2356 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 /*
2358 * Now Resume TX, if we reached here means, TX is already suspended, we
2359 * have to resume it unconditionaly
2360 */
2361 status = WDA_ResumeDataTx(pWDA) ;
2362
2363 if(VOS_STATUS_SUCCESS != status)
2364 {
2365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002366 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2370 return ;
2371}
Jeff Johnson295189b2012-06-20 16:38:30 -07002372/*
2373 * FUNCTION: WDA_ProcessFinshScanReq
2374 * Trigger Finish SCAN in WDI
2375 */
2376VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2377 tFinishScanParams *finishScanParams)
2378{
2379 WDI_Status status = WDI_STATUS_SUCCESS;
2380 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2381 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2382 sizeof(WDI_FinishScanReqParamsType)) ;
2383 tWDA_ReqParams *pWdaParams ;
2384 tANI_U8 i = 0;
2385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 if(NULL == wdiFinishScanParams)
2388 {
2389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 VOS_ASSERT(0);
2392 return VOS_STATUS_E_NOMEM;
2393 }
2394 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2395 if(NULL == pWdaParams)
2396 {
2397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002399 VOS_ASSERT(0);
2400 vos_mem_free(wdiFinishScanParams);
2401 return VOS_STATUS_E_NOMEM;
2402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 /* Copy init Scan params to WDI structure */
2404 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2405 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2406 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2408 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2409 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2410 finishScanParams->frameLength ;
2411 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2412 finishScanParams->currentOperChannel ;
2413 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2414 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2415 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002416 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2417 {
2418 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2419 finishScanParams->scanEntry.bssIdx[i] ;
2420 }
2421
2422
Jeff Johnson295189b2012-06-20 16:38:30 -07002423 /* if Frame length, copy macMgmtHdr ro WDI structure */
2424 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2425 {
2426 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2427 &finishScanParams->macMgmtHdr,
2428 sizeof(WDI_MacMgmtHdr)) ;
2429 }
2430 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431 /* Store Init Req pointer, as this will be used for response */
2432 /* store Params pass it to WDI */
2433 pWdaParams->pWdaContext = pWDA;
2434 pWdaParams->wdaMsgParam = finishScanParams;
2435 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 /* call DAL API to pass init scan request to DAL */
2437 status = WDI_FinishScanReq(wdiFinishScanParams,
2438 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002439
Jeff Johnson295189b2012-06-20 16:38:30 -07002440
2441 /*
2442 * WDI API returns failure..
2443 */
2444 if(IS_WDI_STATUS_FAILURE( status))
2445 {
2446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2447 "Failure in Finish Scan WDI API, free all the memory " );
2448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2449 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 finishScanParams->status = eSIR_FAILURE ;
2451 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002453 return CONVERT_WDI2VOS_STATUS(status) ;
2454}
Jeff Johnson295189b2012-06-20 16:38:30 -07002455/*---------------------------------------------------------------------
2456 * ASSOC API's
2457 *---------------------------------------------------------------------
2458 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002459/*
2460 * FUNCTION: WDA_JoinReqCallback
2461 * Trigger Init SCAN callback
2462 */
2463void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2464{
2465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2466 tWDA_CbContext *pWDA;
2467 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002469 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002470 if(NULL == pWdaParams)
2471 {
2472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 VOS_ASSERT(0) ;
2475 return ;
2476 }
2477 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2478 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2480 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002481 /* reset macBSSID */
2482 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 /* reset macSTASelf */
2484 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 return ;
2488}
Jeff Johnson295189b2012-06-20 16:38:30 -07002489/*
2490 * FUNCTION: WDA_ProcessJoinReq
2491 * Trigger Join REQ in WDI
2492 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002493VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2494 tSwitchChannelParams* joinReqParam)
2495{
2496 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 WDI_JoinReqParamsType *wdiJoinReqParam =
2498 (WDI_JoinReqParamsType *)vos_mem_malloc(
2499 sizeof(WDI_JoinReqParamsType)) ;
2500 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002502 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 if(NULL == wdiJoinReqParam)
2504 {
2505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002508 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002509 return VOS_STATUS_E_NOMEM;
2510 }
2511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2512 if(NULL == pWdaParams)
2513 {
2514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 VOS_ASSERT(0);
2517 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002518 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 return VOS_STATUS_E_NOMEM;
2520 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002521
2522 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2523 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2524 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2525 {
2526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2527 "%s: received join request when BSSID or self-STA is NULL "
2528 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002529 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002530 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2531 VOS_ASSERT(0);
2532 vos_mem_free(wdiJoinReqParam);
2533 vos_mem_free(pWdaParams);
2534 joinReqParam->status = eSIR_FAILURE ;
2535 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2536 return VOS_STATUS_E_INVAL;
2537 }
2538
Jeff Johnson295189b2012-06-20 16:38:30 -07002539 /* copy the BSSID for pWDA */
2540 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2541 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002542 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2543 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002544 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2545 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002546#ifdef WLAN_FEATURE_VOWIFI
2547 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2548 joinReqParam->maxTxPower ;
2549#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002550 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2551 joinReqParam->localPowerConstraint ;
2552#endif
2553 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2554 joinReqParam->secondaryChannelOffset ;
2555 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2556
2557 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 /* Store Init Req pointer, as this will be used for response */
2559 /* store Params pass it to WDI */
2560 pWdaParams->pWdaContext = pWDA;
2561 pWdaParams->wdaMsgParam = joinReqParam;
2562 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 status = WDI_JoinReq(wdiJoinReqParam,
2564 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002565 if(IS_WDI_STATUS_FAILURE(status))
2566 {
2567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2568 "Failure in Join WDI API, free all the memory " );
2569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2570 vos_mem_free(pWdaParams) ;
2571 joinReqParam->status = eSIR_FAILURE ;
2572 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002574 return CONVERT_WDI2VOS_STATUS(status) ;
2575}
Jeff Johnson295189b2012-06-20 16:38:30 -07002576/*
2577 * FUNCTION: WDA_SwitchChannelReqCallback
2578 * send Switch channel RSP back to PE
2579 */
2580void WDA_SwitchChannelReqCallback(
2581 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2582{
2583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2584 tWDA_CbContext *pWDA;
2585 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002587 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 if(NULL == pWdaParams)
2589 {
2590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 VOS_ASSERT(0) ;
2593 return ;
2594 }
2595 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2596 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2597
2598#ifdef WLAN_FEATURE_VOWIFI
2599 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2600#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002601 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2602 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002603 pSwitchChanParams->status =
2604 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 return ;
2607}
Jeff Johnson295189b2012-06-20 16:38:30 -07002608/*
2609 * FUNCTION: WDA_ProcessChannelSwitchReq
2610 * Request to WDI to switch channel REQ params.
2611 */
2612VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2613 tSwitchChannelParams *pSwitchChanParams)
2614{
2615 WDI_Status status = WDI_STATUS_SUCCESS ;
2616 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2617 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2618 sizeof(WDI_SwitchChReqParamsType)) ;
2619 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002621 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 if(NULL == wdiSwitchChanParam)
2623 {
2624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 VOS_ASSERT(0);
2627 return VOS_STATUS_E_NOMEM;
2628 }
2629 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2630 if(NULL == pWdaParams)
2631 {
2632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002634 VOS_ASSERT(0);
2635 vos_mem_free(wdiSwitchChanParam);
2636 return VOS_STATUS_E_NOMEM;
2637 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2639#ifndef WLAN_FEATURE_VOWIFI
2640 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2641 pSwitchChanParams->localPowerConstraint;
2642#endif
2643 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2644 pSwitchChanParams->secondaryChannelOffset;
2645 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002646 /* Store req pointer, as this will be used for response */
2647 /* store Params pass it to WDI */
2648 pWdaParams->pWdaContext = pWDA;
2649 pWdaParams->wdaMsgParam = pSwitchChanParams;
2650 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002651#ifdef WLAN_FEATURE_VOWIFI
2652 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2653 = pSwitchChanParams->maxTxPower;
2654 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2655 pSwitchChanParams ->selfStaMacAddr,
2656 sizeof(tSirMacAddr));
2657#endif
2658 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2659 pSwitchChanParams->bssId,
2660 sizeof(tSirMacAddr));
2661
2662 status = WDI_SwitchChReq(wdiSwitchChanParam,
2663 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 if(IS_WDI_STATUS_FAILURE(status))
2665 {
2666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2667 "Failure in process channel switch Req WDI API, free all the memory " );
2668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2669 vos_mem_free(pWdaParams) ;
2670 pSwitchChanParams->status = eSIR_FAILURE ;
2671 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002673 return CONVERT_WDI2VOS_STATUS(status) ;
2674}
Jeff Johnson295189b2012-06-20 16:38:30 -07002675/*
2676 * FUNCTION: WDA_ConfigBssReqCallback
2677 * config BSS Req Callback, called by WDI
2678 */
2679void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2680 ,void* pUserData)
2681{
2682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2683 tWDA_CbContext *pWDA;
2684 tAddBssParams *configBssReqParam;
2685 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002687 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002688 if(NULL == pWdaParams)
2689 {
2690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002691 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 VOS_ASSERT(0) ;
2693 return ;
2694 }
2695 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2696 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2697 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 configBssReqParam->status =
2699 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002700 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2701 {
2702 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2703 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2705 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2706 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2707
2708 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2709 {
2710 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2711 {
2712 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2713 staConfigBssParam->staType = STA_ENTRY_BSSID;
2714 }
2715 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2716 (staConfigBssParam->staType == STA_ENTRY_SELF))
2717 {
2718 /* This is the 1st add BSS Req for the BTAMP STA */
2719 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2720 staConfigBssParam->staType = STA_ENTRY_BSSID;
2721 }
2722 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2723 (staConfigBssParam->staType == STA_ENTRY_PEER))
2724 {
2725 /* This is the 2nd ADD BSS Request that is sent
2726 * on the BTAMP STA side. The Sta type is
2727 * set to STA_ENTRY_PEER here.*/
2728 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2729 }
2730 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2731 (staConfigBssParam->staType == STA_ENTRY_SELF))
2732 {
2733 /* statype is already set by PE.
2734 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2735 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2736 staConfigBssParam->staType = STA_ENTRY_BSSID;
2737 }
2738 else
2739 {
2740 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2741 staConfigBssParam->staType = STA_ENTRY_PEER;
2742 }
2743 }
2744 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2745 {
2746 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2747 staConfigBssParam->staType = STA_ENTRY_SELF;
2748 }
2749 else
2750 {
2751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2752 "Invalid operation mode specified");
2753 VOS_ASSERT(0);
2754 }
2755
2756 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002757 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002758 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002760 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2761 sizeof(tSirMacAddr));
2762 staConfigBssParam->txChannelWidthSet =
2763 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2765 staConfigBssParam->htCapable)
2766 {
2767 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2768 wdiConfigBssRsp->ucBSSIdx;
2769 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2770 WDA_VALID_STA_INDEX ;
2771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002772 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2773 wdiConfigBssRsp->ucBSSIdx,
2774 wdiConfigBssRsp->ucSTAIdx))
2775 {
2776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002777 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 VOS_ASSERT(0) ;
2779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002780 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2781 {
2782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002783 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 VOS_ASSERT(0) ;
2785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002786#ifdef WLAN_FEATURE_VOWIFI
2787 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2788#endif
2789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2791 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002793 return ;
2794}
Jeff Johnson295189b2012-06-20 16:38:30 -07002795/*
2796 * FUNCTION: WDA_UpdateEdcaParamsForAC
2797 * Update WDI EDCA params with PE edca params
2798 */
2799void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2800 WDI_EdcaParamRecord *wdiEdcaParam,
2801 tSirMacEdcaParamRecord *macEdcaParam)
2802{
2803 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2804 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2805 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2806 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2807 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2808 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2809}
Jeff Johnson295189b2012-06-20 16:38:30 -07002810/*
2811 * FUNCTION: WDA_ProcessConfigBssReq
2812 * Configure BSS before starting Assoc with AP
2813 */
2814VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2815 tAddBssParams* configBssReqParam)
2816{
2817 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2819 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2820 sizeof(WDI_ConfigBSSReqParamsType)) ;
2821 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002823 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002824 if(NULL == wdiConfigBssReqParam)
2825 {
2826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 VOS_ASSERT(0);
2829 return VOS_STATUS_E_NOMEM;
2830 }
2831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2832 if(NULL == pWdaParams)
2833 {
2834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 VOS_ASSERT(0);
2837 vos_mem_free(wdiConfigBssReqParam);
2838 return VOS_STATUS_E_NOMEM;
2839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2842 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 /* Store Init Req pointer, as this will be used for response */
2844 /* store Params pass it to WDI */
2845 pWdaParams->pWdaContext = pWDA;
2846 pWdaParams->wdaMsgParam = configBssReqParam;
2847 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002848 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2849 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 if(IS_WDI_STATUS_FAILURE(status))
2851 {
2852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2853 "Failure in Config BSS WDI API, free all the memory " );
2854 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2855 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002856 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002857 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 return CONVERT_WDI2VOS_STATUS(status) ;
2860}
Jeff Johnson295189b2012-06-20 16:38:30 -07002861#ifdef ENABLE_HAL_COMBINED_MESSAGES
2862/*
2863 * FUNCTION: WDA_PostAssocReqCallback
2864 * Post ASSOC req callback, send RSP back to PE
2865 */
2866void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2867 void* pUserData)
2868{
2869 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2870 tPostAssocParams *postAssocReqParam =
2871 (tPostAssocParams *)pWDA->wdaMsgParam ;
2872 /*STA context within the BSS Params*/
2873 tAddStaParams *staPostAssocParam =
2874 &postAssocReqParam->addBssParams.staContext ;
2875 /*STA Params for self STA*/
2876 tAddStaParams *selfStaPostAssocParam =
2877 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 postAssocReqParam->status =
2881 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2883 {
2884 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2885 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2886 sizeof(tSirMacAddr)) ;
2887 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2888 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2889 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002890 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2891 }
2892 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2893 pWDA->wdaWdiApiMsgParam = NULL;
2894 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002895 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 return ;
2897}
Jeff Johnson295189b2012-06-20 16:38:30 -07002898/*
2899 * FUNCTION: WDA_ProcessPostAssocReq
2900 * Trigger POST ASSOC processing in WDI
2901 */
2902VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2903 tPostAssocParams *postAssocReqParam)
2904{
Jeff Johnson295189b2012-06-20 16:38:30 -07002905 WDI_Status status = WDI_STATUS_SUCCESS ;
2906
2907 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2908 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2909 sizeof(WDI_PostAssocReqParamsType)) ;
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 if(NULL == wdiPostAssocReqParam)
2914 {
2915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 VOS_ASSERT(0);
2918 return VOS_STATUS_E_NOMEM;
2919 }
2920
2921 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2922 {
2923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002924 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002925 VOS_ASSERT(0);
2926 return VOS_STATUS_E_FAILURE;
2927 }
2928
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 /* update BSS params into WDI structure */
2930 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2931 &postAssocReqParam->addBssParams) ;
2932 /* update STA params into WDI structure */
2933 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2934 &postAssocReqParam->addStaParams) ;
2935
2936 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2937 postAssocReqParam->addBssParams.highPerformance;
2938 WDA_UpdateEdcaParamsForAC(pWDA,
2939 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2940 &postAssocReqParam->addBssParams.acbe);
2941 WDA_UpdateEdcaParamsForAC(pWDA,
2942 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2943 &postAssocReqParam->addBssParams.acbk);
2944 WDA_UpdateEdcaParamsForAC(pWDA,
2945 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2946 &postAssocReqParam->addBssParams.acvi);
2947 WDA_UpdateEdcaParamsForAC(pWDA,
2948 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2949 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002950 /* Store Init Req pointer, as this will be used for response */
2951 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002952 /* store Params pass it to WDI */
2953 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2955 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 if(IS_WDI_STATUS_FAILURE(status))
2957 {
2958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2959 "Failure in Post Assoc WDI API, free all the memory " );
2960 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2961 pWDA->wdaWdiApiMsgParam = NULL;
2962 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002964 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return CONVERT_WDI2VOS_STATUS(status) ;
2967}
2968#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002969/*
2970 * FUNCTION: WDA_AddStaReqCallback
2971 * ADD STA req callback, send RSP back to PE
2972 */
2973void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2974 void* pUserData)
2975{
2976 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2977 tWDA_CbContext *pWDA;
2978 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002980 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 if(NULL == pWdaParams)
2982 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 VOS_ASSERT(0) ;
2985 return ;
2986 }
2987 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2988 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002989 addStaReqParam->status =
2990 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002991 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
2992 {
2993 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
2994 /*TODO: UMAC structure doesn't have these fields*/
2995 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
2996 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
2997 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
2998 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
2999 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3000 /* update staIndex as valid index for BA if STA is HT capable*/
3001 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
3002 {
3003 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3004 wdiConfigStaRsp->ucBssIdx;
3005 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3006 WDA_VALID_STA_INDEX ;
3007 }
3008 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3009 {
3010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003011 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003012 VOS_ASSERT(0) ;
3013 return ;
3014 }
3015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3017 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003018 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003019 return ;
3020}
Jeff Johnson295189b2012-06-20 16:38:30 -07003021/*
3022 * FUNCTION: WDA_ConfigStaReq
3023 * Trigger Config STA processing in WDI
3024 */
3025VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3026 tAddStaParams *addStaReqParam)
3027{
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3030 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3031 sizeof(WDI_ConfigSTAReqParamsType)) ;
3032 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 if(NULL == wdiConfigStaReqParam)
3036 {
3037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 VOS_ASSERT(0);
3040 return VOS_STATUS_E_NOMEM;
3041 }
3042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3043 if(NULL == pWdaParams)
3044 {
3045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003047 VOS_ASSERT(0);
3048 vos_mem_free(wdiConfigStaReqParam);
3049 return VOS_STATUS_E_NOMEM;
3050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 /* update STA params into WDI structure */
3053 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3054 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 /* Store Init Req pointer, as this will be used for response */
3056 /* store Params pass it to WDI */
3057 pWdaParams->pWdaContext = pWDA;
3058 pWdaParams->wdaMsgParam = addStaReqParam;
3059 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3061 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 if(IS_WDI_STATUS_FAILURE(status))
3063 {
3064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3065 "Failure in Config STA WDI API, free all the memory " );
3066 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3067 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 return CONVERT_WDI2VOS_STATUS(status) ;
3072}
Jeff Johnson295189b2012-06-20 16:38:30 -07003073/*
3074 * FUNCTION: WDA_DelBSSReqCallback
3075 * Dens DEL BSS RSP back to PE
3076 */
3077void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3078 void* pUserData)
3079{
3080 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3081 tWDA_CbContext *pWDA;
3082 tDeleteBssParams *delBssReqParam;
3083 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003085 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 if(NULL == pWdaParams)
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 VOS_ASSERT(0) ;
3091 return ;
3092 }
3093 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3094 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003096 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3097 {
3098 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3099 sizeof(tSirMacAddr)) ;
3100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0) ;
3106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3108 {
3109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003110 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 VOS_ASSERT(0) ;
3112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3114 {
3115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003116 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 VOS_ASSERT(0) ;
3118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3120 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 /* reset the the system role*/
3122 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3123
3124 /* Reset the BA related information */
3125 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3126 {
3127 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3128 {
3129 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3130 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3131 /* Reset framesTxed counters here */
3132 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3133 {
3134 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3135 }
3136 }
3137 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003138 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 return ;
3140}
3141
Jeff Johnson295189b2012-06-20 16:38:30 -07003142/*
3143 * FUNCTION: WDA_ProcessDelBssReq
3144 * Init DEL BSS req with WDI
3145 */
3146VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3147 tDeleteBssParams *delBssParam)
3148{
3149 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003150 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3151 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3152 sizeof(WDI_DelBSSReqParamsType)) ;
3153 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003156 if(NULL == wdiDelBssReqParam)
3157 {
3158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 VOS_ASSERT(0);
3161 return VOS_STATUS_E_NOMEM;
3162 }
3163 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3164 if(NULL == pWdaParams)
3165 {
3166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003167 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003168 VOS_ASSERT(0);
3169 vos_mem_free(wdiDelBssReqParam);
3170 return VOS_STATUS_E_NOMEM;
3171 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3173 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3174
3175 /* Store Init Req pointer, as this will be used for response */
3176 /* store Params pass it to WDI */
3177 pWdaParams->pWdaContext = pWDA;
3178 pWdaParams->wdaMsgParam = delBssParam;
3179 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 status = WDI_DelBSSReq(wdiDelBssReqParam,
3181 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003182 if(IS_WDI_STATUS_FAILURE(status))
3183 {
3184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3185 "Failure in Del BSS WDI API, free all the memory " );
3186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3187 vos_mem_free(pWdaParams) ;
3188 delBssParam->status = eSIR_FAILURE ;
3189 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3190 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 return CONVERT_WDI2VOS_STATUS(status) ;
3192}
Jeff Johnson295189b2012-06-20 16:38:30 -07003193/*
3194 * FUNCTION: WDA_DelSTAReqCallback
3195 * Dens DEL STA RSP back to PE
3196 */
3197void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3198 void* pUserData)
3199{
3200 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3201 tWDA_CbContext *pWDA;
3202 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003204 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 if(NULL == pWdaParams)
3206 {
3207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003208 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 VOS_ASSERT(0) ;
3210 return ;
3211 }
3212 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3213 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3216 {
3217 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3218 {
3219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003220 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003221 VOS_ASSERT(0) ;
3222 }
3223 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3224 }
3225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3226 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 /*Reset the BA information corresponding to this STAIdx */
3228 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3229 WDA_INVALID_STA_INDEX;
3230 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3231
3232 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 return ;
3234}
Jeff Johnson295189b2012-06-20 16:38:30 -07003235/*
3236 * FUNCTION: WDA_ProcessDelStaReq
3237 * Init DEL STA req with WDI
3238 */
3239VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3240 tDeleteStaParams *delStaParam)
3241{
3242 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003243 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3244 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3245 sizeof(WDI_DelSTAReqParamsType)) ;
3246 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003248 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003249 if(NULL == wdiDelStaReqParam)
3250 {
3251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003252 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 VOS_ASSERT(0);
3254 return VOS_STATUS_E_NOMEM;
3255 }
3256 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3257 if(NULL == pWdaParams)
3258 {
3259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003261 VOS_ASSERT(0);
3262 vos_mem_free(wdiDelStaReqParam);
3263 return VOS_STATUS_E_NOMEM;
3264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3266 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 /* Store Init Req pointer, as this will be used for response */
3268 /* store Params pass it to WDI */
3269 pWdaParams->pWdaContext = pWDA;
3270 pWdaParams->wdaMsgParam = delStaParam;
3271 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 status = WDI_DelSTAReq(wdiDelStaReqParam,
3273 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 if(IS_WDI_STATUS_FAILURE(status))
3275 {
3276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3277 "Failure in Del STA WDI API, free all the memory status = %d",
3278 status );
3279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3280 vos_mem_free(pWdaParams) ;
3281 delStaParam->status = eSIR_FAILURE ;
3282 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3283 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 return CONVERT_WDI2VOS_STATUS(status) ;
3285}
Jeff Johnson295189b2012-06-20 16:38:30 -07003286void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3287{
3288 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3289 tWDA_CbContext *pWDA;
3290 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003292 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 if(NULL == pWdaParams)
3294 {
3295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003296 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 VOS_ASSERT(0) ;
3298 return ;
3299 }
3300 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3301 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3303 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003304 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3305 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3306 pwdiAddSTASelfRsp->macSelfSta,
3307 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003309 return ;
3310}
Jeff Johnson295189b2012-06-20 16:38:30 -07003311/*
3312 * FUNCTION: WDA_ProcessAddStaSelfReq
3313 *
3314 */
3315VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3316{
3317 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003318 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003319 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3320 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3321 sizeof(WDI_AddSTASelfReqParamsType)) ;
3322 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003324 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 if( NULL == wdiAddStaSelfReq )
3326 {
3327 VOS_ASSERT( 0 );
3328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003329 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003330 return( VOS_STATUS_E_NOMEM );
3331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 if( NULL == pWdaParams )
3334 {
3335 VOS_ASSERT( 0 );
3336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003337 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 vos_mem_free(wdiAddStaSelfReq) ;
3339 return( VOS_STATUS_E_NOMEM );
3340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3343 /* Store Init Req pointer, as this will be used for response */
3344 /* store Params pass it to WDI */
3345 pWdaParams->pWdaContext = pWDA;
3346 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3347 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003348 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003349
Jeff Johnson43971f52012-07-17 12:26:56 -07003350 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 {
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3353 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003354 wstatus );
3355 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3357 vos_mem_free(pWdaParams) ;
3358 pAddStaSelfReq->status = eSIR_FAILURE ;
3359 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3360 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003361 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003362}
Jeff Johnson295189b2012-06-20 16:38:30 -07003363/*
3364 * FUNCTION: WDA_DelSTASelfRespCallback
3365 *
3366 */
3367void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3368 wdiDelStaSelfRspParams , void* pUserData)
3369{
3370 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3371 tWDA_CbContext *pWDA;
3372 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003374 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 if (NULL == pWdaParams)
3376 {
3377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 VOS_ASSERT(0);
3380 return;
3381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3383 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 delStaSelfParams->status =
3385 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3386
3387 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3388 vos_mem_free(pWdaParams) ;
3389
3390 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 return ;
3392}
Jeff Johnson295189b2012-06-20 16:38:30 -07003393/*
3394 * FUNCTION: WDA_DelSTASelfReqCallback
3395 *
3396 */
3397void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3398 void* pUserData)
3399{
3400 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3401 tWDA_CbContext *pWDA;
3402 tDelStaSelfParams *delStaSelfParams;
3403
3404 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3405 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003406 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003407
3408 if (NULL == pWdaParams)
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0);
3413 return;
3414 }
3415
3416 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3417 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3418
3419 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3420
3421 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3422 {
3423 VOS_ASSERT(0);
3424 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3425 vos_mem_free(pWdaParams) ;
3426 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3427 }
3428
3429 return ;
3430}
3431
3432/*
3433 * FUNCTION: WDA_DelSTASelfReq
3434 * Trigger Config STA processing in WDI
3435 */
3436VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3437 tDelStaSelfParams* pDelStaSelfReqParam)
3438{
3439 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003440 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003441 tWDA_ReqParams *pWdaParams = NULL;
3442 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3443 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3444 sizeof(WDI_DelSTASelfReqParamsType)) ;
3445
Jeff Johnson295189b2012-06-20 16:38:30 -07003446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 if( NULL == wdiDelStaSelfReq )
3449 {
3450 VOS_ASSERT( 0 );
3451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003452 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003453 return( VOS_STATUS_E_NOMEM );
3454 }
3455
3456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3457 if( NULL == pWdaParams )
3458 {
3459 VOS_ASSERT( 0 );
3460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003461 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 vos_mem_free(wdiDelStaSelfReq) ;
3463 return( VOS_STATUS_E_NOMEM );
3464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 pWdaParams->pWdaContext = pWDA;
3466 /* Store param pointer as passed in by caller */
3467 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3468 /* store Params pass it to WDI */
3469 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3471 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3472
3473 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3474 wdiDelStaSelfReq->pUserData = pWdaParams;
3475
Jeff Johnson43971f52012-07-17 12:26:56 -07003476 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3478
Jeff Johnson43971f52012-07-17 12:26:56 -07003479 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 {
3481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3482 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3483 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003484 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3486 vos_mem_free(pWdaParams) ;
3487 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3488 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3489 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003490 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003491}
3492
Jeff Johnson295189b2012-06-20 16:38:30 -07003493/*
3494 * FUNCTION: WDA_SendMsg
3495 * Send Message back to PE
3496 */
3497void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3498 void *pBodyptr, tANI_U32 bodyVal)
3499{
3500 tSirMsgQ msg = {0} ;
3501 tANI_U32 status = VOS_STATUS_SUCCESS ;
3502 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 msg.type = msgType;
3504 msg.bodyval = bodyVal;
3505 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 if (VOS_STATUS_SUCCESS != status)
3508 {
3509 if(NULL != pBodyptr)
3510 {
3511 vos_mem_free(pBodyptr);
3512 }
3513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003514 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 VOS_ASSERT(0) ;
3516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 return ;
3518}
Jeff Johnson295189b2012-06-20 16:38:30 -07003519/*
3520 * FUNCTION: WDA_UpdateBSSParams
3521 * Translated WDA/PE BSS info into WDI BSS info..
3522 */
3523void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3524 WDI_ConfigBSSReqInfoType *wdiBssParams,
3525 tAddBssParams *wdaBssParams)
3526{
3527 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 /* copy bssReq Params to WDI structure */
3529 vos_mem_copy(wdiBssParams->macBSSID,
3530 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3531 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3532 sizeof(tSirMacAddr)) ;
3533 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3534 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3535 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003536 wdiBssParams->ucShortSlotTimeSupported =
3537 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3539 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3540 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3541 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3542 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3543
3544 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3545 wdiBssParams->ucTXOPProtectionFullSupport =
3546 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3548 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003549 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003550 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3551 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3552 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3553 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3554
3555 /* copy SSID into WDI structure */
3556 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3557 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3558 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3560 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562#ifdef WLAN_FEATURE_VOWIFI
3563 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3564#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003567#ifdef WLAN_FEATURE_VOWIFI_11R
3568 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 if(wdiBssParams->bExtSetStaKeyParamValid)
3570 {
3571 /* copy set STA key params to WDI structure */
3572 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3573 wdaBssParams->extSetStaKeyParam.staIdx;
3574 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3575 wdaBssParams->extSetStaKeyParam.encType;
3576 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3577 wdaBssParams->extSetStaKeyParam.wepType;
3578 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3579 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003580 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3581 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003582 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3584 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3585 {
3586 WDA_GetWepKeysFromCfg( pWDA,
3587 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3588 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3589 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3590 }
3591 else
3592 {
3593#ifdef WLAN_SOFTAP_FEATURE
3594 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3595 keyIndex++)
3596 {
3597 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3598 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3599 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3600 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3601 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3602 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3604 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3605 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3606 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3607 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3608 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3609 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3610 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3613 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3614#else
3615 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3616 wdaBssParams->extSetStaKeyParam.key.keyId;
3617 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3618 wdaBssParams->extSetStaKeyParam.key.unicast;
3619 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3620 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3621 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3622 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3623 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3624 wdaBssParams->extSetStaKeyParam.key.paeRole;
3625 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3626 wdaBssParams->extSetStaKeyParam.key.keyLength;
3627 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3628 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3629 SIR_MAC_MAX_KEY_LENGTH);
3630 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3631#endif
3632 }
3633 }
3634 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3635 }
3636 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3637 {
3638 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3639 sizeof(wdaBssParams->extSetStaKeyParam) );
3640 }
3641#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003642#ifdef WLAN_FEATURE_11AC
3643 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3644 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3645#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003646
3647 return ;
3648}
Jeff Johnson295189b2012-06-20 16:38:30 -07003649/*
3650 * FUNCTION: WDA_UpdateSTAParams
3651 * Translated WDA/PE BSS info into WDI BSS info..
3652 */
3653void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3654 WDI_ConfigStaReqInfoType *wdiStaParams,
3655 tAddStaParams *wdaStaParams)
3656{
3657 tANI_U8 i = 0;
3658 /* Update STA params */
3659 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3660 sizeof(tSirMacAddr)) ;
3661 wdiStaParams->usAssocId = wdaStaParams->assocId;
3662 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3663
3664 wdiStaParams->ucShortPreambleSupported =
3665 wdaStaParams->shortPreambleSupported;
3666 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3667 sizeof(tSirMacAddr)) ;
3668 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3669
3670 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3671
3672 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3673 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3674 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3675 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3676 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3677 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3678 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3679
3680 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3681 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 wdiStaParams->wdiSupportedRates.opRateMode =
3683 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003684 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3685 {
3686 wdiStaParams->wdiSupportedRates.llbRates[i] =
3687 wdaStaParams->supportedRates.llbRates[i];
3688 }
3689 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3690 {
3691 wdiStaParams->wdiSupportedRates.llaRates[i] =
3692 wdaStaParams->supportedRates.llaRates[i];
3693 }
3694 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3695 {
3696 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3697 wdaStaParams->supportedRates.aniLegacyRates[i];
3698 }
3699 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3700 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003701#ifdef WLAN_FEATURE_11AC
3702 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3703 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3704 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3705 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3706#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3708 {
3709 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3710 wdaStaParams->supportedRates.supportedMCSSet[i];
3711 }
3712 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3713 wdaStaParams->supportedRates.rxHighestDataRate;
3714
3715 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3716
3717 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3718
3719 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3720 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3721 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3722
3723 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3724 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3725 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3726 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3727#ifdef WLAN_FEATURE_P2P
3728 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3729#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003730#ifdef WLAN_FEATURE_11AC
3731 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3732 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3733#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003734 return ;
3735}
Jeff Johnson295189b2012-06-20 16:38:30 -07003736/*
3737 * -------------------------------------------------------------------------
3738 * CFG update to WDI
3739 * -------------------------------------------------------------------------
3740 */
3741
3742 /*
3743 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3744 * Convert the WNI CFG ID to HAL CFG ID
3745 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003746static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003747{
3748 switch(wniCfgId)
3749 {
3750 case WNI_CFG_STA_ID:
3751 return QWLAN_HAL_CFG_STA_ID;
3752 case WNI_CFG_CURRENT_TX_ANTENNA:
3753 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3754 case WNI_CFG_CURRENT_RX_ANTENNA:
3755 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3756 case WNI_CFG_LOW_GAIN_OVERRIDE:
3757 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3758 case WNI_CFG_POWER_STATE_PER_CHAIN:
3759 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3760 case WNI_CFG_CAL_PERIOD:
3761 return QWLAN_HAL_CFG_CAL_PERIOD;
3762 case WNI_CFG_CAL_CONTROL:
3763 return QWLAN_HAL_CFG_CAL_CONTROL;
3764 case WNI_CFG_PROXIMITY:
3765 return QWLAN_HAL_CFG_PROXIMITY;
3766 case WNI_CFG_NETWORK_DENSITY:
3767 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3768 case WNI_CFG_MAX_MEDIUM_TIME:
3769 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3770 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3771 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3772 case WNI_CFG_RTS_THRESHOLD:
3773 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3774 case WNI_CFG_SHORT_RETRY_LIMIT:
3775 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3776 case WNI_CFG_LONG_RETRY_LIMIT:
3777 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3778 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3779 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3780 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3781 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3782 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3783 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3784 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3785 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3786 case WNI_CFG_FIXED_RATE:
3787 return QWLAN_HAL_CFG_FIXED_RATE;
3788 case WNI_CFG_RETRYRATE_POLICY:
3789 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3790 case WNI_CFG_RETRYRATE_SECONDARY:
3791 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3792 case WNI_CFG_RETRYRATE_TERTIARY:
3793 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3794 case WNI_CFG_FORCE_POLICY_PROTECTION:
3795 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3796 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3797 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3798 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3799 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3800 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3801 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3802 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3803 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3804 case WNI_CFG_MAX_BA_SESSIONS:
3805 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3806 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3807 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3808 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3809 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3810 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3811 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3812 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3813 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3814 case WNI_CFG_STATS_PERIOD:
3815 return QWLAN_HAL_CFG_STATS_PERIOD;
3816 case WNI_CFG_CFP_MAX_DURATION:
3817 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3818#if 0 /*This is not part of CFG*/
3819 case WNI_CFG_FRAME_TRANS_ENABLED:
3820 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3821#endif
3822 case WNI_CFG_DTIM_PERIOD:
3823 return QWLAN_HAL_CFG_DTIM_PERIOD;
3824 case WNI_CFG_EDCA_WME_ACBK:
3825 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3826 case WNI_CFG_EDCA_WME_ACBE:
3827 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3828 case WNI_CFG_EDCA_WME_ACVI:
3829 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3830 case WNI_CFG_EDCA_WME_ACVO:
3831 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3832#if 0
3833 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3834 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3835 case WNI_CFG_TELE_BCN_TRANS_LI:
3836 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3837 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3838 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3839 case WNI_CFG_TELE_BCN_MAX_LI:
3840 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3841 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3842 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3843#endif
3844 case WNI_CFG_ENABLE_CLOSE_LOOP:
3845 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
3846 default:
3847 {
3848 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3849 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3850 wniCfgId);
3851 return VOS_STATUS_E_INVAL;
3852 }
3853 }
3854}
Jeff Johnson295189b2012-06-20 16:38:30 -07003855/*
3856 * FUNCTION: WDA_UpdateCfgCallback
3857 *
3858 */
3859void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3860{
3861 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3862 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3863 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003865 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003866 /*
3867 * currently there is no response message is expected between PE and
3868 * WDA, Failure return from WDI is a ASSERT condition
3869 */
3870 if(WDI_STATUS_SUCCESS != wdiStatus)
3871 {
3872 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003873 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3875 }
3876
3877 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3878 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3879 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003880 return ;
3881}
Jeff Johnson295189b2012-06-20 16:38:30 -07003882/*
3883 * FUNCTION: WDA_UpdateCfg
3884 *
3885 */
3886VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3887{
3888
3889 WDI_Status status = WDI_STATUS_SUCCESS ;
3890 tANI_U32 val =0;
3891 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3892 tHalCfg *configData;
3893 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3894 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003896 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003897 if (NULL == pMac )
3898 {
3899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 return VOS_STATUS_E_FAILURE;
3902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003903 if(WDA_START_STATE != pWDA->wdaState)
3904 {
3905 return VOS_STATUS_E_FAILURE;
3906 }
3907
3908 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3909 {
3910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003911 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 VOS_ASSERT(0);
3913 return VOS_STATUS_E_FAILURE;
3914 }
3915
3916 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3917 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003918 if(NULL == wdiCfgReqParam)
3919 {
3920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 VOS_ASSERT(0);
3923 return VOS_STATUS_E_NOMEM;
3924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003925 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3926 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 if(NULL == wdiCfgReqParam->pConfigBuffer)
3928 {
3929 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003930 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 vos_mem_free(wdiCfgReqParam);
3932 VOS_ASSERT(0);
3933 return VOS_STATUS_E_NOMEM;
3934 }
3935
3936 /*convert the WNI CFG Id to HAL CFG Id*/
3937 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3938 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3939
3940 /*TODO: revisit this for handling string parameters */
3941 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3942 &val) != eSIR_SUCCESS)
3943 {
3944 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3945 "Failed to cfg get id %d\n", cfgParam->bodyval);
3946 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3947 vos_mem_free(wdiCfgReqParam);
3948 return eSIR_FAILURE;
3949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3951 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3952 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3953 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3954 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3955
3956 /* store Params pass it to WDI */
3957 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003958#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3959 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3960 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003961 if(IS_WDI_STATUS_FAILURE(status))
3962 {
3963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3964 "Failure in Update CFG WDI API, free all the memory " );
3965 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3966 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3967 pWDA->wdaWdiCfgApiMsgParam = NULL;
3968 /* Failure is not expected */
3969 VOS_ASSERT(0) ;
3970 }
3971#else
3972 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3973 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3974 pWDA->wdaWdiCfgApiMsgParam = NULL;
3975#endif
3976 return CONVERT_WDI2VOS_STATUS(status) ;
3977}
3978
Jeff Johnson295189b2012-06-20 16:38:30 -07003979VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
3980 v_U8_t *pDefaultKeyId,
3981 v_U8_t *pNumKeys,
3982 WDI_KeysType *pWdiKeys )
3983{
3984 v_U32_t i, j, defKeyId = 0;
3985 v_U32_t val = SIR_MAC_KEY_LENGTH;
3986 VOS_STATUS status = WDI_STATUS_SUCCESS;
3987 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003988 if (NULL == pMac )
3989 {
3990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003991 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 return VOS_STATUS_E_FAILURE;
3993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003994 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
3995 &defKeyId ))
3996 {
3997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3998 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
3999 }
4000
4001 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004002 /* Need to extract ALL of the configured WEP Keys */
4003 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4004 {
4005 val = SIR_MAC_KEY_LENGTH;
4006 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4007 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4008 pWdiKeys[j].key,
4009 &val ))
4010 {
4011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4012 "WEP Key index [%d] may not configured in CFG\n",i);
4013 }
4014 else
4015 {
4016 pWdiKeys[j].keyId = (tANI_U8) i;
4017 /*
4018 * Actually, a DC (Don't Care) because
4019 * this is determined (and set) by PE/MLME
4020 */
4021 pWdiKeys[j].unicast = 0;
4022 /*
4023 * Another DC (Don't Care)
4024 */
4025 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4026 /* Another DC (Don't Care). Unused for WEP */
4027 pWdiKeys[j].paeRole = 0;
4028 /* Determined from wlan_cfgGetStr() above.*/
4029 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030 j++;
4031 *pNumKeys = (tANI_U8) j;
4032 }
4033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 return status;
4035}
Jeff Johnson295189b2012-06-20 16:38:30 -07004036/*
4037 * FUNCTION: WDA_SetBssKeyReqCallback
4038 * send SET BSS key RSP back to PE
4039 */
4040void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4041{
4042 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4043 tWDA_CbContext *pWDA;
4044 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004046 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004047 if(NULL == pWdaParams)
4048 {
4049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 VOS_ASSERT(0) ;
4052 return ;
4053 }
4054 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4055 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4057 vos_mem_free(pWdaParams) ;
4058 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004059 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 return ;
4061}
Jeff Johnson295189b2012-06-20 16:38:30 -07004062/*
4063 * FUNCTION: WDA_ProcessSetBssKeyReq
4064 * Request to WDI for programming the BSS key( key for
4065 * broadcast/multicast frames Encryption)
4066 */
4067VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4068 tSetBssKeyParams *setBssKeyParams )
4069{
4070 WDI_Status status = WDI_STATUS_SUCCESS ;
4071 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4072 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4073 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4074 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004075 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004077 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004078 if(NULL == wdiSetBssKeyParam)
4079 {
4080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 VOS_ASSERT(0);
4083 return VOS_STATUS_E_NOMEM;
4084 }
4085 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4086 if(NULL == pWdaParams)
4087 {
4088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 VOS_ASSERT(0);
4091 vos_mem_free(wdiSetBssKeyParam);
4092 return VOS_STATUS_E_NOMEM;
4093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004095 /* copy set BSS params to WDI structure */
4096 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4097 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4098 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 if(setBssKeyParams->encType != eSIR_ED_NONE)
4100 {
4101 if( setBssKeyParams->numKeys == 0 &&
4102 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4103 setBssKeyParams->encType == eSIR_ED_WEP104))
4104 {
4105 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4107 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4108 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4109 }
4110 else
4111 {
4112 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4113 {
4114 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4115 setBssKeyParams->key[keyIndex].keyId;
4116 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4117 setBssKeyParams->key[keyIndex].unicast;
4118 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4119 setBssKeyParams->key[keyIndex].keyDirection;
4120 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4121 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4122 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4123 setBssKeyParams->key[keyIndex].paeRole;
4124 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4125 setBssKeyParams->key[keyIndex].keyLength;
4126 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4127 setBssKeyParams->key[keyIndex].key,
4128 SIR_MAC_MAX_KEY_LENGTH);
4129 }
4130 }
4131 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4133 setBssKeyParams->singleTidRc;
4134 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135 /* Store set key pointer, as this will be used for response */
4136 /* store Params pass it to WDI */
4137 pWdaParams->pWdaContext = pWDA;
4138 pWdaParams->wdaMsgParam = setBssKeyParams;
4139 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004140 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4141 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4142
4143 if(IS_WDI_STATUS_FAILURE(status))
4144 {
4145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4146 "Failure in Set BSS Key Req WDI API, free all the memory " );
4147 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4148 vos_mem_free(pWdaParams) ;
4149 setBssKeyParams->status = eSIR_FAILURE ;
4150 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4151 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004152 return CONVERT_WDI2VOS_STATUS(status) ;
4153}
Jeff Johnson295189b2012-06-20 16:38:30 -07004154/*
4155 * FUNCTION: WDA_RemoveBssKeyReqCallback
4156 * send SET BSS key RSP back to PE
4157 */
4158void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4159{
4160 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4161 tWDA_CbContext *pWDA;
4162 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004164 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 if(NULL == pWdaParams)
4166 {
4167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004168 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 VOS_ASSERT(0) ;
4170 return ;
4171 }
4172 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4173 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4175 vos_mem_free(pWdaParams) ;
4176
4177 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004179 return ;
4180}
Jeff Johnson295189b2012-06-20 16:38:30 -07004181/*
4182 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4183 * Request to WDI to remove the BSS key( key for broadcast/multicast
4184 * frames Encryption)
4185 */
4186VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4187 tRemoveBssKeyParams *removeBssKeyParams )
4188{
4189 WDI_Status status = WDI_STATUS_SUCCESS ;
4190 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4191 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4192 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4193 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004195 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004196 if(NULL == wdiRemoveBssKeyParam)
4197 {
4198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 VOS_ASSERT(0);
4201 return VOS_STATUS_E_NOMEM;
4202 }
4203 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4204 if(NULL == pWdaParams)
4205 {
4206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004207 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004208 VOS_ASSERT(0);
4209 vos_mem_free(wdiRemoveBssKeyParam);
4210 return VOS_STATUS_E_NOMEM;
4211 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 /* copy Remove BSS key params to WDI structure*/
4213 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4214 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4215 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4216 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4217 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004218 /* Store remove key pointer, as this will be used for response */
4219 /* store Params pass it to WDI */
4220 pWdaParams->pWdaContext = pWDA;
4221 pWdaParams->wdaMsgParam = removeBssKeyParams;
4222 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004223 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4224 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 if(IS_WDI_STATUS_FAILURE(status))
4226 {
4227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4228 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4230 vos_mem_free(pWdaParams) ;
4231 removeBssKeyParams->status = eSIR_FAILURE ;
4232 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 return CONVERT_WDI2VOS_STATUS(status) ;
4235}
Jeff Johnson295189b2012-06-20 16:38:30 -07004236/*
4237 * FUNCTION: WDA_SetBssKeyReqCallback
4238 * send SET BSS key RSP back to PE
4239 */
4240void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4241{
4242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4243 tWDA_CbContext *pWDA;
4244 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004246 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004247 if(NULL == pWdaParams)
4248 {
4249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 VOS_ASSERT(0) ;
4252 return ;
4253 }
4254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4255 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4257 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004258 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 return ;
4261}
Jeff Johnson295189b2012-06-20 16:38:30 -07004262/*
4263 * FUNCTION: WDA_ProcessSetStaKeyReq
4264 * Request to WDI for programming the STA key( key for Unicast frames
4265 * Encryption)
4266 */
4267VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4268 tSetStaKeyParams *setStaKeyParams )
4269{
4270 WDI_Status status = WDI_STATUS_SUCCESS ;
4271 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4272 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4273 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4274 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004278 if(NULL == wdiSetStaKeyParam)
4279 {
4280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 VOS_ASSERT(0);
4283 return VOS_STATUS_E_NOMEM;
4284 }
4285 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4286 if(NULL == pWdaParams)
4287 {
4288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004289 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004290 VOS_ASSERT(0);
4291 vos_mem_free(wdiSetStaKeyParam);
4292 return VOS_STATUS_E_NOMEM;
4293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004295 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004296 /* copy set STA key params to WDI structure */
4297 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4298 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4299 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4300 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 if(setStaKeyParams->encType != eSIR_ED_NONE)
4302 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004303 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4305 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4306 {
4307 WDA_GetWepKeysFromCfg( pWDA,
4308 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4309 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4310 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4311 }
4312 else
4313 {
4314#ifdef WLAN_SOFTAP_FEATURE
4315 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4316 keyIndex++)
4317 {
4318 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4319 setStaKeyParams->key[keyIndex].keyId;
4320 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4321 setStaKeyParams->key[keyIndex].unicast;
4322 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4323 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004324 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4325 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4326 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4327 setStaKeyParams->key[keyIndex].paeRole;
4328 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4329 setStaKeyParams->key[keyIndex].keyLength;
4330 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4331 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4332 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4333 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4334 {
4335 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4336 }
4337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004338 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4339 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4340#else
4341 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4342 setStaKeyParams->key.keyId;
4343 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4344 setStaKeyParams->key.unicast;
4345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4346 setStaKeyParams->key.keyDirection;
4347 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4348 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4349 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4350 setStaKeyParams->key.paeRole;
4351 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4352 setStaKeyParams->key.keyLength;
4353 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4354 setStaKeyParams->key[keyIndex].key,
4355 SIR_MAC_MAX_KEY_LENGTH);
4356 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4357#endif
4358 }
4359 }
4360 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4361 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004362 /* Store set key pointer, as this will be used for response */
4363 /* store Params pass it to WDI */
4364 pWdaParams->pWdaContext = pWDA;
4365 pWdaParams->wdaMsgParam = setStaKeyParams;
4366 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004367 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4368 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004369 if(IS_WDI_STATUS_FAILURE(status))
4370 {
4371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4372 "Failure in set STA Key Req WDI API, free all the memory " );
4373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4374 vos_mem_free(pWdaParams) ;
4375 setStaKeyParams->status = eSIR_FAILURE ;
4376 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 return CONVERT_WDI2VOS_STATUS(status) ;
4379}
Jeff Johnson295189b2012-06-20 16:38:30 -07004380/*
4381 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4382 * send SET Bcast STA key RSP back to PE
4383 */
4384void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4385{
4386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4387 tWDA_CbContext *pWDA;
4388 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004390 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004391 if(NULL == pWdaParams)
4392 {
4393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004394 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 VOS_ASSERT(0) ;
4396 return ;
4397 }
4398 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4399 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4401 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004402 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 return ;
4405}
4406
Jeff Johnson295189b2012-06-20 16:38:30 -07004407/*
4408 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4409 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4410 * Encryption)
4411 */
4412VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4413 tSetStaKeyParams *setStaKeyParams )
4414{
4415 WDI_Status status = WDI_STATUS_SUCCESS ;
4416 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4417 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4418 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4419 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004422 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004423 if(NULL == wdiSetStaKeyParam)
4424 {
4425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004426 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 VOS_ASSERT(0);
4428 return VOS_STATUS_E_NOMEM;
4429 }
4430 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4431 if(NULL == pWdaParams)
4432 {
4433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004434 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004435 VOS_ASSERT(0);
4436 vos_mem_free(wdiSetStaKeyParam);
4437 return VOS_STATUS_E_NOMEM;
4438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004440 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004441 /* copy set STA key params to WDI structure */
4442 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4443 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4444 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4445 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 if(setStaKeyParams->encType != eSIR_ED_NONE)
4447 {
4448#ifdef WLAN_SOFTAP_FEATURE
4449 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4450 keyIndex++)
4451 {
4452 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4453 setStaKeyParams->key[keyIndex].keyId;
4454 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4455 setStaKeyParams->key[keyIndex].unicast;
4456 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4457 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004458 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4459 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4460 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4461 setStaKeyParams->key[keyIndex].paeRole;
4462 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4463 setStaKeyParams->key[keyIndex].keyLength;
4464 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4465 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4468 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4469#else
4470 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4471 setStaKeyParams->key.keyId;
4472 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4473 setStaKeyParams->key.unicast;
4474 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4475 setStaKeyParams->key.keyDirection;
4476 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4477 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4478 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4479 setStaKeyParams->key.paeRole;
4480 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4481 setStaKeyParams->key.keyLength;
4482 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4483 setStaKeyParams->key[keyIndex].key,
4484 SIR_MAC_MAX_KEY_LENGTH);
4485 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4486#endif
4487 }
4488 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004489 /* Store set key pointer, as this will be used for response */
4490 /* store Params pass it to WDI */
4491 pWdaParams->pWdaContext = pWDA;
4492 pWdaParams->wdaMsgParam = setStaKeyParams;
4493 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004494 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4495 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004496 if(IS_WDI_STATUS_FAILURE(status))
4497 {
4498 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4499 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4500 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4501 vos_mem_free(pWdaParams) ;
4502 setStaKeyParams->status = eSIR_FAILURE ;
4503 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4504 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 return CONVERT_WDI2VOS_STATUS(status) ;
4506}
Jeff Johnson295189b2012-06-20 16:38:30 -07004507/*
4508 * FUNCTION: WDA_RemoveStaKeyReqCallback
4509 * send SET BSS key RSP back to PE
4510 */
4511void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4512{
4513 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4514 tWDA_CbContext *pWDA;
4515 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004517 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004518 if(NULL == pWdaParams)
4519 {
4520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004521 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 VOS_ASSERT(0) ;
4523 return ;
4524 }
4525 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4526 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4528 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004529 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 return ;
4532}
4533
Jeff Johnson295189b2012-06-20 16:38:30 -07004534/*
4535 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4536 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4537 */
4538VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4539 tRemoveStaKeyParams *removeStaKeyParams )
4540{
4541 WDI_Status status = WDI_STATUS_SUCCESS ;
4542 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4543 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4544 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4545 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004547 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 if(NULL == wdiRemoveStaKeyParam)
4549 {
4550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004551 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 VOS_ASSERT(0);
4553 return VOS_STATUS_E_NOMEM;
4554 }
4555 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4556 if(NULL == pWdaParams)
4557 {
4558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004559 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004560 VOS_ASSERT(0);
4561 vos_mem_free(wdiRemoveStaKeyParam);
4562 return VOS_STATUS_E_NOMEM;
4563 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 /* copy remove STA key params to WDI structure*/
4565 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4566 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4567 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4568 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4569 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 /* Store remove key pointer, as this will be used for response */
4571 /* store Params pass it to WDI */
4572 pWdaParams->pWdaContext = pWDA;
4573 pWdaParams->wdaMsgParam = removeStaKeyParams;
4574 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004575 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4576 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 if(IS_WDI_STATUS_FAILURE(status))
4578 {
4579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4580 "Failure in remove STA Key Req WDI API, free all the memory " );
4581 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4582 vos_mem_free(pWdaParams) ;
4583 removeStaKeyParams->status = eSIR_FAILURE ;
4584 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 return CONVERT_WDI2VOS_STATUS(status) ;
4587}
Jeff Johnson295189b2012-06-20 16:38:30 -07004588/*
4589 * FUNCTION: WDA_IsHandleSetLinkStateReq
4590 * Update the WDA state and return the status to handle this message or not
4591 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004592WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4593 tWDA_CbContext *pWDA,
4594 tLinkStateParams *linkStateParams)
4595{
4596 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004597 switch(linkStateParams->state)
4598 {
4599 case eSIR_LINK_PREASSOC_STATE:
4600 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4601 /*
4602 * set the WDA state to PRE ASSOC
4603 * copy the BSSID into pWDA to use it in join request and return,
4604 * No need to handle these messages.
4605 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004606 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4607 {
4608 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004610 }
4611 else
4612 {
4613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004614 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004615 VOS_ASSERT(0);
4616 }
4617
4618 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4619 {
4620 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004621 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004622 }
4623 else
4624 {
4625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004626 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004627 VOS_ASSERT(0);
4628 }
4629
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4631 *channel and after ) so reset the WDA state to ready when the second
4632 * time UMAC issue the link state with PREASSOC
4633 */
4634 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4635 {
4636 /* RESET WDA state back to WDA_READY_STATE */
4637 pWDA->wdaState = WDA_READY_STATE;
4638 }
4639 else
4640 {
4641 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4642 }
4643 //populate linkState info in WDACbCtxt
4644 pWDA->linkState = linkStateParams->state;
4645 status = WDA_IGNORE_SET_LINK_STATE;
4646 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 default:
4648 if(pWDA->wdaState != WDA_READY_STATE)
4649 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004650 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4651 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4652 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4653 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4654 *the ASSERT in WDA_Stop during module unload.*/
4655 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4656 {
4657 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004658 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004659 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004660 else
4661 {
4662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004663 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004664 status = WDA_IGNORE_SET_LINK_STATE;
4665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004666 }
4667 break;
4668 }
4669
4670 return status;
4671}
Jeff Johnson295189b2012-06-20 16:38:30 -07004672/*
4673 * FUNCTION: WDA_SetLinkStateCallback
4674 * call back function for set link state from WDI
4675 */
4676void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4677{
4678 tWDA_CbContext *pWDA;
4679 tLinkStateParams *linkStateParams;
4680 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004682 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004683 if(NULL == pWdaParams)
4684 {
4685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004686 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 VOS_ASSERT(0) ;
4688 return ;
4689 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 /*
4693 * In STA mode start the BA activity check timer after association
4694 * and in AP mode start BA activity check timer after BSS start */
4695 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4696 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4697 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4698 {
4699 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004702 /*
4703 * No respone required for WDA_SET_LINK_STATE so free the request
4704 * param here
4705 */
4706 if( pWdaParams != NULL )
4707 {
4708 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4709 {
4710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4711 }
4712 vos_mem_free(pWdaParams);
4713 }
4714 return ;
4715}
Jeff Johnson295189b2012-06-20 16:38:30 -07004716/*
4717 * FUNCTION: WDA_ProcessSetLinkState
4718 * Request to WDI to set the link status.
4719 */
4720VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4721 tLinkStateParams *linkStateParams)
4722{
4723 WDI_Status status = WDI_STATUS_SUCCESS ;
4724 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4725 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4726 sizeof(WDI_SetLinkReqParamsType)) ;
4727 tWDA_ReqParams *pWdaParams ;
4728 tpAniSirGlobal pMac;
4729 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4730
4731 if(NULL == pMac)
4732 {
4733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004734 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004736 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 return VOS_STATUS_E_FAILURE;
4738 }
4739
4740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004741 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004742 if(NULL == wdiSetLinkStateParam)
4743 {
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 VOS_ASSERT(0);
4747 return VOS_STATUS_E_NOMEM;
4748 }
4749 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4750 if(NULL == pWdaParams)
4751 {
4752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004753 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004754 VOS_ASSERT(0);
4755 vos_mem_free(wdiSetLinkStateParam);
4756 return VOS_STATUS_E_NOMEM;
4757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 if(WDA_IGNORE_SET_LINK_STATE ==
4759 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4760 {
4761 status = WDI_STATUS_E_FAILURE;
4762 }
4763 else
4764 {
4765 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4766 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4768 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004769 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4770 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 pWdaParams->pWdaContext = pWDA;
4772 /* Store remove key pointer, as this will be used for response */
4773 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004774 /* store Params pass it to WDI */
4775 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4776 /* Stop Timer only other than GO role and concurrent session */
4777 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4778 && !vos_concurrent_sessions_running() &&
4779 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4780 {
4781 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4784 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004785 if(IS_WDI_STATUS_FAILURE(status))
4786 {
4787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4788 "Failure in set link state Req WDI API, free all the memory " );
4789 }
4790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004791 if(IS_WDI_STATUS_FAILURE(status))
4792 {
4793 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004794 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 vos_mem_free(pWdaParams);
4796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 return CONVERT_WDI2VOS_STATUS(status) ;
4798}
Jeff Johnson295189b2012-06-20 16:38:30 -07004799/*
4800 * FUNCTION: WDA_GetStatsReqParamsCallback
4801 * send the response to PE with Stats received from WDI
4802 */
4803void WDA_GetStatsReqParamsCallback(
4804 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4805 void* pUserData)
4806{
4807 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4808 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4809
4810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004811 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004812 pGetPEStatsRspParams =
4813 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4814 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4815
4816 if(NULL == pGetPEStatsRspParams)
4817 {
4818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004819 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 VOS_ASSERT(0);
4821 return;
4822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4824 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4825 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4826 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4827 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4828
4829 //Fill the Session Id Properly in PE
4830 pGetPEStatsRspParams->sessionId = 0;
4831 pGetPEStatsRspParams->rc =
4832 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4833 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4834 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004835 vos_mem_copy( pGetPEStatsRspParams + 1,
4836 wdiGetStatsRsp + 1,
4837 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 /* send response to UMAC*/
4839 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4840
4841 return;
4842}
4843
Jeff Johnson295189b2012-06-20 16:38:30 -07004844/*
4845 * FUNCTION: WDA_ProcessGetStatsReq
4846 * Request to WDI to get the statistics
4847 */
4848VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4849 tAniGetPEStatsReq *pGetStatsParams)
4850{
4851 WDI_Status status = WDI_STATUS_SUCCESS ;
4852 WDI_GetStatsReqParamsType wdiGetStatsParam;
4853 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004855 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4857 pGetStatsParams->staId;
4858 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4859 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 status = WDI_GetStatsReq(&wdiGetStatsParam,
4862 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 if(IS_WDI_STATUS_FAILURE(status))
4864 {
4865 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4866 "Failure in Get Stats Req WDI API, free all the memory " );
4867 pGetPEStatsRspParams =
4868 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4869 if(NULL == pGetPEStatsRspParams)
4870 {
4871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004872 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004874 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004875 return VOS_STATUS_E_NOMEM;
4876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4878 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4879 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4880 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4881 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4882 (void *)pGetPEStatsRspParams, 0) ;
4883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 /* Free the request message */
4885 vos_mem_free(pGetStatsParams);
4886 return CONVERT_WDI2VOS_STATUS(status);
4887}
Jeff Johnson295189b2012-06-20 16:38:30 -07004888/*
4889 * FUNCTION: WDA_UpdateEDCAParamCallback
4890 * call back function for Update EDCA params from WDI
4891 */
4892void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4893{
4894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4895 tEdcaParams *pEdcaParams;
4896
4897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 if(NULL == pWdaParams)
4900 {
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 VOS_ASSERT(0) ;
4904 return ;
4905 }
4906 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4908 vos_mem_free(pWdaParams);
4909 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 return ;
4911}
Jeff Johnson295189b2012-06-20 16:38:30 -07004912/*
4913 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4914 * Request to WDI to Update the EDCA params.
4915 */
4916VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4917 tEdcaParams *pEdcaParams)
4918{
4919 WDI_Status status = WDI_STATUS_SUCCESS ;
4920 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4921 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4922 sizeof(WDI_UpdateEDCAParamsType)) ;
4923 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004925 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 if(NULL == wdiEdcaParam)
4927 {
4928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004931 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 return VOS_STATUS_E_NOMEM;
4933 }
4934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4935 if(NULL == pWdaParams)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0);
4940 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004941 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004942 return VOS_STATUS_E_NOMEM;
4943 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004944 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4945 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4946 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4947 &pEdcaParams->acbe);
4948 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4949 &pEdcaParams->acbk);
4950 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4951 &pEdcaParams->acvi);
4952 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4953 &pEdcaParams->acvo);
4954 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 pWdaParams->pWdaContext = pWDA;
4956 /* Store remove key pointer, as this will be used for response */
4957 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 /* store Params pass it to WDI */
4959 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004960 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4961 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 if(IS_WDI_STATUS_FAILURE(status))
4963 {
4964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4965 "Failure in Update EDCA Params WDI API, free all the memory " );
4966 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4967 vos_mem_free(pWdaParams);
4968 vos_mem_free(pEdcaParams);
4969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 return CONVERT_WDI2VOS_STATUS(status) ;
4971}
Jeff Johnson295189b2012-06-20 16:38:30 -07004972/*
4973 * FUNCTION: WDA_AddBAReqCallback
4974 * send ADD BA RSP back to PE
4975 */
4976void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
4977 void* pUserData)
4978{
4979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4980 tWDA_CbContext *pWDA;
4981 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004983 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 if(NULL == pWdaParams)
4985 {
4986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004987 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 VOS_ASSERT(0) ;
4989 return ;
4990 }
4991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4992 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 return ;
4998}
4999
Jeff Johnson295189b2012-06-20 16:38:30 -07005000/*
5001 * FUNCTION: WDA_ProcessAddBAReq
5002 * Request to WDI to Update the ADDBA REQ params.
5003 */
5004VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5005 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5006{
Jeff Johnson43971f52012-07-17 12:26:56 -07005007 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5009 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5010 sizeof(WDI_AddBAReqParamsType)) ;
5011 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 if(NULL == wdiAddBAReqParam)
5015 {
5016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 VOS_ASSERT(0);
5019 return VOS_STATUS_E_NOMEM;
5020 }
5021 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5022 if(NULL == pWdaParams)
5023 {
5024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005025 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005026 VOS_ASSERT(0);
5027 vos_mem_free(wdiAddBAReqParam);
5028 return VOS_STATUS_E_NOMEM;
5029 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 do
5031 {
5032 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 wdiAddBaInfo->ucSTAIdx = staIdx ;
5034 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5035 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005036 } while(0) ;
5037 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 pWdaParams->pWdaContext = pWDA;
5039 /* store Params pass it to WDI */
5040 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5041 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005042 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5043 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005044
Jeff Johnson43971f52012-07-17 12:26:56 -07005045 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 {
5047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005048 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5049 status = CONVERT_WDI2VOS_STATUS(wstatus);
5050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 vos_mem_free(pWdaParams);
5052 pAddBAReqParams->status = eSIR_FAILURE;
5053 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5054 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005055 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005056}
Jeff Johnson295189b2012-06-20 16:38:30 -07005057/*
5058 * FUNCTION: WDA_AddBASessionReqCallback
5059 * send ADD BA SESSION RSP back to PE/(or TL)
5060 */
5061void WDA_AddBASessionReqCallback(
5062 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5063{
5064 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5066 tWDA_CbContext *pWDA;
5067 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070 if(NULL == pWdaParams)
5071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 VOS_ASSERT(0) ;
5075 return ;
5076 }
5077 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5078 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 if( NULL == pAddBAReqParams )
5080 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005082 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5085 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005086 return ;
5087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5089 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 /*
5091 * if WDA in update TL state, update TL with BA session parama and send
5092 * another request to HAL(/WDI) (ADD_BA_REQ)
5093 */
5094
5095 if((VOS_STATUS_SUCCESS ==
5096 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5097 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5098 {
5099 /* Update TL with BA info received from HAL/WDI */
5100 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5101 wdiAddBaSession->usBaSessionID,
5102 wdiAddBaSession->ucSTAIdx,
5103 wdiAddBaSession->ucBaTID,
5104 wdiAddBaSession->ucBaBufferSize,
5105 wdiAddBaSession->ucWinSize,
5106 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5108 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5109 }
5110 else
5111 {
5112 pAddBAReqParams->status =
5113 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5114
5115 /* Setting Flag to indicate that Set BA is success */
5116 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5117 {
5118 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5119 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5120 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005122 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 /*Reset the WDA state to READY */
5125 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 return ;
5127}
5128
Jeff Johnson295189b2012-06-20 16:38:30 -07005129/*
5130 * FUNCTION: WDA_ProcessAddBASessionReq
5131 * Request to WDI to Update the ADDBA REQ params.
5132 */
5133VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5134 tAddBAParams *pAddBAReqParams)
5135{
5136 WDI_Status status = WDI_STATUS_SUCCESS ;
5137 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5138 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5139 sizeof(WDI_AddBASessionReqParamsType)) ;
5140 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005142 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005143 if(NULL == wdiAddBASessionReqParam)
5144 {
5145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 VOS_ASSERT(0);
5148 return VOS_STATUS_E_NOMEM;
5149 }
5150 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5151 if(NULL == pWdaParams)
5152 {
5153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005155 VOS_ASSERT(0);
5156 vos_mem_free(wdiAddBASessionReqParam);
5157 return VOS_STATUS_E_NOMEM;
5158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 /*
5160 * Populate ADD BA parameters and pass these paarmeters to WDI.
5161 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5162 * the state to track if these is BA recipient case or BA initiator
5163 * case.
5164 */
5165 do
5166 {
5167 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5168 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5169 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5170 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5171 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5172 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5173 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005174 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005175 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5176 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5177 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5178 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5179 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 /* check the BA direction and update state accordingly */
5181 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5182 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5183 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5184
5185 }while(0) ;
5186 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005187 pWdaParams->pWdaContext = pWDA;
5188 /* Store ADD BA pointer, as this will be used for response */
5189 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5190 /* store Params pass it to WDI */
5191 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005192 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5193 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005194 if(IS_WDI_STATUS_FAILURE(status))
5195 {
5196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5197 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5198 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5199 vos_mem_free(pWdaParams->wdaMsgParam);
5200 vos_mem_free(pWdaParams);
5201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005203}
Jeff Johnson295189b2012-06-20 16:38:30 -07005204/*
5205 * FUNCTION: WDA_DelBANotifyTL
5206 * send DEL BA IND to TL
5207 */
5208void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5209 tDelBAParams *pDelBAReqParams)
5210{
5211 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5212 //tSirMsgQ msg;
5213 vos_msg_t vosMsg;
5214 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005215 if(NULL == pDelBAInd)
5216 {
5217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005218 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 VOS_ASSERT(0) ;
5220 return;
5221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005222 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5223 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5224 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5225 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005226
Jeff Johnson295189b2012-06-20 16:38:30 -07005227
5228 vosMsg.type = WDA_DELETEBA_IND;
5229 vosMsg.bodyptr = pDelBAInd;
5230 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5231 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5232 {
5233 vosStatus = VOS_STATUS_E_BADMSG;
5234 }
5235}
Jeff Johnson295189b2012-06-20 16:38:30 -07005236/*
5237 * FUNCTION: WDA_DelBAReqCallback
5238 * send DEL BA RSP back to PE
5239 */
5240void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5241{
5242 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5243 tWDA_CbContext *pWDA;
5244 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005246 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 if(NULL == pWdaParams)
5248 {
5249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005250 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 VOS_ASSERT(0) ;
5252 return ;
5253 }
5254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5255 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 /* Notify TL about DEL BA in case of recipinet */
5257 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5258 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5259 {
5260 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5261 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005262 /*
5263 * No respone required for WDA_DELBA_IND so just free the request
5264 * param here
5265 */
5266 vos_mem_free(pDelBAReqParams);
5267 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5268 vos_mem_free(pWdaParams);
5269 return ;
5270}
5271
Jeff Johnson295189b2012-06-20 16:38:30 -07005272/*
5273 * FUNCTION: WDA_ProcessDelBAReq
5274 * Request to WDI to Update the DELBA REQ params.
5275 */
5276VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5277 tDelBAParams *pDelBAReqParams)
5278{
5279 WDI_Status status = WDI_STATUS_SUCCESS ;
5280 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5281 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5282 sizeof(WDI_DelBAReqParamsType)) ;
5283 tWDA_ReqParams *pWdaParams ;
5284 tANI_U16 staIdx = 0;
5285 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005287 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 if(NULL == wdiDelBAReqParam)
5289 {
5290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 VOS_ASSERT(0);
5293 return VOS_STATUS_E_NOMEM;
5294 }
5295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5296 if(NULL == pWdaParams)
5297 {
5298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005300 VOS_ASSERT(0);
5301 vos_mem_free(wdiDelBAReqParam);
5302 return VOS_STATUS_E_NOMEM;
5303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5305 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5306 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5307 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 pWdaParams->pWdaContext = pWDA;
5309 /* Store DEL BA pointer, as this will be used for response */
5310 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 /* store Params pass it to WDI */
5312 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5314 * maintained in WDA, so that WDA can retry for another BA session
5315 */
5316 staIdx = pDelBAReqParams->staIdx;
5317 tid = pDelBAReqParams->baTID;
5318 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005319 status = WDI_DelBAReq(wdiDelBAReqParam,
5320 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005321 if(IS_WDI_STATUS_FAILURE(status))
5322 {
5323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5324 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5326 vos_mem_free(pWdaParams->wdaMsgParam);
5327 vos_mem_free(pWdaParams);
5328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330}
Jeff Johnson295189b2012-06-20 16:38:30 -07005331/*
5332 * FUNCTION: WDA_AddTSReqCallback
5333 * send ADD TS RSP back to PE
5334 */
5335void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5336{
5337 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5338 tWDA_CbContext *pWDA;
5339 tAddTsParams *pAddTsReqParams;
5340
5341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005342 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005343 if(NULL == pWdaParams)
5344 {
5345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005346 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 VOS_ASSERT(0) ;
5348 return ;
5349 }
5350 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5351 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5352 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5353 vos_mem_free(pWdaParams);
5354
5355 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005357 return ;
5358}
5359
Jeff Johnson295189b2012-06-20 16:38:30 -07005360/*
5361 * FUNCTION: WDA_ProcessAddTSReq
5362 * Request to WDI to Update the ADD TS REQ params.
5363 */
5364VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5365 tAddTsParams *pAddTsReqParams)
5366{
5367 WDI_Status status = WDI_STATUS_SUCCESS ;
5368 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5369 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5370 sizeof(WDI_AddTSReqParamsType)) ;
5371 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005373 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005374 if(NULL == wdiAddTSReqParam)
5375 {
5376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005377 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 VOS_ASSERT(0);
5379 return VOS_STATUS_E_NOMEM;
5380 }
5381 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5382 if(NULL == pWdaParams)
5383 {
5384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005386 VOS_ASSERT(0);
5387 vos_mem_free(wdiAddTSReqParam);
5388 return VOS_STATUS_E_NOMEM;
5389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5391 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005392 //TS IE
5393 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5394 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5395 pAddTsReqParams->tspec.length;
5396
5397 //TS IE : TS INFO : TRAFFIC
5398 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5399 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5400 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5401 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5402 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5403 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5404 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5405 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5406 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5407 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5408 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5409 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5410 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5411 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5412 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5413 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5414
5415 //TS IE : TS INFO : SCHEDULE
5416 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5417 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5418 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5419 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005420 //TS IE
5421 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5422 pAddTsReqParams->tspec.nomMsduSz;
5423 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5424 pAddTsReqParams->tspec.maxMsduSz;
5425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5426 pAddTsReqParams->tspec.minSvcInterval;
5427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5428 pAddTsReqParams->tspec.maxSvcInterval;
5429 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5430 pAddTsReqParams->tspec.inactInterval;
5431 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5432 pAddTsReqParams->tspec.suspendInterval;
5433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5434 pAddTsReqParams->tspec.svcStartTime;
5435 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5436 pAddTsReqParams->tspec.minDataRate;
5437 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5438 pAddTsReqParams->tspec.meanDataRate;
5439 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5440 pAddTsReqParams->tspec.peakDataRate;
5441 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5442 pAddTsReqParams->tspec.maxBurstSz;
5443 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5444 pAddTsReqParams->tspec.delayBound;
5445 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5446 pAddTsReqParams->tspec.minPhyRate;
5447 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5448 pAddTsReqParams->tspec.surplusBw;
5449 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5450 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 /* TODO: tAddTsParams doesn't have the following fields */
5452#if 0
5453 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5454 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5455 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5456 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5457#endif
5458 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5459
5460 pWdaParams->pWdaContext = pWDA;
5461 /* Store ADD TS pointer, as this will be used for response */
5462 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005463 /* store Params pass it to WDI */
5464 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005465 status = WDI_AddTSReq(wdiAddTSReqParam,
5466 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 if(IS_WDI_STATUS_FAILURE(status))
5468 {
5469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5470 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5472 vos_mem_free(pWdaParams);
5473 pAddTsReqParams->status = eSIR_FAILURE ;
5474 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477}
5478
Jeff Johnson295189b2012-06-20 16:38:30 -07005479/*
5480 * FUNCTION: WDA_DelTSReqCallback
5481 * send DEL TS RSP back to PE
5482 */
5483void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5484{
5485 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005487 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5489 vos_mem_free(pWdaParams->wdaMsgParam) ;
5490 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 /*
5492 * No respone required for WDA_DEL_TS_REQ so just free the request
5493 * param here
5494 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 return ;
5496}
5497
Jeff Johnson295189b2012-06-20 16:38:30 -07005498/*
5499 * FUNCTION: WDA_ProcessDelTSReq
5500 * Request to WDI to Update the DELTS REQ params.
5501 */
5502VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5503 tDelTsParams *pDelTSReqParams)
5504{
5505 WDI_Status status = WDI_STATUS_SUCCESS ;
5506 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5507 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5508 sizeof(WDI_DelTSReqParamsType)) ;
5509 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005511 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 if(NULL == wdiDelTSReqParam)
5513 {
5514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 VOS_ASSERT(0);
5517 return VOS_STATUS_E_NOMEM;
5518 }
5519 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5520 if(NULL == pWdaParams)
5521 {
5522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005523 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005524 VOS_ASSERT(0);
5525 vos_mem_free(wdiDelTSReqParam);
5526 return VOS_STATUS_E_NOMEM;
5527 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5529 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5530 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5531 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5532 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 pWdaParams->pWdaContext = pWDA;
5534 /* Store DEL TS pointer, as this will be used for response */
5535 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 /* store Params pass it to WDI */
5537 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 status = WDI_DelTSReq(wdiDelTSReqParam,
5539 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 if(IS_WDI_STATUS_FAILURE(status))
5541 {
5542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5543 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5544 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5545 vos_mem_free(pWdaParams->wdaMsgParam);
5546 vos_mem_free(pWdaParams);
5547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005548 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005549}
Jeff Johnson295189b2012-06-20 16:38:30 -07005550/*
5551 * FUNCTION: WDA_UpdateBeaconParamsCallback
5552 * Free the memory. No need to send any response to PE in this case
5553 */
5554void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5555{
5556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005558 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 if(NULL == pWdaParams)
5560 {
5561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005562 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 VOS_ASSERT(0) ;
5564 return ;
5565 }
5566 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5567 vos_mem_free(pWdaParams->wdaMsgParam) ;
5568 vos_mem_free(pWdaParams);
5569 /*
5570 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5571 * param here
5572 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 return ;
5574}
Jeff Johnson295189b2012-06-20 16:38:30 -07005575/*
5576 * FUNCTION: WDA_ProcessUpdateBeaconParams
5577 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5578 */
5579VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5580 tUpdateBeaconParams *pUpdateBeaconParams)
5581{
5582 WDI_Status status = WDI_STATUS_SUCCESS ;
5583 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5584 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5585 sizeof(WDI_UpdateBeaconParamsType)) ;
5586 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005588 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 if(NULL == wdiUpdateBeaconParams)
5590 {
5591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005592 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 VOS_ASSERT(0);
5594 return VOS_STATUS_E_NOMEM;
5595 }
5596 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5597 if(NULL == pWdaParams)
5598 {
5599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005601 VOS_ASSERT(0);
5602 vos_mem_free(wdiUpdateBeaconParams);
5603 return VOS_STATUS_E_NOMEM;
5604 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5606 pUpdateBeaconParams->bssIdx;
5607 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5608 pUpdateBeaconParams->fShortPreamble;
5609 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5610 pUpdateBeaconParams->fShortSlotTime;
5611 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5612 pUpdateBeaconParams->beaconInterval;
5613 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5614 pUpdateBeaconParams->llaCoexist;
5615 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5616 pUpdateBeaconParams->llbCoexist;
5617 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5618 pUpdateBeaconParams->llgCoexist;
5619 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5620 pUpdateBeaconParams->ht20MhzCoexist;
5621 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5622 pUpdateBeaconParams->llnNonGFCoexist;
5623 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5624 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5625 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5626 pUpdateBeaconParams->fRIFSMode;
5627 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5628 pUpdateBeaconParams->paramChangeBitmap;
5629 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5630
5631 pWdaParams->pWdaContext = pWDA;
5632 /* Store UpdateBeacon Req pointer, as this will be used for response */
5633 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005634 /* store Params pass it to WDI */
5635 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005636 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5637 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5638 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005639 if(IS_WDI_STATUS_FAILURE(status))
5640 {
5641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5642 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5644 vos_mem_free(pWdaParams->wdaMsgParam);
5645 vos_mem_free(pWdaParams);
5646 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005648}
Jeff Johnson295189b2012-06-20 16:38:30 -07005649#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005650/*
5651 * FUNCTION: WDA_TSMStatsReqCallback
5652 * send TSM Stats RSP back to PE
5653 */
5654void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5655{
5656 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5657 tWDA_CbContext *pWDA = NULL;
5658 tTSMStats *pTsmRspParams = NULL;
5659
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005661 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 if(NULL == pWdaParams)
5663 {
5664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005665 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 VOS_ASSERT(0) ;
5667 return ;
5668 }
5669 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5670 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 if( NULL == pTsmRspParams )
5672 {
5673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005674 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 VOS_ASSERT( 0 );
5676 return ;
5677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5679 vos_mem_free(pWdaParams);
5680
5681 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5682 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5683 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5684 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5685 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5686 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5687 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5688 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5689 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5690 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 return ;
5693}
5694
5695
Jeff Johnson295189b2012-06-20 16:38:30 -07005696/*
5697 * FUNCTION: WDA_ProcessTsmStatsReq
5698 * Request to WDI to get the TSM Stats params.
5699 */
5700VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5701 tTSMStats *pTsmStats)
5702{
5703 WDI_Status status = WDI_STATUS_SUCCESS ;
5704 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5705 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005707 "------> Entering: %s " ,__func__);
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) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005745 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 return CONVERT_WDI2VOS_STATUS(status) ;
5748}
5749#endif
5750/*
5751 * FUNCTION: WDA_SendBeaconParamsCallback
5752 * No need to send any response to PE in this case
5753 */
5754void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5755{
5756
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005758 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005759 return ;
5760}
Jeff Johnson295189b2012-06-20 16:38:30 -07005761/*
5762 * FUNCTION: WDA_ProcessSendBeacon
5763 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5764 * start beacon trasmission
5765 */
5766VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5767 tSendbeaconParams *pSendbeaconParams)
5768{
5769 WDI_Status status = WDI_STATUS_SUCCESS ;
5770 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5774 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5775 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5776 pSendbeaconParams->beaconLength;
5777#ifdef WLAN_SOFTAP_FEATURE
5778 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5779 pSendbeaconParams->timIeOffset;
5780#endif
5781#ifdef WLAN_FEATURE_P2P
5782 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5783 pSendbeaconParams->p2pIeOffset;
5784#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005785 /* Copy the beacon template to local buffer */
5786 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5787 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5788 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5789
Jeff Johnson295189b2012-06-20 16:38:30 -07005790 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5791 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005792 if(IS_WDI_STATUS_FAILURE(status))
5793 {
5794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5795 "Failure in SEND BEACON REQ Params WDI API" );
5796 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 vos_mem_free(pSendbeaconParams);
5798 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799}
Jeff Johnson295189b2012-06-20 16:38:30 -07005800/*
5801 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5802 * No need to send any response to PE in this case
5803 */
5804void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5805{
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005807 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005808 return ;
5809}
5810
Jeff Johnson295189b2012-06-20 16:38:30 -07005811/*
5812 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5813 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5814 * send probe response
5815 */
5816VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5817 tSendProbeRespParams *pSendProbeRspParams)
5818{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005819 WDI_Status status = WDI_STATUS_SUCCESS;
5820 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5821 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005823 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005824
5825 if (!wdiSendProbeRspParam)
5826 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5827
Jeff Johnson295189b2012-06-20 16:38:30 -07005828 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005829 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005831 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 /* Copy the Probe Response template to local buffer */
5834 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005835 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 pSendProbeRspParams->pProbeRespTemplate,
5837 pSendProbeRspParams->probeRespTemplateLen);
5838 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005839 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5841 WDI_PROBE_REQ_BITMAP_IE_LEN);
5842
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005843 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005844
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005845 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005846 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 if(IS_WDI_STATUS_FAILURE(status))
5848 {
5849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5850 "Failure in SEND Probe RSP Params WDI API" );
5851 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005852 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005853 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005855}
Jeff Johnson295189b2012-06-20 16:38:30 -07005856#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5857/*
5858 * FUNCTION: WDA_SetMaxTxPowerCallBack
5859 * send the response to PE with power value received from WDI
5860 */
5861void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5862 void* pUserData)
5863{
5864 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5865 tWDA_CbContext *pWDA = NULL;
5866 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5867
5868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005870 if(NULL == pWdaParams)
5871 {
5872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005873 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 VOS_ASSERT(0) ;
5875 return ;
5876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5878 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 if( NULL == pMaxTxPowerParams )
5880 {
5881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005882 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005883 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005884 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5885 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 return ;
5887 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005888
Jeff Johnson295189b2012-06-20 16:38:30 -07005889
5890 /*need to free memory for the pointers used in the
5891 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5893 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005894 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005895
Jeff Johnson295189b2012-06-20 16:38:30 -07005896
5897 /* send response to UMAC*/
5898 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5899
5900 return;
5901}
Jeff Johnson295189b2012-06-20 16:38:30 -07005902/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005903 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 * Request to WDI to send set Max Tx Power Request
5905 */
5906 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5907 tMaxTxPowerParams *MaxTxPowerParams)
5908{
5909 WDI_Status status = WDI_STATUS_SUCCESS;
5910 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5911 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005912
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005914 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005915
Jeff Johnson295189b2012-06-20 16:38:30 -07005916 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5917 sizeof(WDI_SetMaxTxPowerParamsType));
5918 if(NULL == wdiSetMaxTxPowerParams)
5919 {
5920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005921 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_ASSERT(0);
5923 return VOS_STATUS_E_NOMEM;
5924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5926 if(NULL == pWdaParams)
5927 {
5928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005929 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 vos_mem_free(wdiSetMaxTxPowerParams);
5931 VOS_ASSERT(0);
5932 return VOS_STATUS_E_NOMEM;
5933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 /* Copy.Max.Tx.Power Params to WDI structure */
5935 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5936 MaxTxPowerParams->bssId,
5937 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5939 MaxTxPowerParams->selfStaMacAddr,
5940 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5942 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005944 pWdaParams->pWdaContext = pWDA;
5945 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005946 /* store Params pass it to WDI */
5947 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5949 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 if(IS_WDI_STATUS_FAILURE(status))
5951 {
5952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5953 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5955 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005956 /* send response to UMAC*/
5957 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005958 }
5959 return CONVERT_WDI2VOS_STATUS(status);
5960
5961}
Jeff Johnson295189b2012-06-20 16:38:30 -07005962#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005963#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005964/*
5965 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5966 * Free the memory. No need to send any response to PE in this case
5967 */
5968void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5969{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005970 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5971
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005973 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005974
5975 if(NULL == pWdaParams)
5976 {
5977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005978 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005979 VOS_ASSERT(0) ;
5980 return ;
5981 }
5982
5983 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5984 vos_mem_free(pWdaParams->wdaMsgParam) ;
5985 vos_mem_free(pWdaParams);
5986
Jeff Johnson295189b2012-06-20 16:38:30 -07005987 /*
5988 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
5989 * so just free the request param here
5990 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 return ;
5992}
5993
Jeff Johnson295189b2012-06-20 16:38:30 -07005994/*
5995 * FUNCTION: WDA_ProcessSetP2PGONOAReq
5996 * Request to WDI to set the P2P Group Owner Notice of Absence Req
5997 */
5998VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
5999 tP2pPsParams *pP2pPsConfigParams)
6000{
6001 WDI_Status status = WDI_STATUS_SUCCESS ;
6002 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6003 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6004 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006005 tWDA_ReqParams *pWdaParams = NULL;
6006
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006008 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006009 if(NULL == wdiSetP2PGONOAReqParam)
6010 {
6011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006012 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 VOS_ASSERT(0);
6014 return VOS_STATUS_E_NOMEM;
6015 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006016
6017 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6018 if(NULL == pWdaParams)
6019 {
6020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006021 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006022 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006023 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006024 VOS_ASSERT(0);
6025 return VOS_STATUS_E_NOMEM;
6026 }
6027
Jeff Johnson295189b2012-06-20 16:38:30 -07006028 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6029 pP2pPsConfigParams->opp_ps;
6030 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6031 pP2pPsConfigParams->ctWindow;
6032 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6033 pP2pPsConfigParams->count;
6034 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6035 pP2pPsConfigParams->duration;
6036 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6037 pP2pPsConfigParams->interval;
6038 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6039 pP2pPsConfigParams->single_noa_duration;
6040 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6041 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006042
Jeff Johnson295189b2012-06-20 16:38:30 -07006043 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6044 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006045 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6046
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006048 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6049 pWdaParams->pWdaContext = pWDA;
6050
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006052 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6053
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 if(IS_WDI_STATUS_FAILURE(status))
6055 {
6056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6057 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6059 vos_mem_free(pWdaParams->wdaMsgParam);
6060 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006062 return CONVERT_WDI2VOS_STATUS(status);
6063
Jeff Johnson295189b2012-06-20 16:38:30 -07006064}
6065#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006066#ifdef WLAN_FEATURE_VOWIFI_11R
6067/*
6068 * FUNCTION: WDA_AggrAddTSReqCallback
6069 * send ADD AGGREGATED TS RSP back to PE
6070 */
6071void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6072{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6074 tWDA_CbContext *pWDA;
6075 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006078 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006079 if(NULL == pWdaParams)
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006082 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006083 VOS_ASSERT(0) ;
6084 return ;
6085 }
6086
6087 pWDA = pWdaParams->pWdaContext;
6088 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006089
6090 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6091 {
6092 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006094 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006095
6096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6097 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 return ;
6099}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006100/*
6101 * FUNCTION: WDA_ProcessAddTSReq
6102 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6103 */
6104VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6105 tAggrAddTsParams *pAggrAddTsReqParams)
6106{
6107 WDI_Status status = WDI_STATUS_SUCCESS ;
6108 int i;
6109 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006110 tWDA_ReqParams *pWdaParams = NULL;
6111
6112
Jeff Johnson295189b2012-06-20 16:38:30 -07006113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006114 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006115 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6116 sizeof(WDI_AggrAddTSReqParamsType)) ;
6117 if(NULL == wdiAggrAddTSReqParam)
6118 {
6119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006121 VOS_ASSERT(0);
6122 return VOS_STATUS_E_NOMEM;
6123 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006124
6125
6126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6127 if(NULL == pWdaParams)
6128 {
6129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006130 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006131 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006132 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133 VOS_ASSERT(0);
6134 return VOS_STATUS_E_NOMEM;
6135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006136 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6137 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6138 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6140 {
6141 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6142 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6143 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006144 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6145 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6146 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6147 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6148 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6149 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6150 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6151 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6152 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6153 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6154 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6155 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6156 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6157 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6158 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6159 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006160 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6161 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6163 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6164 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6165 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6166 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6167 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6168 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6169 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6170 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6171 pAggrAddTsReqParams->tspec[i].inactInterval;
6172 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6173 pAggrAddTsReqParams->tspec[i].suspendInterval;
6174 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6175 pAggrAddTsReqParams->tspec[i].svcStartTime;
6176 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6177 pAggrAddTsReqParams->tspec[i].minDataRate;
6178 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6179 pAggrAddTsReqParams->tspec[i].meanDataRate;
6180 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6181 pAggrAddTsReqParams->tspec[i].peakDataRate;
6182 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6183 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6184 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6185 pAggrAddTsReqParams->tspec[i].delayBound;
6186 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6187 pAggrAddTsReqParams->tspec[i].minPhyRate;
6188 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6189 pAggrAddTsReqParams->tspec[i].surplusBw;
6190 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6191 pAggrAddTsReqParams->tspec[i].mediumTime;
6192 }
6193
6194 /* TODO: tAggrAddTsParams doesn't have the following fields */
6195#if 0
6196 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6197 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6198 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6199 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6200#endif
6201 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6202
6203 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006204 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006206 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6207
6208 pWdaParams->pWdaContext = pWDA;
6209
Jeff Johnson295189b2012-06-20 16:38:30 -07006210 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006211 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6212
Jeff Johnson295189b2012-06-20 16:38:30 -07006213 if(IS_WDI_STATUS_FAILURE(status))
6214 {
6215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6216 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6218 vos_mem_free(pWdaParams);
6219
6220 /* send the failure response back to PE*/
6221 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6222 {
6223 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6224 }
6225
6226 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6227 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 return CONVERT_WDI2VOS_STATUS(status) ;
6230}
6231#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006232/*
6233 * FUNCTION: WDA_EnterImpsReqCallback
6234 * send Enter IMPS RSP back to PE
6235 */
6236void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6237{
6238 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006242 return ;
6243}
Jeff Johnson295189b2012-06-20 16:38:30 -07006244/*
6245 * FUNCTION: WDA_ProcessEnterImpsReq
6246 * Request to WDI to Enter IMPS power state.
6247 */
6248VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6249{
6250 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006252 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 if(IS_WDI_STATUS_FAILURE(status))
6255 {
6256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6257 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006258 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 return CONVERT_WDI2VOS_STATUS(status) ;
6261}
Jeff Johnson295189b2012-06-20 16:38:30 -07006262/*
6263 * FUNCTION: WDA_ExitImpsReqCallback
6264 * send Exit IMPS RSP back to PE
6265 */
6266void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6267{
6268 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006270 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006272 return ;
6273}
Jeff Johnson295189b2012-06-20 16:38:30 -07006274/*
6275 * FUNCTION: WDA_ProcessExitImpsReq
6276 * Request to WDI to Exit IMPS power state.
6277 */
6278VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6279{
6280 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006282 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 if(IS_WDI_STATUS_FAILURE(status))
6285 {
6286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6287 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006288 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 return CONVERT_WDI2VOS_STATUS(status) ;
6291}
Jeff Johnson295189b2012-06-20 16:38:30 -07006292/*
6293 * FUNCTION: WDA_EnterBmpsReqCallback
6294 * send Enter BMPS RSP back to PE
6295 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006296void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006297{
6298 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6299 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006300 tEnterBmpsParams *pEnterBmpsRspParams;
6301
Jeff Johnson295189b2012-06-20 16:38:30 -07006302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006303 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006304 if(NULL == pWdaParams)
6305 {
6306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006307 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 VOS_ASSERT(0) ;
6309 return ;
6310 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006311
6312 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6313 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6314
6315 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6316 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6317
6318 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006320 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6321
Jeff Johnson295189b2012-06-20 16:38:30 -07006322 return ;
6323}
Jeff Johnson295189b2012-06-20 16:38:30 -07006324/*
6325 * FUNCTION: WDA_ProcessEnterBmpsReq
6326 * Request to WDI to Enter BMPS power state.
6327 */
6328VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6329 tEnterBmpsParams *pEnterBmpsReqParams)
6330{
6331 WDI_Status status = WDI_STATUS_SUCCESS;
6332 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6333 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006335 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006336 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6337 {
6338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006339 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 VOS_ASSERT(0);
6341 return VOS_STATUS_E_FAILURE;
6342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6344 if (NULL == wdiEnterBmpsReqParams)
6345 {
6346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006349 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6350 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006351 return VOS_STATUS_E_NOMEM;
6352 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006353 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6354 if (NULL == pWdaParams)
6355 {
6356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006357 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 VOS_ASSERT(0);
6359 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006360 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6361 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 return VOS_STATUS_E_NOMEM;
6363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006364 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6365 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6366 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6367 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 // For CCX and 11R Roaming
6369 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6370 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6371 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6372 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006373
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 /* Store param pointer as passed in by caller */
6375 /* store Params pass it to WDI */
6376 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006377 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6380 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006381 if (IS_WDI_STATUS_FAILURE(status))
6382 {
6383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6384 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6385 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006386 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006388 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 return CONVERT_WDI2VOS_STATUS(status);
6391}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006392
6393
6394static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6395 WDI_Status wdiStatus,
6396 tExitBmpsParams *pExitBmpsReqParams)
6397{
6398 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6399
6400 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6401}
6402
6403
Jeff Johnson295189b2012-06-20 16:38:30 -07006404/*
6405 * FUNCTION: WDA_ExitBmpsReqCallback
6406 * send Exit BMPS RSP back to PE
6407 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006408void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006409{
6410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6411 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006412 tExitBmpsParams *pExitBmpsRspParams;
6413
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 if(NULL == pWdaParams)
6417 {
6418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006419 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 VOS_ASSERT(0) ;
6421 return ;
6422 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006423
6424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6425 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6426
6427 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6428 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429
Jeff Johnson295189b2012-06-20 16:38:30 -07006430 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6431 vos_mem_free(pWdaParams) ;
6432
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006433 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 return ;
6435}
Jeff Johnson295189b2012-06-20 16:38:30 -07006436/*
6437 * FUNCTION: WDA_ProcessExitBmpsReq
6438 * Request to WDI to Exit BMPS power state.
6439 */
6440VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6441 tExitBmpsParams *pExitBmpsReqParams)
6442{
6443 WDI_Status status = WDI_STATUS_SUCCESS ;
6444 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6445 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6446 sizeof(WDI_ExitBmpsReqParamsType)) ;
6447 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006449 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006450 if(NULL == wdiExitBmpsReqParams)
6451 {
6452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006453 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006455 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 return VOS_STATUS_E_NOMEM;
6457 }
6458 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6459 if(NULL == pWdaParams)
6460 {
6461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 VOS_ASSERT(0);
6464 vos_mem_free(wdiExitBmpsReqParams);
6465 return VOS_STATUS_E_NOMEM;
6466 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006468
6469 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6470
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6472
6473 /* Store param pointer as passed in by caller */
6474 /* store Params pass it to WDI */
6475 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6476 pWdaParams->pWdaContext = pWDA;
6477 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006478 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6479 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 if(IS_WDI_STATUS_FAILURE(status))
6481 {
6482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6483 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6485 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006486 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 return CONVERT_WDI2VOS_STATUS(status) ;
6489}
Jeff Johnson295189b2012-06-20 16:38:30 -07006490/*
6491 * FUNCTION: WDA_EnterUapsdReqCallback
6492 * send Enter UAPSD RSP back to PE
6493 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006494void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006495{
6496 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6497 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006498 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006500 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006501 if(NULL == pWdaParams)
6502 {
6503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006504 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 VOS_ASSERT(0) ;
6506 return ;
6507 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006508
6509 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6510 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6511
6512 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6513 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6514
Jeff Johnson295189b2012-06-20 16:38:30 -07006515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6516 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006517 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006518 return ;
6519}
Jeff Johnson295189b2012-06-20 16:38:30 -07006520/*
6521 * FUNCTION: WDA_ProcessEnterUapsdReq
6522 * Request to WDI to Enter UAPSD power state.
6523 */
6524VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6525 tUapsdParams *pEnterUapsdReqParams)
6526{
6527 WDI_Status status = WDI_STATUS_SUCCESS ;
6528 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6529 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6530 sizeof(WDI_EnterUapsdReqParamsType)) ;
6531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006534 if(NULL == wdiEnterUapsdReqParams)
6535 {
6536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 VOS_ASSERT(0);
6539 return VOS_STATUS_E_NOMEM;
6540 }
6541 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6542 if(NULL == pWdaParams)
6543 {
6544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006546 VOS_ASSERT(0);
6547 vos_mem_free(wdiEnterUapsdReqParams);
6548 return VOS_STATUS_E_NOMEM;
6549 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6551 pEnterUapsdReqParams->beDeliveryEnabled;
6552 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6553 pEnterUapsdReqParams->beTriggerEnabled;
6554 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6555 pEnterUapsdReqParams->bkDeliveryEnabled;
6556 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6557 pEnterUapsdReqParams->bkTriggerEnabled;
6558 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6559 pEnterUapsdReqParams->viDeliveryEnabled;
6560 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6561 pEnterUapsdReqParams->viTriggerEnabled;
6562 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6563 pEnterUapsdReqParams->voDeliveryEnabled;
6564 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6565 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006566 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006567
6568 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6569
Jeff Johnson295189b2012-06-20 16:38:30 -07006570 /* Store param pointer as passed in by caller */
6571 /* store Params pass it to WDI */
6572 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6573 pWdaParams->pWdaContext = pWDA;
6574 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6576 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006577 if(IS_WDI_STATUS_FAILURE(status))
6578 {
6579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6580 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6581 vos_mem_free(pWdaParams->wdaMsgParam) ;
6582 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6583 vos_mem_free(pWdaParams) ;
6584 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006585 return CONVERT_WDI2VOS_STATUS(status) ;
6586}
Jeff Johnson295189b2012-06-20 16:38:30 -07006587/*
6588 * FUNCTION: WDA_ExitUapsdReqCallback
6589 * send Exit UAPSD RSP back to PE
6590 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006591void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006592{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006593
6594 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6595 tWDA_CbContext *pWDA;
6596 tExitUapsdParams *pExitUapsdRspParams;
6597
Jeff Johnson295189b2012-06-20 16:38:30 -07006598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006599 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006600 if(NULL == pWdaParams)
6601 {
6602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006603 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006604 VOS_ASSERT(0);
6605 return;
6606 }
6607
6608 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6609 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6610
6611 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6612 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6613
6614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6615 vos_mem_free(pWdaParams) ;
6616
6617 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006618 return ;
6619}
Jeff Johnson295189b2012-06-20 16:38:30 -07006620/*
6621 * FUNCTION: WDA_ProcessExitUapsdReq
6622 * Request to WDI to Exit UAPSD power state.
6623 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006624VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6625 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006626{
6627 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006628 tWDA_ReqParams *pWdaParams ;
6629 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6630 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6631 sizeof(WDI_ExitUapsdReqParamsType)) ;
6632
Jeff Johnson295189b2012-06-20 16:38:30 -07006633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006634 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006635
6636 if(NULL == wdiExitUapsdReqParams)
6637 {
6638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006639 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006640 VOS_ASSERT(0);
6641 return VOS_STATUS_E_NOMEM;
6642 }
6643 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6644 if(NULL == pWdaParams)
6645 {
6646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006647 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006648 VOS_ASSERT(0);
6649 vos_mem_free(wdiExitUapsdReqParams);
6650 return VOS_STATUS_E_NOMEM;
6651 }
6652
6653 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6654 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6655
6656 /* Store param pointer as passed in by caller */
6657 /* store Params pass it to WDI */
6658 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6659 pWdaParams->pWdaContext = pWDA;
6660 pWdaParams->wdaMsgParam = pExitUapsdParams;
6661
6662 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006663 if(IS_WDI_STATUS_FAILURE(status))
6664 {
6665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6666 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006667 vos_mem_free(pWdaParams->wdaMsgParam) ;
6668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6669 vos_mem_free(pWdaParams) ;
6670
Jeff Johnson295189b2012-06-20 16:38:30 -07006671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 return CONVERT_WDI2VOS_STATUS(status) ;
6673}
6674
Jeff Johnson295189b2012-06-20 16:38:30 -07006675/*
6676 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6677 *
6678 */
6679void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6680{
6681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006683 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 if(NULL == pWdaParams)
6685 {
6686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 VOS_ASSERT(0) ;
6689 return ;
6690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 if( pWdaParams != NULL )
6692 {
6693 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6694 {
6695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6696 }
6697 if( pWdaParams->wdaMsgParam != NULL )
6698 {
6699 vos_mem_free(pWdaParams->wdaMsgParam) ;
6700 }
6701 vos_mem_free(pWdaParams) ;
6702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006703 return ;
6704}
Jeff Johnson295189b2012-06-20 16:38:30 -07006705/*
6706 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6707 * Request to WDI to set the power save params at start.
6708 */
6709VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6710 tSirPowerSaveCfg *pPowerSaveCfg)
6711{
6712 WDI_Status status = WDI_STATUS_SUCCESS ;
6713 tHalCfg *tlvStruct = NULL ;
6714 tANI_U8 *tlvStructStart = NULL ;
6715 v_PVOID_t *configParam;
6716 tANI_U32 configParamSize;
6717 tANI_U32 *configDataValue;
6718 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6719 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006721 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6723 {
6724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006727 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 return VOS_STATUS_E_FAILURE;
6729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6731 if (NULL == wdiPowerSaveCfg)
6732 {
6733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006736 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 return VOS_STATUS_E_NOMEM;
6738 }
6739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6740 if(NULL == pWdaParams)
6741 {
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 VOS_ASSERT(0);
6745 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006746 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 return VOS_STATUS_E_NOMEM;
6748 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006749 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6750 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 if(NULL == configParam)
6752 {
6753 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006754 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006755 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 vos_mem_free(pWdaParams);
6757 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006758 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006759 return VOS_STATUS_E_NOMEM;
6760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 vos_mem_set(configParam, configParamSize, 0);
6762 wdiPowerSaveCfg->pConfigBuffer = configParam;
6763 tlvStruct = (tHalCfg *)configParam;
6764 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6766 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6767 tlvStruct->length = sizeof(tANI_U32);
6768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6769 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6771 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6773 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6774 tlvStruct->length = sizeof(tANI_U32);
6775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6776 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6778 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6780 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6781 tlvStruct->length = sizeof(tANI_U32);
6782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6783 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6785 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6787 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6788 tlvStruct->length = sizeof(tANI_U32);
6789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6790 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6794 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6795 tlvStruct->length = sizeof(tANI_U32);
6796 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6797 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6799 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6801 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6802 tlvStruct->length = sizeof(tANI_U32);
6803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6804 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6806 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6808 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6809 tlvStruct->length = sizeof(tANI_U32);
6810 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6811 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6815 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6816 tlvStruct->length = sizeof(tANI_U32);
6817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6818 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6819 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6820 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6822 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6823 tlvStruct->length = sizeof(tANI_U32);
6824 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6825 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6826 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6827 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006828 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6829 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6830 tlvStruct->length = sizeof(tANI_U32);
6831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6832 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6834 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006835 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6836 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6837 tlvStruct->length = sizeof(tANI_U32);
6838 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6839 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6841 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006843 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 /* store Params pass it to WDI */
6845 pWdaParams->wdaMsgParam = configParam;
6846 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6847 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6849 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 if(IS_WDI_STATUS_FAILURE(status))
6851 {
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6853 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6854 vos_mem_free(pWdaParams->wdaMsgParam);
6855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6856 vos_mem_free(pWdaParams);
6857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 return CONVERT_WDI2VOS_STATUS(status);
6860}
Jeff Johnson295189b2012-06-20 16:38:30 -07006861/*
6862 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6863 *
6864 */
6865void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6866{
6867 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6871 vos_mem_free(pWdaParams);
6872
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 return ;
6874}
Jeff Johnson295189b2012-06-20 16:38:30 -07006875/*
6876 * FUNCTION: WDA_SetUapsdAcParamsReq
6877 * Request to WDI to set the UAPSD params for an ac (sta mode).
6878 */
6879VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6880 tUapsdInfo *pUapsdInfo)
6881{
6882 WDI_Status status = WDI_STATUS_SUCCESS;
6883 tWDA_CbContext *pWDA = NULL ;
6884 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6885 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6886 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6887 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006889 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006890 if(NULL == wdiUapsdParams)
6891 {
6892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 VOS_ASSERT(0);
6895 return VOS_STATUS_E_NOMEM;
6896 }
6897 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6898 if(NULL == pWdaParams)
6899 {
6900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006901 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006902 VOS_ASSERT(0);
6903 vos_mem_free(wdiUapsdParams);
6904 return VOS_STATUS_E_NOMEM;
6905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6907 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6908 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6909 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6910 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6911 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 pWdaParams->pWdaContext = pWDA;
6915 /* Store param pointer as passed in by caller */
6916 pWdaParams->wdaMsgParam = pUapsdInfo;
6917 /* store Params pass it to WDI */
6918 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6920 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6921 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 if(IS_WDI_STATUS_FAILURE(status))
6923 {
6924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6925 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6927 vos_mem_free(pWdaParams);
6928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6930 return VOS_STATUS_SUCCESS;
6931 else
6932 return VOS_STATUS_E_FAILURE;
6933
Jeff Johnson295189b2012-06-20 16:38:30 -07006934}
6935/*
6936 * FUNCTION: WDA_ClearUapsdAcParamsReq
6937 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6938 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6939 * and again enter the UPASD with the modified params. Hence the disable
6940 * function was kept empty.
6941 *
6942 */
6943VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6944{
6945 /* do nothing */
6946 return VOS_STATUS_SUCCESS;
6947}
Jeff Johnson295189b2012-06-20 16:38:30 -07006948/*
6949 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6950 *
6951 */
6952void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6953{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6955
Jeff Johnson295189b2012-06-20 16:38:30 -07006956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006957 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006958
6959 if(NULL == pWdaParams)
6960 {
6961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006962 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006963 VOS_ASSERT(0) ;
6964 return ;
6965 }
6966
6967 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6968 vos_mem_free(pWdaParams->wdaMsgParam);
6969 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006970
Jeff Johnson295189b2012-06-20 16:38:30 -07006971 //print a msg, nothing else to do
6972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6973 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006974 return ;
6975}
Jeff Johnson295189b2012-06-20 16:38:30 -07006976/*
6977 * FUNCTION: WDA_UpdateUapsdParamsReq
6978 * Request to WDI to update UAPSD params (in softAP mode) for a station.
6979 */
6980VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
6981 tUpdateUapsdParams* pUpdateUapsdInfo)
6982{
6983 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07006984 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006985 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
6986 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
6987 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006988 tWDA_ReqParams *pWdaParams = NULL;
6989
Jeff Johnson295189b2012-06-20 16:38:30 -07006990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006992 if(NULL == wdiUpdateUapsdParams)
6993 {
6994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 VOS_ASSERT(0);
6997 return VOS_STATUS_E_NOMEM;
6998 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7000 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7001 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007002
7003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7004 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 {
7006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007007 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007009 vos_mem_free(pUpdateUapsdInfo);
7010 vos_mem_free(wdiUpdateUapsdParams);
7011 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007013 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007014 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007016 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7017 pWdaParams->pWdaContext = pWDA;
7018
Jeff Johnson43971f52012-07-17 12:26:56 -07007019 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007020 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7021 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007022
Jeff Johnson43971f52012-07-17 12:26:56 -07007023 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 {
7025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7026 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007027 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7029 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007030 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007032 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007033}
Jeff Johnson295189b2012-06-20 16:38:30 -07007034/*
7035 * FUNCTION: WDA_ConfigureRxpFilterCallback
7036 *
7037 */
7038void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7039{
7040 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007042 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007043 if(WDI_STATUS_SUCCESS != wdiStatus)
7044 {
7045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007046 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007048 if(NULL == pWdaParams)
7049 {
7050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007051 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007052 VOS_ASSERT(0) ;
7053 return ;
7054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007055 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7056 vos_mem_free(pWdaParams->wdaMsgParam);
7057 vos_mem_free(pWdaParams);
7058 return ;
7059}
Jeff Johnson295189b2012-06-20 16:38:30 -07007060/*
7061 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7062 *
7063 */
7064VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7065 tSirWlanSetRxpFilters *pWlanSuspendParam)
7066{
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007068 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7070 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7071 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7072 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007074 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007075 if(NULL == wdiRxpFilterParams)
7076 {
7077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 VOS_ASSERT(0);
7080 vos_mem_free(pWlanSuspendParam);
7081 return VOS_STATUS_E_NOMEM;
7082 }
7083 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7084 if(NULL == pWdaParams)
7085 {
7086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 VOS_ASSERT(0);
7089 vos_mem_free(wdiRxpFilterParams);
7090 vos_mem_free(pWlanSuspendParam);
7091 return VOS_STATUS_E_NOMEM;
7092 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7094 pWlanSuspendParam->setMcstBcstFilter;
7095 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7096 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7097
7098 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 pWdaParams->pWdaContext = pWDA;
7100 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7101 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007102 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7104 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007105 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007106 {
7107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7108 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007109 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7111 vos_mem_free(pWdaParams->wdaMsgParam);
7112 vos_mem_free(pWdaParams);
7113 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007114 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007115}
Jeff Johnson295189b2012-06-20 16:38:30 -07007116/*
7117 * FUNCTION: WDA_WdiIndicationCallback
7118 *
7119 */
7120void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7121 void* pUserData)
7122{
7123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007124 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007125}
Jeff Johnson295189b2012-06-20 16:38:30 -07007126/*
7127 * FUNCTION: WDA_ProcessWlanSuspendInd
7128 *
7129 */
7130VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7131 tSirWlanSuspendParam *pWlanSuspendParam)
7132{
7133 WDI_Status wdiStatus;
7134 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007136 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007137 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7138 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7139 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7140 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007142 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7143 if(WDI_STATUS_PENDING == wdiStatus)
7144 {
7145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007146 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007147 }
7148 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7149 {
7150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007151 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007153 vos_mem_free(pWlanSuspendParam);
7154 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7155}
7156
Jeff Johnson295189b2012-06-20 16:38:30 -07007157/*
7158 * FUNCTION: WDA_ProcessWlanResumeCallback
7159 *
7160 */
7161void WDA_ProcessWlanResumeCallback(
7162 WDI_SuspendResumeRspParamsType *resumeRspParams,
7163 void* pUserData)
7164{
7165 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007167 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 if(NULL == pWdaParams)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 VOS_ASSERT(0) ;
7173 return ;
7174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7176 {
7177 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007178 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007180 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7181 vos_mem_free(pWdaParams->wdaMsgParam);
7182 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 return ;
7184}
Jeff Johnson295189b2012-06-20 16:38:30 -07007185/*
7186 * FUNCTION: WDA_ProcessWlanResumeReq
7187 *
7188 */
7189VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7190 tSirWlanResumeParam *pWlanResumeParam)
7191{
7192 WDI_Status wdiStatus;
7193 WDI_ResumeParamsType *wdiResumeParams =
7194 (WDI_ResumeParamsType *)vos_mem_malloc(
7195 sizeof(WDI_ResumeParamsType) ) ;
7196 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007198 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007199 if(NULL == wdiResumeParams)
7200 {
7201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007202 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 VOS_ASSERT(0);
7204 return VOS_STATUS_E_NOMEM;
7205 }
7206 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7207 if(NULL == pWdaParams)
7208 {
7209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007210 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007211 VOS_ASSERT(0);
7212 vos_mem_free(wdiResumeParams);
7213 return VOS_STATUS_E_NOMEM;
7214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7216 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007218 wdiResumeParams->wdiReqStatusCB = NULL;
7219 pWdaParams->wdaMsgParam = pWlanResumeParam;
7220 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7221 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7223 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7224 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7228 "Failure in Host Resume REQ WDI API, free all the memory " );
7229 VOS_ASSERT(0);
7230 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7231 vos_mem_free(pWdaParams->wdaMsgParam);
7232 vos_mem_free(pWdaParams);
7233 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7235}
7236
Jeff Johnson295189b2012-06-20 16:38:30 -07007237/*
7238 * FUNCTION: WDA_SetBeaconFilterReqCallback
7239 *
7240 */
7241void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7242{
7243 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007246 if(NULL == pWdaParams)
7247 {
7248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 VOS_ASSERT(0) ;
7251 return ;
7252 }
7253
7254 vos_mem_free(pWdaParams->wdaMsgParam) ;
7255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7256 vos_mem_free(pWdaParams) ;
7257 /*
7258 * No respone required for SetBeaconFilter req so just free the request
7259 * param here
7260 */
7261
Jeff Johnson295189b2012-06-20 16:38:30 -07007262 return ;
7263}
Jeff Johnson295189b2012-06-20 16:38:30 -07007264/*
7265 * FUNCTION: WDA_SetBeaconFilterReq
7266 * Request to WDI to send the beacon filtering related information.
7267 */
7268VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7269 tBeaconFilterMsg* pBeaconFilterInfo)
7270{
7271 WDI_Status status = WDI_STATUS_SUCCESS;
7272 tANI_U8 *dstPtr, *srcPtr;
7273 tANI_U8 filterLength;
7274 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7275 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7276 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7277 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007279 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007280 if(NULL == wdiBeaconFilterInfo)
7281 {
7282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 VOS_ASSERT(0);
7285 return VOS_STATUS_E_NOMEM;
7286 }
7287 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7288 if(NULL == pWdaParams)
7289 {
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007292 VOS_ASSERT(0);
7293 vos_mem_free(wdiBeaconFilterInfo);
7294 return VOS_STATUS_E_NOMEM;
7295 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7297 pBeaconFilterInfo->beaconInterval;
7298 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7299 pBeaconFilterInfo->capabilityInfo;
7300 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7301 pBeaconFilterInfo->capabilityMask;
7302 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007303
7304 //Fill the BssIdx
7305 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7306
Jeff Johnson295189b2012-06-20 16:38:30 -07007307 //Fill structure with info contained in the beaconFilterTable
7308 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7309 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7310 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7311 if(WDI_BEACON_FILTER_LEN < filterLength)
7312 {
7313 filterLength = WDI_BEACON_FILTER_LEN;
7314 }
7315 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7317 /* Store param pointer as passed in by caller */
7318 /* store Params pass it to WDI */
7319 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7320 pWdaParams->pWdaContext = pWDA;
7321 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7322
Jeff Johnson295189b2012-06-20 16:38:30 -07007323 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7324 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 if(IS_WDI_STATUS_FAILURE(status))
7326 {
7327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7328 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7329 vos_mem_free(pWdaParams->wdaMsgParam) ;
7330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7331 vos_mem_free(pWdaParams) ;
7332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 return CONVERT_WDI2VOS_STATUS(status) ;
7334}
Jeff Johnson295189b2012-06-20 16:38:30 -07007335/*
7336 * FUNCTION: WDA_RemBeaconFilterReqCallback
7337 *
7338 */
7339void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7340{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007341 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7342
Jeff Johnson295189b2012-06-20 16:38:30 -07007343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007344 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007345
7346 if(NULL == pWdaParams)
7347 {
7348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007349 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007350 VOS_ASSERT(0) ;
7351 return ;
7352 }
7353
7354 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7355 vos_mem_free(pWdaParams->wdaMsgParam);
7356 vos_mem_free(pWdaParams);
7357
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 //print a msg, nothing else to do
7359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7360 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007361 return ;
7362}
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 // TODO: PE does not have this feature for now implemented,
7364 // but the support for removing beacon filter exists between
7365 // HAL and FW. This function can be called whenever PE defines
7366 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007367/*
7368 * FUNCTION: WDA_RemBeaconFilterReq
7369 * Request to WDI to send the removal of beacon filtering related information.
7370 */
7371VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7372 tRemBeaconFilterMsg* pBeaconFilterInfo)
7373{
7374 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007375 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007376 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7377 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7378 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007379 tWDA_ReqParams *pWdaParams ;
7380
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 if(NULL == wdiBeaconFilterInfo)
7384 {
7385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 VOS_ASSERT(0);
7388 return VOS_STATUS_E_NOMEM;
7389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7391 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 //Fill structure with info contained in the ucRemIeId
7393 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7394 pBeaconFilterInfo->ucRemIeId,
7395 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7396 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007397
7398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7399 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007400 {
7401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007404 vos_mem_free(wdiBeaconFilterInfo);
7405 vos_mem_free(pBeaconFilterInfo);
7406 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 }
7408
7409 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007410 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007412 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7413
7414 pWdaParams->pWdaContext = pWDA;
7415
Jeff Johnson43971f52012-07-17 12:26:56 -07007416 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007417 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007418 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007419 {
7420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7421 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007422 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007423 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7424 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007425 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007427 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007428}
Jeff Johnson295189b2012-06-20 16:38:30 -07007429/*
7430 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7431 *
7432 */
7433void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7434{
7435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007437 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007438 if(NULL == pWdaParams)
7439 {
7440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007441 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 VOS_ASSERT(0) ;
7443 return ;
7444 }
7445
7446 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7447 vos_mem_free(pWdaParams) ;
7448
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 return ;
7450}
Jeff Johnson295189b2012-06-20 16:38:30 -07007451/*
7452 * FUNCTION: WDA_SetRSSIThresholdsReq
7453 * Request to WDI to set the RSSI thresholds (sta mode).
7454 */
7455VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7456{
7457 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007458 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007459 tWDA_CbContext *pWDA = NULL ;
7460 v_PVOID_t pVosContext = NULL;
7461 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7462 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7463 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7464 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007466 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 if(NULL == wdiRSSIThresholdsInfo)
7468 {
7469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 VOS_ASSERT(0);
7472 return VOS_STATUS_E_NOMEM;
7473 }
7474 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7475 if(NULL == pWdaParams)
7476 {
7477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007479 VOS_ASSERT(0);
7480 vos_mem_free(wdiRSSIThresholdsInfo);
7481 return VOS_STATUS_E_NOMEM;
7482 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7485 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7486 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7488 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7489 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7491 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7492 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7495 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7496
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 /* Store param pointer as passed in by caller */
7498 /* store Params pass it to WDI */
7499 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7500 pWdaParams->pWdaContext = pWDA;
7501 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007502 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007504 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 {
7506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7507 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007508 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7510 vos_mem_free(pWdaParams) ;
7511 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007512 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513
7514}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007515/*
7516 * FUNCTION: WDA_HostOffloadReqCallback
7517 *
7518 */
7519void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7520{
7521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7522
7523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007524 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007525 if(NULL == pWdaParams)
7526 {
7527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007528 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 VOS_ASSERT(0) ;
7530 return ;
7531 }
7532
7533 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7534 vos_mem_free(pWdaParams->wdaMsgParam);
7535 vos_mem_free(pWdaParams) ;
7536
7537 //print a msg, nothing else to do
7538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7539 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007540 return ;
7541}
Jeff Johnson295189b2012-06-20 16:38:30 -07007542/*
7543 * FUNCTION: WDA_ProcessHostOffloadReq
7544 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7545 * to broadcast traffic (sta mode).
7546 */
7547VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7548 tSirHostOffloadReq *pHostOffloadParams)
7549{
7550 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007551 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007552 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7553 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7554 sizeof(WDI_HostOffloadReqParamsType)) ;
7555 tWDA_ReqParams *pWdaParams ;
7556
7557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007558 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007559
7560 if(NULL == wdiHostOffloadInfo)
7561 {
7562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007564 VOS_ASSERT(0);
7565 return VOS_STATUS_E_NOMEM;
7566 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7568 if(NULL == pWdaParams)
7569 {
7570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007572 VOS_ASSERT(0);
7573 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007574 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007575 return VOS_STATUS_E_NOMEM;
7576 }
7577
7578 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7579 pHostOffloadParams->offloadType;
7580 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7581 pHostOffloadParams->enableOrDisable;
7582
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007583 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7584 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7585
Jeff Johnson295189b2012-06-20 16:38:30 -07007586 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7587 {
7588 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7589 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7590 pHostOffloadParams->params.hostIpv4Addr,
7591 4);
7592 break;
7593 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7594 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7595 pHostOffloadParams->params.hostIpv6Addr,
7596 16);
7597 break;
7598 case SIR_IPV6_NS_OFFLOAD:
7599 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7600 pHostOffloadParams->params.hostIpv6Addr,
7601 16);
7602
7603#ifdef WLAN_NS_OFFLOAD
7604 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7605 {
7606 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7607 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7608 16);
7609 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7610 }
7611 else
7612 {
7613 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7614 }
7615
7616 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7617 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7618 16);
7619 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7620 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7621 6);
7622
7623 //Only two are supported so let's go through them without a loop
7624 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7625 {
7626 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7627 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7628 16);
7629 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7630 }
7631 else
7632 {
7633 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7634 }
7635
7636 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7637 {
7638 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7639 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7640 16);
7641 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7642 }
7643 else
7644 {
7645 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7646 }
7647 break;
7648#endif //WLAN_NS_OFFLOAD
7649 default:
7650 {
7651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7652 "No Handling for Offload Type %x in WDA "
7653 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7654 //WDA_VOS_ASSERT(0) ;
7655 }
7656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007657 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007658
Jeff Johnson295189b2012-06-20 16:38:30 -07007659 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007660 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 /* store Params pass it to WDI */
7662 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7663 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007664
Jeff Johnson295189b2012-06-20 16:38:30 -07007665
Jeff Johnson43971f52012-07-17 12:26:56 -07007666 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007667 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7668
Jeff Johnson43971f52012-07-17 12:26:56 -07007669 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 {
7671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7672 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007673 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7675 vos_mem_free(pWdaParams->wdaMsgParam);
7676 vos_mem_free(pWdaParams) ;
7677 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007678 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007679
7680}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007681/*
7682 * FUNCTION: WDA_KeepAliveReqCallback
7683 *
7684 */
7685void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7686{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007687 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7688
Jeff Johnson295189b2012-06-20 16:38:30 -07007689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007690 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007691
7692 if(NULL == pWdaParams)
7693 {
7694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007695 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007696 VOS_ASSERT(0) ;
7697 return ;
7698 }
7699
7700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7701 vos_mem_free(pWdaParams->wdaMsgParam);
7702 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007703
Jeff Johnson295189b2012-06-20 16:38:30 -07007704 //print a msg, nothing else to do
7705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7706 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 return ;
7708}
Jeff Johnson295189b2012-06-20 16:38:30 -07007709/*
7710 * FUNCTION: WDA_ProcessKeepAliveReq
7711 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7712 * wakeup due to broadcast traffic (sta mode).
7713 */
7714VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7715 tSirKeepAliveReq *pKeepAliveParams)
7716{
7717 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007718 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007719 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7720 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7721 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722 tWDA_ReqParams *pWdaParams;
7723
Jeff Johnson295189b2012-06-20 16:38:30 -07007724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007726 if(NULL == wdiKeepAliveInfo)
7727 {
7728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007731 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 return VOS_STATUS_E_NOMEM;
7733 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007734
7735 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7736 if(NULL == pWdaParams)
7737 {
7738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007739 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007740 VOS_ASSERT(0);
7741 vos_mem_free(wdiKeepAliveInfo);
7742 vos_mem_free(pKeepAliveParams);
7743 return VOS_STATUS_E_NOMEM;
7744 }
7745
Jeff Johnson295189b2012-06-20 16:38:30 -07007746 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7747 pKeepAliveParams->packetType;
7748 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7749 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007750
7751 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7752 pKeepAliveParams->bssId,
7753 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007754
7755 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7756 {
7757 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7758 pKeepAliveParams->hostIpv4Addr,
7759 SIR_IPV4_ADDR_LEN);
7760 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7761 pKeepAliveParams->destIpv4Addr,
7762 SIR_IPV4_ADDR_LEN);
7763 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7764 pKeepAliveParams->destMacAddr,
7765 SIR_MAC_ADDR_LEN);
7766 }
7767 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7768 {
7769 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7770 SIR_IPV4_ADDR_LEN,
7771 0);
7772 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7773 SIR_IPV4_ADDR_LEN,
7774 0);
7775 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7776 SIR_MAC_ADDR_LEN,
7777 0);
7778 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007780
Jeff Johnson295189b2012-06-20 16:38:30 -07007781 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007782 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7785 pWdaParams->pWdaContext = pWDA;
7786
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7788 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7789 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7790 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7791 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7793 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7794 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7795 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7796 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7798 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7799 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7800 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7801 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7802 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7803 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7804 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7805 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7806 "TimePeriod %d PacketType %d",
7807 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7808 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007809 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007810 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7811
Jeff Johnson43971f52012-07-17 12:26:56 -07007812 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 {
7814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7815 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007816 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7818 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007819 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007821 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007822
7823}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007824/*
7825 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7826 *
7827 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007828void WDA_WowlAddBcPtrnReqCallback(
7829 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7830 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007831{
7832 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007834 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007835 if(NULL == pWdaParams)
7836 {
7837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007838 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 VOS_ASSERT(0) ;
7840 return ;
7841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7843 vos_mem_free(pWdaParams->wdaMsgParam);
7844 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 return ;
7846}
Jeff Johnson295189b2012-06-20 16:38:30 -07007847/*
7848 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7849 * Request to WDI to add WOWL Bcast pattern
7850 */
7851VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7852 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7853{
7854 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007855 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007856 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7857 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7858 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7859 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007861 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 if(NULL == wdiWowlAddBcPtrnInfo)
7863 {
7864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007865 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 VOS_ASSERT(0);
7867 return VOS_STATUS_E_NOMEM;
7868 }
7869 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7870 if(NULL == pWdaParams)
7871 {
7872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007873 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007874 VOS_ASSERT(0);
7875 vos_mem_free(wdiWowlAddBcPtrnInfo);
7876 return VOS_STATUS_E_NOMEM;
7877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7879 pWowlAddBcPtrnParams->ucPatternId;
7880 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7881 pWowlAddBcPtrnParams->ucPatternByteOffset;
7882 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7883 pWowlAddBcPtrnParams->ucPatternMaskSize;
7884 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7885 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7887 {
7888 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7889 pWowlAddBcPtrnParams->ucPattern,
7890 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7891 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7892 pWowlAddBcPtrnParams->ucPatternMask,
7893 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7894 }
7895 else
7896 {
7897 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7898 pWowlAddBcPtrnParams->ucPattern,
7899 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7900 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7901 pWowlAddBcPtrnParams->ucPatternMask,
7902 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7903
7904 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7905 pWowlAddBcPtrnParams->ucPatternExt,
7906 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7907 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7908 pWowlAddBcPtrnParams->ucPatternMaskExt,
7909 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7910 }
7911
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007912 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7913 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7914
Jeff Johnson295189b2012-06-20 16:38:30 -07007915 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007916 /* Store param pointer as passed in by caller */
7917 /* store Params pass it to WDI */
7918 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7919 pWdaParams->pWdaContext = pWDA;
7920 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007921 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007922 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007923 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 {
7925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7926 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007927 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 vos_mem_free(pWdaParams->wdaMsgParam) ;
7929 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7930 vos_mem_free(pWdaParams) ;
7931 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007932 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007933
7934}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007935/*
7936 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7937 *
7938 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007939void WDA_WowlDelBcPtrnReqCallback(
7940 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7941 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007942{
7943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007945 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007946 if(NULL == pWdaParams)
7947 {
7948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 VOS_ASSERT(0) ;
7951 return ;
7952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7954 vos_mem_free(pWdaParams->wdaMsgParam);
7955 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 return ;
7957}
Jeff Johnson295189b2012-06-20 16:38:30 -07007958/*
7959 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7960 * Request to WDI to delete WOWL Bcast pattern
7961 */
7962VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7963 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7964{
7965 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007966 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007967 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7968 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7969 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7970 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007972 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007973 if(NULL == wdiWowlDelBcPtrnInfo)
7974 {
7975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007976 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 VOS_ASSERT(0);
7978 return VOS_STATUS_E_NOMEM;
7979 }
7980 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7981 if(NULL == pWdaParams)
7982 {
7983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007984 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007985 VOS_ASSERT(0);
7986 vos_mem_free(wdiWowlDelBcPtrnInfo);
7987 return VOS_STATUS_E_NOMEM;
7988 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
7990 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007991
7992 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
7993 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
7994
Jeff Johnson295189b2012-06-20 16:38:30 -07007995 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 /* Store param pointer as passed in by caller */
7997 /* store Params pass it to WDI */
7998 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
7999 pWdaParams->pWdaContext = pWDA;
8000 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008001 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008002 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008003 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 {
8005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8006 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008007 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 vos_mem_free(pWdaParams->wdaMsgParam) ;
8009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8010 vos_mem_free(pWdaParams) ;
8011 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008012 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008013
8014}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008015/*
8016 * FUNCTION: WDA_WowlEnterReqCallback
8017 *
8018 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008019void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008020{
8021 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8022 tWDA_CbContext *pWDA;
8023 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008025 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008026 if(NULL == pWdaParams)
8027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 VOS_ASSERT(0) ;
8031 return ;
8032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8034 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8035
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008036 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8037
Jeff Johnson295189b2012-06-20 16:38:30 -07008038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8039 vos_mem_free(pWdaParams) ;
8040
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008041 pWowlEnterParams->status =
8042 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008043 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008044 return ;
8045}
Jeff Johnson295189b2012-06-20 16:38:30 -07008046/*
8047 * FUNCTION: WDA_ProcessWowlEnterReq
8048 * Request to WDI to enter WOWL
8049 */
8050VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8051 tSirHalWowlEnterParams *pWowlEnterParams)
8052{
8053 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008054 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8056 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8057 sizeof(WDI_WowlEnterReqParamsType)) ;
8058 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008060 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008061 if(NULL == wdiWowlEnterInfo)
8062 {
8063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 VOS_ASSERT(0);
8066 return VOS_STATUS_E_NOMEM;
8067 }
8068 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8069 if(NULL == pWdaParams)
8070 {
8071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008073 VOS_ASSERT(0);
8074 vos_mem_free(wdiWowlEnterInfo);
8075 return VOS_STATUS_E_NOMEM;
8076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8078 pWowlEnterParams->magicPtrn,
8079 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8081 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8083 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8085 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8087 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8089 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8091 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8093 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8095 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008096#ifdef WLAN_WAKEUP_EVENTS
8097 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8098 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8099
8100 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8101 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8102
8103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8104 pWowlEnterParams->ucWowNetScanOffloadMatch;
8105
8106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8107 pWowlEnterParams->ucWowGTKRekeyError;
8108
8109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8110 pWowlEnterParams->ucWoWBSSConnLoss;
8111#endif // WLAN_WAKEUP_EVENTS
8112
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008113 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8114 pWowlEnterParams->bssIdx;
8115
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 /* Store param pointer as passed in by caller */
8118 /* store Params pass it to WDI */
8119 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8120 pWdaParams->pWdaContext = pWDA;
8121 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008122 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008123 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008124 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 {
8126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8127 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008128 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 vos_mem_free(pWdaParams->wdaMsgParam) ;
8130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8131 vos_mem_free(pWdaParams) ;
8132 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008133 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008134
8135}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008136/*
8137 * FUNCTION: WDA_WowlExitReqCallback
8138 *
8139 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008140void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008141{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008142 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8143 tWDA_CbContext *pWDA;
8144 tSirHalWowlExitParams *pWowlExitParams;
8145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008146 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008147 if(NULL == pWdaParams)
8148 {
8149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008150 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008151 VOS_ASSERT(0) ;
8152 return ;
8153 }
8154 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8155 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8156
8157 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8158 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8159
8160 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8161 vos_mem_free(pWdaParams) ;
8162
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008164 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008165 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008166 return ;
8167}
Jeff Johnson295189b2012-06-20 16:38:30 -07008168/*
8169 * FUNCTION: WDA_ProcessWowlExitReq
8170 * Request to WDI to add WOWL Bcast pattern
8171 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008172VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8173 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008174{
8175 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008176 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008177 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8178 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8179 sizeof(WDI_WowlExitReqParamsType)) ;
8180 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008182 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008183 if(NULL == wdiWowlExitInfo)
8184 {
8185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008186 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008187 VOS_ASSERT(0);
8188 return VOS_STATUS_E_NOMEM;
8189 }
8190 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8191 if(NULL == pWdaParams)
8192 {
8193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008194 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008195 VOS_ASSERT(0);
8196 vos_mem_free(wdiWowlExitInfo);
8197 return VOS_STATUS_E_NOMEM;
8198 }
8199
8200 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8201 pWowlExitParams->bssIdx;
8202
8203 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8204
8205 /* Store param pointer as passed in by caller */
8206 /* store Params pass it to WDI */
8207 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8208 pWdaParams->pWdaContext = pWDA;
8209 pWdaParams->wdaMsgParam = pWowlExitParams;
8210
8211 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8212 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008213
Jeff Johnson43971f52012-07-17 12:26:56 -07008214 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008215 {
8216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8217 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008218 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8220 vos_mem_free(pWdaParams->wdaMsgParam);
8221 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008222 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008223 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008224}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008225/*
8226 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8227 * Request to WDI to determine whether a given station is capable of
8228 * using HW-based frame translation
8229 */
8230v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8231 tANI_U8 staIdx)
8232{
8233 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8234}
Jeff Johnson295189b2012-06-20 16:38:30 -07008235/*
8236 * FUNCTION: WDA_NvDownloadReqCallback
8237 * send NV Download RSP back to PE
8238 */
8239void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8240 void* pUserData)
8241{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008242
8243 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8244 tWDA_CbContext *pWDA;
8245
Jeff Johnson295189b2012-06-20 16:38:30 -07008246 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008247 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008248
8249 if(NULL == pWdaParams)
8250 {
8251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008252 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008253 VOS_ASSERT(0) ;
8254 return ;
8255 }
8256
8257 pWDA = pWdaParams->pWdaContext;
8258
Jeff Johnson295189b2012-06-20 16:38:30 -07008259 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8261 vos_mem_free(pWdaParams);
8262
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 return ;
8265}
Jeff Johnson295189b2012-06-20 16:38:30 -07008266/*
8267 * FUNCTION: WDA_ProcessNvDownloadReq
8268 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8269 */
8270VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8271{
8272 /* Initialize the local Variables*/
8273 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8274 v_VOID_t *pNvBuffer=NULL;
8275 v_SIZE_t bufferSize = 0;
8276 WDI_Status status = WDI_STATUS_E_FAILURE;
8277 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008278 tWDA_ReqParams *pWdaParams ;
8279
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008282 if(NULL == pWDA)
8283 {
8284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008286 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 return VOS_STATUS_E_FAILURE;
8288 }
8289
8290 /* Get the NV structure base address and size from VOS */
8291 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8293 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008294 if(NULL == wdiNvDownloadReqParam)
8295 {
8296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008297 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 VOS_ASSERT(0);
8299 return VOS_STATUS_E_NOMEM;
8300 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 /* Copy Params to wdiNvDownloadReqParam*/
8302 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8303 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304
8305 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8306 if(NULL == pWdaParams)
8307 {
8308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008309 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008310 VOS_ASSERT(0);
8311 vos_mem_free(wdiNvDownloadReqParam);
8312 return VOS_STATUS_E_NOMEM;
8313 }
8314
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008316 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8317 pWdaParams->wdaMsgParam = NULL;
8318 pWdaParams->pWdaContext = pWDA;
8319
8320
Jeff Johnson295189b2012-06-20 16:38:30 -07008321 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008322
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008324 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8325
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 if(IS_WDI_STATUS_FAILURE(status))
8327 {
8328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8329 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008330 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8331 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334}
8335/*
8336 * FUNCTION: WDA_FlushAcReqCallback
8337 * send Flush AC RSP back to TL
8338 */
8339void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8340{
8341 vos_msg_t wdaMsg = {0} ;
8342 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8343 tFlushACReq *pFlushACReqParams;
8344 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 if(NULL == pWdaParams)
8348 {
8349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008350 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 VOS_ASSERT(0) ;
8352 return ;
8353 }
8354
8355 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8356 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8357 if(NULL == pFlushACRspParams)
8358 {
8359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008361 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008362 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008363 return ;
8364 }
8365 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8366 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8367 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8368 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8369 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8370 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 vos_mem_free(pWdaParams->wdaMsgParam) ;
8372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8373 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008374 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8375 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8376 // POST message to TL
8377 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8378
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 return ;
8380}
Jeff Johnson295189b2012-06-20 16:38:30 -07008381/*
8382 * FUNCTION: WDA_ProcessFlushAcReq
8383 * Request to WDI to Update the DELBA REQ params.
8384 */
8385VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8386 tFlushACReq *pFlushAcReqParams)
8387{
8388 WDI_Status status = WDI_STATUS_SUCCESS ;
8389 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8390 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8391 sizeof(WDI_FlushAcReqParamsType)) ;
8392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008393 if(NULL == wdiFlushAcReqParam)
8394 {
8395 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008396 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 VOS_ASSERT(0);
8398 return VOS_STATUS_E_NOMEM;
8399 }
8400 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8401 if(NULL == pWdaParams)
8402 {
8403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008404 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 VOS_ASSERT(0);
8406 vos_mem_free(wdiFlushAcReqParam);
8407 return VOS_STATUS_E_NOMEM;
8408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008410 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008411 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8412 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8413 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8414 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 /* Store Flush AC pointer, as this will be used for response */
8416 /* store Params pass it to WDI */
8417 pWdaParams->pWdaContext = pWDA;
8418 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8419 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8421 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 if(IS_WDI_STATUS_FAILURE(status))
8423 {
8424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8425 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8426 vos_mem_free(pWdaParams->wdaMsgParam) ;
8427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8428 vos_mem_free(pWdaParams) ;
8429 //TODO: respond to TL with failure
8430 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008432}
Jeff Johnson295189b2012-06-20 16:38:30 -07008433/*
8434 * FUNCTION: WDA_BtAmpEventReqCallback
8435 *
8436 */
8437void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8438{
8439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8440 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008441 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008442
8443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 if(NULL == pWdaParams)
8446 {
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 VOS_ASSERT(0) ;
8450 return ;
8451 }
8452 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8453 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8454 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8455 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8456 {
8457 pWDA->wdaAmpSessionOn = VOS_FALSE;
8458 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008459 vos_mem_free(pWdaParams->wdaMsgParam) ;
8460 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8461 vos_mem_free(pWdaParams) ;
8462 /*
8463 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8464 * param here
8465 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008466 return ;
8467}
8468
Jeff Johnson295189b2012-06-20 16:38:30 -07008469/*
8470 * FUNCTION: WDA_ProcessBtAmpEventReq
8471 * Request to WDI to Update with BT AMP events.
8472 */
8473VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8474 tSmeBtAmpEvent *pBtAmpEventParams)
8475{
8476 WDI_Status status = WDI_STATUS_SUCCESS ;
8477 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8478 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8479 sizeof(WDI_BtAmpEventParamsType)) ;
8480 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008482 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008483 if(NULL == wdiBtAmpEventParam)
8484 {
8485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008486 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 VOS_ASSERT(0);
8488 return VOS_STATUS_E_NOMEM;
8489 }
8490 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8491 if(NULL == pWdaParams)
8492 {
8493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008494 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 VOS_ASSERT(0);
8496 vos_mem_free(wdiBtAmpEventParam);
8497 return VOS_STATUS_E_NOMEM;
8498 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8500 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008501 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008502 /* Store BT AMP event pointer, as this will be used for response */
8503 /* store Params pass it to WDI */
8504 pWdaParams->pWdaContext = pWDA;
8505 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8506 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8508 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 if(IS_WDI_STATUS_FAILURE(status))
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8512 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8513 vos_mem_free(pWdaParams->wdaMsgParam) ;
8514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8515 vos_mem_free(pWdaParams) ;
8516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008517 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8518 {
8519 pWDA->wdaAmpSessionOn = VOS_TRUE;
8520 }
8521 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008522}
8523
Jeff Johnson295189b2012-06-20 16:38:30 -07008524#ifdef ANI_MANF_DIAG
8525/*
8526 * FUNCTION: WDA_FTMCommandReqCallback
8527 * Handle FTM CMD response came from HAL
8528 * Route responce to HDD FTM
8529 */
8530void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8531 void *usrData)
8532{
8533 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8535 {
8536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008537 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 return;
8539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008540 /* Release Current FTM Command Request */
8541 vos_mem_free(pWDA->wdaFTMCmdReq);
8542 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008543#ifndef WLAN_FTM_STUB
8544 /* Post FTM Responce to HDD FTM */
8545 wlan_sys_ftm(ftmCmdRspData);
8546#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 return;
8548}
Jeff Johnson295189b2012-06-20 16:38:30 -07008549/*
8550 * FUNCTION: WDA_ProcessFTMCommand
8551 * Send FTM command to WDI
8552 */
8553VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8554 tPttMsgbuffer *pPTTFtmCmd)
8555{
8556 WDI_Status status = WDI_STATUS_SUCCESS;
8557 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008558 ftmCMDReq = (WDI_FTMCommandReqType *)
8559 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8560 if(NULL == ftmCMDReq)
8561 {
8562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8563 "WDA FTM Command buffer alloc fail");
8564 return VOS_STATUS_E_NOMEM;
8565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8567 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008568 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 /* Send command to WDI */
8570 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008571 return status;
8572}
8573#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008574#ifdef FEATURE_OEM_DATA_SUPPORT
8575/*
8576 * FUNCTION: WDA_StartOemDataReqCallback
8577 *
8578 */
8579void WDA_StartOemDataReqCallback(
8580 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8581 void* pUserData)
8582{
8583 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008584 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8585 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008586 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008587
Jeff Johnsone7245742012-09-05 17:12:55 -07008588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008589 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008590
8591 if(NULL == pWdaParams)
8592 {
8593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008594 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008595 VOS_ASSERT(0) ;
8596 return ;
8597 }
8598 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8599
Jeff Johnsone7245742012-09-05 17:12:55 -07008600 if(NULL == pWDA)
8601 {
8602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008603 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008604 VOS_ASSERT(0);
8605 return ;
8606 }
8607
8608 /*
8609 * Allocate memory for response params sent to PE
8610 */
8611 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8612
8613 // Check if memory is allocated for OemdataMeasRsp Params.
8614 if(NULL == pOemDataRspParams)
8615 {
8616 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8617 "OEM DATA WDA callback alloc fail");
8618 VOS_ASSERT(0) ;
8619 return;
8620 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621
Jeff Johnsone7245742012-09-05 17:12:55 -07008622 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8624 vos_mem_free(pWdaParams->wdaMsgParam);
8625 vos_mem_free(pWdaParams) ;
8626
Jeff Johnsone7245742012-09-05 17:12:55 -07008627 /*
8628 * Now go ahead and copy other stuff for PE in incase of sucess only
8629 * Also, here success always means that we have atleast one BSSID.
8630 */
8631 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8632
8633 //enable Tx
8634 status = WDA_ResumeDataTx(pWDA);
8635 if(status != VOS_STATUS_SUCCESS)
8636 {
8637 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8638 }
8639 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8640 return ;
8641}
8642/*
8643 * FUNCTION: WDA_ProcessStartOemDataReq
8644 * Send Start Oem Data Req to WDI
8645 */
8646VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8647 tStartOemDataReq *pOemDataReqParams)
8648{
8649 WDI_Status status = WDI_STATUS_SUCCESS;
8650 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008651 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008652
8653 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8654
8655 if(NULL == wdiOemDataReqParams)
8656 {
8657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008658 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008659 VOS_ASSERT(0);
8660 return VOS_STATUS_E_NOMEM;
8661 }
8662
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008663 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8664 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8665 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8666 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008667
8668 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8669
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008670 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8671 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008672 {
8673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008674 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008675 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008676 vos_mem_free(pOemDataReqParams);
8677 VOS_ASSERT(0);
8678 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008679 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008680
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008681 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8682 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8683
8684 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8685 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008686
8687 if(IS_WDI_STATUS_FAILURE(status))
8688 {
8689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8690 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008691 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8692 vos_mem_free(pWdaParams->wdaMsgParam);
8693 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008694 }
8695 return CONVERT_WDI2VOS_STATUS(status) ;
8696}
8697#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008698/*
8699 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8700 *
8701 */
8702void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8703{
8704 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008706 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008707 if(NULL == pWdaParams)
8708 {
8709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008710 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 VOS_ASSERT(0) ;
8712 return ;
8713 }
8714
8715 if(NULL != pWdaParams->wdaMsgParam)
8716 {
8717 vos_mem_free(pWdaParams->wdaMsgParam);
8718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8720 {
8721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8722 }
8723
8724 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008725 return ;
8726}
Jeff Johnson295189b2012-06-20 16:38:30 -07008727#ifdef WLAN_FEATURE_GTK_OFFLOAD
8728/*
8729 * FUNCTION: WDA_HostOffloadReqCallback
8730 *
8731 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008732void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8733 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008734{
8735 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8736
8737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008738 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008739
8740 VOS_ASSERT(NULL != pWdaParams);
8741
8742 vos_mem_free(pWdaParams->wdaMsgParam) ;
8743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8744 vos_mem_free(pWdaParams) ;
8745
8746 //print a msg, nothing else to do
8747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8748 "WDA_GTKOffloadReqCallback invoked " );
8749
8750 return ;
8751}
8752
8753/*
8754 * FUNCTION: WDA_ProcessGTKOffloadReq
8755 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8756 * to broadcast traffic (sta mode).
8757 */
8758VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8759 tpSirGtkOffloadParams pGtkOffloadParams)
8760{
8761 VOS_STATUS status = VOS_STATUS_SUCCESS;
8762 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8763 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8764 sizeof(WDI_GtkOffloadReqMsg)) ;
8765 tWDA_ReqParams *pWdaParams ;
8766
8767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008768 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008769
8770 if(NULL == wdiGtkOffloadReqMsg)
8771 {
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008773 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008774 VOS_ASSERT(0);
8775 return VOS_STATUS_E_NOMEM;
8776 }
8777
8778 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8779 if(NULL == pWdaParams)
8780 {
8781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 VOS_ASSERT(0);
8784 vos_mem_free(wdiGtkOffloadReqMsg);
8785 return VOS_STATUS_E_NOMEM;
8786 }
8787
8788 //
8789 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8790 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008791
8792 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8793 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8794
Jeff Johnson295189b2012-06-20 16:38:30 -07008795 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8796 // Copy KCK
8797 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8798 // Copy KEK
8799 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8800 // Copy KeyReplayCounter
8801 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8802 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8803
8804 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8805
8806 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8807 (NULL == pWDA->wdaWdiApiMsgParam));
8808
8809 /* Store Params pass it to WDI */
8810 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8811 pWdaParams->pWdaContext = pWDA;
8812 /* Store param pointer as passed in by caller */
8813 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8814
8815 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8816
8817 if(IS_WDI_STATUS_FAILURE(status))
8818 {
8819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8820 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8822 vos_mem_free(pWdaParams->wdaMsgParam);
8823 vos_mem_free(pWdaParams);
8824 }
8825
8826 return CONVERT_WDI2VOS_STATUS(status) ;
8827}
8828
8829/*
8830 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8831 *
8832 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008833void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8834 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008835{
8836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8837 tWDA_CbContext *pWDA;
8838 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8839 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8840 tANI_U8 i;
8841 vos_msg_t vosMsg;
8842
8843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008844 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008845
8846 VOS_ASSERT(NULL != pWdaParams);
8847
8848 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8849 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8850
8851 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8852 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8853
8854 /* Message Header */
8855 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8856 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8857
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008858 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8859 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8860 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8861 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8862 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8863 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008864
8865 /* VOS message wrapper */
8866 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8867 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8868 vosMsg.bodyval = 0;
8869
8870 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8871 {
8872 /* free the mem and return */
8873 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8874 }
8875
8876 vos_mem_free(pWdaParams->wdaMsgParam) ;
8877 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8878 vos_mem_free(pWdaParams) ;
8879}
8880#endif
8881
8882/*
8883 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8884 * Request to WDI to set Tx Per Tracking configurations
8885 */
8886VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8887{
8888 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008889 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008890 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8891 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8892 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8893 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008895 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008896 if(NULL == pwdiSetTxPerTrackingReqParams)
8897 {
8898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 vos_mem_free(pTxPerTrackingParams);
8901 VOS_ASSERT(0);
8902 return VOS_STATUS_E_NOMEM;
8903 }
8904 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8905 if(NULL == pWdaParams)
8906 {
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8910 vos_mem_free(pTxPerTrackingParams);
8911 VOS_ASSERT(0);
8912 return VOS_STATUS_E_NOMEM;
8913 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008914 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8915 pTxPerTrackingParams->ucTxPerTrackingEnable;
8916 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8917 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8918 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8919 pTxPerTrackingParams->ucTxPerTrackingRatio;
8920 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8921 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 /* Store param pointer as passed in by caller */
8924 /* store Params pass it to WDI
8925 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8926 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8927 pWdaParams->pWdaContext = pWDA;
8928 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008929 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008930 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008931 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8934 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008935 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 vos_mem_free(pWdaParams->wdaMsgParam) ;
8937 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8938 vos_mem_free(pWdaParams) ;
8939 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008940 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008941
8942}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008943/*
8944 * FUNCTION: WDA_HALDumpCmdCallback
8945 * Send the VOS complete .
8946 */
8947void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8948 void* pUserData)
8949{
8950 tANI_U8 *buffer = NULL;
8951 tWDA_CbContext *pWDA = NULL;
8952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008953 if(NULL == pWdaParams)
8954 {
8955 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008956 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 VOS_ASSERT(0) ;
8958 return ;
8959 }
8960
8961 pWDA = pWdaParams->pWdaContext;
8962 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008963 if(wdiRspParams->usBufferLen > 0)
8964 {
8965 /*Copy the Resp data to UMAC supplied buffer*/
8966 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008968 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8969 vos_mem_free(pWdaParams);
8970
8971 /* Indicate VOSS about the start complete */
8972 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008973 return ;
8974}
8975
Jeff Johnson295189b2012-06-20 16:38:30 -07008976/*
8977 * FUNCTION: WDA_ProcessHALDumpCmdReq
8978 * Send Dump command to WDI
8979 */
8980VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
8981 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
8982 tANI_U32 arg4, tANI_U8 *pBuffer)
8983{
8984 WDI_Status status = WDI_STATUS_SUCCESS;
8985 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
8986 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
8987 tWDA_ReqParams *pWdaParams ;
8988 pVosContextType pVosContext = NULL;
8989 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
8991 (void *)pMac);
8992
8993 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8994 if(NULL == pWdaParams)
8995 {
8996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008997 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 return VOS_STATUS_E_NOMEM;
8999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009000 /* Allocate memory WDI request structure*/
9001 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9002 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9003 if(NULL == wdiHALDumpCmdReqParam)
9004 {
9005 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9006 "WDA HAL DUMP Command buffer alloc fail");
9007 vos_mem_free(pWdaParams);
9008 return WDI_STATUS_E_FAILURE;
9009 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009010 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009011 /* Extract the arguments */
9012 wdiHalDumpCmdInfo->command = cmd;
9013 wdiHalDumpCmdInfo->argument1 = arg1;
9014 wdiHalDumpCmdInfo->argument2 = arg2;
9015 wdiHalDumpCmdInfo->argument3 = arg3;
9016 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009017 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009018 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9019
9020 /* Response message will be passed through the buffer */
9021 pWdaParams->wdaMsgParam = (void *)pBuffer;
9022
9023 /* store Params pass it to WDI */
9024 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 /* Send command to WDI */
9026 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 if ( vStatus != VOS_STATUS_SUCCESS )
9029 {
9030 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9031 {
9032 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009033 "%s: Timeout occured before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 }
9035 else
9036 {
9037 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009038 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 }
9040 VOS_ASSERT(0);
9041 }
9042 return status;
9043}
Jeff Johnson295189b2012-06-20 16:38:30 -07009044#ifdef WLAN_FEATURE_GTK_OFFLOAD
9045/*
9046 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9047 * Request to WDI to get GTK Offload Information
9048 */
9049VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9050 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9051{
9052 VOS_STATUS status = VOS_STATUS_SUCCESS;
9053 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9054 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9055 tWDA_ReqParams *pWdaParams ;
9056
9057 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9058 {
9059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 VOS_ASSERT(0);
9062 return VOS_STATUS_E_NOMEM;
9063 }
9064
9065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9066 if(NULL == pWdaParams)
9067 {
9068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 VOS_ASSERT(0);
9071 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9072 return VOS_STATUS_E_NOMEM;
9073 }
9074
9075 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9076
9077 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9078 (NULL == pWDA->wdaWdiApiMsgParam));
9079
9080 /* Store Params pass it to WDI */
9081 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9082 pWdaParams->pWdaContext = pWDA;
9083 /* Store param pointer as passed in by caller */
9084 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9085
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009086 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9087 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9088
Jeff Johnson295189b2012-06-20 16:38:30 -07009089 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9090
9091 if(IS_WDI_STATUS_FAILURE(status))
9092 {
9093 /* failure returned by WDI API */
9094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9095 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9096 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9097 vos_mem_free(pWdaParams) ;
9098 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9099 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9100 }
9101
9102 return CONVERT_WDI2VOS_STATUS(status) ;
9103}
9104#endif // WLAN_FEATURE_GTK_OFFLOAD
9105
9106/*
9107 * -------------------------------------------------------------------------
9108 * DATA interface with WDI for Mgmt Frames
9109 * -------------------------------------------------------------------------
9110 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009111/*
9112 * FUNCTION: WDA_TxComplete
9113 * Callback function for the WDA_TxPacket
9114 */
9115VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9116 VOS_STATUS status )
9117{
9118
9119 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9120 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009121 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009122
9123 if(NULL == wdaContext)
9124 {
9125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9126 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009127 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009128 VOS_ASSERT(0);
9129 return VOS_STATUS_E_FAILURE;
9130 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009131
9132 /*Check if frame was timed out or not*/
9133 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9134 (v_PVOID_t)&uUserData);
9135
9136 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9137 {
9138 /*Discard frame - no further processing is needed*/
9139 vos_pkt_return_packet(pData);
9140 return VOS_STATUS_SUCCESS;
9141 }
9142
Jeff Johnson295189b2012-06-20 16:38:30 -07009143 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9144 if( NULL!=wdaContext->pTxCbFunc)
9145 {
9146 /*check if packet is freed already*/
9147 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9148 {
9149 wdaContext->pTxCbFunc(pMac, pData);
9150 }
9151 else
9152 {
9153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9154 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009155 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009156 //Return from here since we reaching here because the packet already timeout
9157 return status;
9158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009159 }
9160
9161 /*
9162 * Trigger the event to bring the HAL TL Tx complete function to come
9163 * out of wait
9164 * Let the coe above to complete the packet first. When this event is set,
9165 * the thread waiting for the event may run and set Vospacket_freed causing the original
9166 * packet not being freed.
9167 */
9168 status = vos_event_set(&wdaContext->txFrameEvent);
9169 if(!VOS_IS_STATUS_SUCCESS(status))
9170 {
9171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9172 "NEW VOS Event Set failed - status = %d \n", status);
9173 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009174 return status;
9175}
Jeff Johnson295189b2012-06-20 16:38:30 -07009176/*
9177 * FUNCTION: WDA_TxPacket
9178 * Forward TX management frame to WDI
9179 */
9180VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9181 void *pFrmBuf,
9182 tANI_U16 frmLen,
9183 eFrameType frmType,
9184 eFrameTxDir txDir,
9185 tANI_U8 tid,
9186 pWDATxRxCompFunc pCompFunc,
9187 void *pData,
9188 pWDAAckFnTxComp pAckTxComp,
9189 tANI_U8 txFlag)
9190{
9191 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9192 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9193 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9194 tANI_U8 eventIdx = 0;
9195 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9196 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009197 if((NULL == pWDA)||(NULL == pFrmBuf))
9198 {
9199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9200 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009201 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009202 VOS_ASSERT(0);
9203 return VOS_STATUS_E_FAILURE;
9204 }
9205
9206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9207 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009208 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9209 if(NULL == pMac)
9210 {
9211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009212 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009213 VOS_ASSERT(0);
9214 return VOS_STATUS_E_FAILURE;
9215 }
9216
9217
9218
9219 /* store the call back function in WDA context */
9220 pWDA->pTxCbFunc = pCompFunc;
9221 /* store the call back for the function of ackTxComplete */
9222 if( pAckTxComp )
9223 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009224 if( NULL != pWDA->pAckTxCbFunc )
9225 {
9226 /* Already TxComp is active no need to active again */
9227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9228 "There is already one request pending for tx complete\n");
9229 pWDA->pAckTxCbFunc( pMac, 0);
9230 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009231
Jeff Johnsone7245742012-09-05 17:12:55 -07009232 if( VOS_STATUS_SUCCESS !=
9233 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9234 {
9235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9236 "Tx Complete timeout Timer Stop Failed ");
9237 }
9238 else
9239 {
9240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9241 "Tx Complete timeout Timer Stop Sucess ");
9242 }
9243 }
9244
9245 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9246 pWDA->pAckTxCbFunc = pAckTxComp;
9247 if( VOS_STATUS_SUCCESS !=
9248 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9249 {
9250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9251 "Tx Complete Timer Start Failed ");
9252 pWDA->pAckTxCbFunc = NULL;
9253 return eHAL_STATUS_FAILURE;
9254 }
9255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 /* Reset the event to be not signalled */
9257 status = vos_event_reset(&pWDA->txFrameEvent);
9258 if(!VOS_IS_STATUS_SUCCESS(status))
9259 {
9260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9261 "VOS Event reset failed - status = %d\n",status);
9262 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9263 if( pAckTxComp )
9264 {
9265 pWDA->pAckTxCbFunc = NULL;
9266 if( VOS_STATUS_SUCCESS !=
9267 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9270 "Tx Complete timeout Timer Stop Failed ");
9271 }
9272 }
9273 return VOS_STATUS_E_FAILURE;
9274 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009275 /* Get system role, use the self station if in unknown role or STA role */
9276 systemRole = wdaGetGlobalSystemRole(pMac);
Jeff Johnson295189b2012-06-20 16:38:30 -07009277 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9278 (( eSYSTEM_STA_ROLE == systemRole )
9279#ifdef FEATURE_WLAN_CCX
9280 && frmType == HAL_TXRX_FRM_802_11_MGMT
9281#endif
9282 ))
9283 {
9284 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9285 }
9286
Jeff Johnsone7245742012-09-05 17:12:55 -07009287 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9288 disassoc frame reaches the HW, HAL has already deleted the peer station */
9289 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009291 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009292 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009293 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009294 /*Send Probe request frames on self sta idx*/
9295 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009297 /* Since we donot want probe responses to be retried, send probe responses
9298 through the NO_ACK queues */
9299 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9300 {
9301 //probe response is sent out using self station and no retries options.
9302 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9303 }
9304 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9305 {
9306 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9307 }
9308 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009309 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9310
9311 /*Set frame tag to 0
9312 We will use the WDA user data in order to tag a frame as expired*/
9313 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9314 (v_PVOID_t)0);
9315
9316
9317 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9318 frmLen, ucTypeSubType, tid,
9319 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9320 {
9321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9322 "Sending Mgmt Frame failed - status = %d\n", status);
9323 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9324 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9325 if( pAckTxComp )
9326 {
9327 pWDA->pAckTxCbFunc = NULL;
9328 if( VOS_STATUS_SUCCESS !=
9329 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9330 {
9331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9332 "Tx Complete timeout Timer Stop Failed ");
9333 }
9334 }
9335 return VOS_STATUS_E_FAILURE;
9336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009337 /*
9338 * Wait for the event to be set by the TL, to get the response of TX
9339 * complete, this event should be set by the Callback function called by TL
9340 */
9341 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9342 &eventIdx);
9343 if(!VOS_IS_STATUS_SUCCESS(status))
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9346 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009347 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009348 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9349 after the packet gets completed(packet freed once)*/
9350
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009351 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9352 WDA_TransportChannelDebug(0, 1);
9353
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009354 /*Tag Frame as timed out for later deletion*/
9355 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9356 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9357
Jeff Johnson295189b2012-06-20 16:38:30 -07009358 /* check whether the packet was freed already,so need not free again when
9359 * TL calls the WDA_Txcomplete routine
9360 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009361 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9362 /*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 -07009363 {
9364 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009365 } */
9366
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 if( pAckTxComp )
9368 {
9369 pWDA->pAckTxCbFunc = NULL;
9370 if( VOS_STATUS_SUCCESS !=
9371 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9372 {
9373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9374 "Tx Complete timeout Timer Stop Failed ");
9375 }
9376 }
9377 status = VOS_STATUS_E_FAILURE;
9378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009379 return status;
9380}
Jeff Johnson295189b2012-06-20 16:38:30 -07009381/*
9382 * FUNCTION: WDA_McProcessMsg
9383 * Trigger DAL-AL to start CFG download
9384 */
9385VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9386{
9387 VOS_STATUS status = VOS_STATUS_SUCCESS;
9388 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009389 if(NULL == pMsg)
9390 {
9391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009392 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 VOS_ASSERT(0);
9394 return VOS_STATUS_E_FAILURE;
9395 }
9396
9397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009398 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009399
9400 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9401 if(NULL == pWDA )
9402 {
9403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009404 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009405 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009406 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 return VOS_STATUS_E_FAILURE;
9408 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009409 /* Process all the WDA messages.. */
9410 switch( pMsg->type )
9411 {
9412 case WNI_CFG_DNLD_REQ:
9413 {
9414 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 /* call WDA complete event if config download success */
9416 if( VOS_IS_STATUS_SUCCESS(status) )
9417 {
9418 vos_WDAComplete_cback(pVosContext);
9419 }
9420 else
9421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9423 "WDA Config Download failure" );
9424 }
9425 break ;
9426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 /*
9428 * Init SCAN request from PE, convert it into DAL format
9429 * and send it to DAL
9430 */
9431 case WDA_INIT_SCAN_REQ:
9432 {
9433 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9434 break ;
9435 }
9436 /* start SCAN request from PE */
9437 case WDA_START_SCAN_REQ:
9438 {
9439 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9440 break ;
9441 }
9442 /* end SCAN request from PE */
9443 case WDA_END_SCAN_REQ:
9444 {
9445 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9446 break ;
9447 }
9448 /* end SCAN request from PE */
9449 case WDA_FINISH_SCAN_REQ:
9450 {
9451 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9452 break ;
9453 }
9454 /* join request from PE */
9455 case WDA_CHNL_SWITCH_REQ:
9456 {
9457 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9458 {
9459 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9460 }
9461 else
9462 {
9463 WDA_ProcessChannelSwitchReq(pWDA,
9464 (tSwitchChannelParams*)pMsg->bodyptr) ;
9465 }
9466 break ;
9467 }
9468 /* ADD BSS request from PE */
9469 case WDA_ADD_BSS_REQ:
9470 {
9471 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9472 break ;
9473 }
9474 case WDA_ADD_STA_REQ:
9475 {
9476 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9477 break ;
9478 }
9479 case WDA_DELETE_BSS_REQ:
9480 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009481 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9482 break ;
9483 }
9484 case WDA_DELETE_STA_REQ:
9485 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009486 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9487 break ;
9488 }
9489 case WDA_CONFIG_PARAM_UPDATE_REQ:
9490 {
9491 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9492 break ;
9493 }
9494 case WDA_SET_BSSKEY_REQ:
9495 {
9496 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9497 break ;
9498 }
9499 case WDA_SET_STAKEY_REQ:
9500 {
9501 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9502 break ;
9503 }
9504 case WDA_SET_STA_BCASTKEY_REQ:
9505 {
9506 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9507 break ;
9508 }
9509 case WDA_REMOVE_BSSKEY_REQ:
9510 {
9511 WDA_ProcessRemoveBssKeyReq(pWDA,
9512 (tRemoveBssKeyParams *)pMsg->bodyptr);
9513 break ;
9514 }
9515 case WDA_REMOVE_STAKEY_REQ:
9516 {
9517 WDA_ProcessRemoveStaKeyReq(pWDA,
9518 (tRemoveStaKeyParams *)pMsg->bodyptr);
9519 break ;
9520 }
9521 case WDA_REMOVE_STA_BCASTKEY_REQ:
9522 {
9523 /* TODO: currently UMAC is not sending this request, Add the code for
9524 handling this request when UMAC supports */
9525 break;
9526 }
9527#ifdef FEATURE_WLAN_CCX
9528 case WDA_TSM_STATS_REQ:
9529 {
9530 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9531 break;
9532 }
9533#endif
9534 case WDA_UPDATE_EDCA_PROFILE_IND:
9535 {
9536 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9537 break;
9538 }
9539 case WDA_ADD_TS_REQ:
9540 {
9541 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9542 break;
9543 }
9544 case WDA_DEL_TS_REQ:
9545 {
9546 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9547 break;
9548 }
9549 case WDA_ADDBA_REQ:
9550 {
9551 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9552 break;
9553 }
9554 case WDA_DELBA_IND:
9555 {
9556 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9557 break;
9558 }
9559 case WDA_SET_LINK_STATE:
9560 {
9561 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9562 break;
9563 }
9564 case WDA_GET_STATISTICS_REQ:
9565 {
9566 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9567 break;
9568 }
9569 case WDA_PWR_SAVE_CFG:
9570 {
9571 if(pWDA->wdaState == WDA_READY_STATE)
9572 {
9573 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9574 }
9575 else
9576 {
9577 if(NULL != pMsg->bodyptr)
9578 {
9579 vos_mem_free(pMsg->bodyptr);
9580 }
9581 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9582 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9583 }
9584 break;
9585 }
9586 case WDA_ENTER_IMPS_REQ:
9587 {
9588 if(pWDA->wdaState == WDA_READY_STATE)
9589 {
9590 WDA_ProcessEnterImpsReq(pWDA);
9591 }
9592 else
9593 {
9594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9595 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9596 }
9597 break;
9598 }
9599 case WDA_EXIT_IMPS_REQ:
9600 {
9601 if(pWDA->wdaState == WDA_READY_STATE)
9602 {
9603 WDA_ProcessExitImpsReq(pWDA);
9604 }
9605 else
9606 {
9607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9608 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9609 }
9610 break;
9611 }
9612 case WDA_ENTER_BMPS_REQ:
9613 {
9614 if(pWDA->wdaState == WDA_READY_STATE)
9615 {
9616 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9617 }
9618 else
9619 {
9620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9621 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9622 }
9623 break;
9624 }
9625 case WDA_EXIT_BMPS_REQ:
9626 {
9627 if(pWDA->wdaState == WDA_READY_STATE)
9628 {
9629 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9630 }
9631 else
9632 {
9633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9634 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9635 }
9636 break;
9637 }
9638 case WDA_ENTER_UAPSD_REQ:
9639 {
9640 if(pWDA->wdaState == WDA_READY_STATE)
9641 {
9642 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9643 }
9644 else
9645 {
9646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9647 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9648 }
9649 break;
9650 }
9651 case WDA_EXIT_UAPSD_REQ:
9652 {
9653 if(pWDA->wdaState == WDA_READY_STATE)
9654 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009655 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009656 }
9657 else
9658 {
9659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9660 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9661 }
9662 break;
9663 }
9664 case WDA_UPDATE_UAPSD_IND:
9665 {
9666 if(pWDA->wdaState == WDA_READY_STATE)
9667 {
9668 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9669 }
9670 else
9671 {
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9673 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9674 }
9675 break;
9676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 case WDA_REGISTER_PE_CALLBACK :
9678 {
9679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9680 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9681 /*TODO: store the PE callback */
9682 /* Do Nothing? MSG Body should be freed at here */
9683 if(NULL != pMsg->bodyptr)
9684 {
9685 vos_mem_free(pMsg->bodyptr);
9686 }
9687 break;
9688 }
9689 case WDA_SYS_READY_IND :
9690 {
9691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9692 "Handling msg type WDA_SYS_READY_IND " );
9693 pWDA->wdaState = WDA_READY_STATE;
9694 if(NULL != pMsg->bodyptr)
9695 {
9696 vos_mem_free(pMsg->bodyptr);
9697 }
9698 break;
9699 }
9700 case WDA_BEACON_FILTER_IND :
9701 {
9702 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9703 break;
9704 }
9705 case WDA_BTC_SET_CFG:
9706 {
9707 /*TODO: handle this while dealing with BTC */
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9709 "Handling msg type WDA_BTC_SET_CFG " );
9710 /* Do Nothing? MSG Body should be freed at here */
9711 if(NULL != pMsg->bodyptr)
9712 {
9713 vos_mem_free(pMsg->bodyptr);
9714 }
9715 break;
9716 }
9717 case WDA_SIGNAL_BT_EVENT:
9718 {
9719 /*TODO: handle this while dealing with BTC */
9720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9721 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9722 /* Do Nothing? MSG Body should be freed at here */
9723 if(NULL != pMsg->bodyptr)
9724 {
9725 vos_mem_free(pMsg->bodyptr);
9726 }
9727 break;
9728 }
9729 case WDA_CFG_RXP_FILTER_REQ:
9730 {
9731 WDA_ProcessConfigureRxpFilterReq(pWDA,
9732 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9733 break;
9734 }
9735 case WDA_SET_HOST_OFFLOAD:
9736 {
9737 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9738 break;
9739 }
9740 case WDA_SET_KEEP_ALIVE:
9741 {
9742 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9743 break;
9744 }
9745#ifdef WLAN_NS_OFFLOAD
9746 case WDA_SET_NS_OFFLOAD:
9747 {
9748 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9749 break;
9750 }
9751#endif //WLAN_NS_OFFLOAD
9752 case WDA_ADD_STA_SELF_REQ:
9753 {
9754 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9755 break;
9756 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009757 case WDA_DEL_STA_SELF_REQ:
9758 {
9759 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9760 break;
9761 }
9762 case WDA_WOWL_ADD_BCAST_PTRN:
9763 {
9764 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9765 break;
9766 }
9767 case WDA_WOWL_DEL_BCAST_PTRN:
9768 {
9769 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9770 break;
9771 }
9772 case WDA_WOWL_ENTER_REQ:
9773 {
9774 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9775 break;
9776 }
9777 case WDA_WOWL_EXIT_REQ:
9778 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009779 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009780 break;
9781 }
9782 case WDA_TL_FLUSH_AC_REQ:
9783 {
9784 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9785 break;
9786 }
9787 case WDA_SIGNAL_BTAMP_EVENT:
9788 {
9789 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9790 break;
9791 }
9792#ifdef WDA_UT
9793 case WDA_WDI_EVENT_MSG:
9794 {
9795 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9796 break ;
9797 }
9798#endif
9799 case WDA_UPDATE_BEACON_IND:
9800 {
9801 WDA_ProcessUpdateBeaconParams(pWDA,
9802 (tUpdateBeaconParams *)pMsg->bodyptr);
9803 break;
9804 }
9805 case WDA_SEND_BEACON_REQ:
9806 {
9807 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9808 break;
9809 }
9810 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9811 {
9812 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9813 (tSendProbeRespParams *)pMsg->bodyptr);
9814 break;
9815 }
9816#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9817 case WDA_SET_MAX_TX_POWER_REQ:
9818 {
9819 WDA_ProcessSetMaxTxPowerReq(pWDA,
9820 (tMaxTxPowerParams *)pMsg->bodyptr);
9821 break;
9822 }
9823#endif
9824#ifdef WLAN_FEATURE_P2P
9825 case WDA_SET_P2P_GO_NOA_REQ:
9826 {
9827 WDA_ProcessSetP2PGONOAReq(pWDA,
9828 (tP2pPsParams *)pMsg->bodyptr);
9829 break;
9830 }
9831#endif
9832 /* timer related messages */
9833 case WDA_TIMER_BA_ACTIVITY_REQ:
9834 {
9835 WDA_BaCheckActivity(pWDA) ;
9836 break ;
9837 }
9838#ifdef WLAN_FEATURE_VOWIFI_11R
9839 case WDA_AGGR_QOS_REQ:
9840 {
9841 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9842 break;
9843 }
9844#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009845#ifdef ANI_MANF_DIAG
9846 case WDA_FTM_CMD_REQ:
9847 {
9848 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9849 break ;
9850 }
9851#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009852#ifdef FEATURE_OEM_DATA_SUPPORT
9853 case WDA_START_OEM_DATA_REQ:
9854 {
9855 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9856 break;
9857 }
9858#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009859 /* Tx Complete Time out Indication */
9860 case WDA_TX_COMPLETE_TIMEOUT_IND:
9861 {
9862 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9863 break;
9864 }
9865 case WDA_WLAN_SUSPEND_IND:
9866 {
9867 WDA_ProcessWlanSuspendInd(pWDA,
9868 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9869 break;
9870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009871 case WDA_WLAN_RESUME_REQ:
9872 {
9873 WDA_ProcessWlanResumeReq(pWDA,
9874 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9875 break;
9876 }
9877
9878 case WDA_UPDATE_CF_IND:
9879 {
9880 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9881 pMsg->bodyptr = NULL;
9882 break;
9883 }
9884#ifdef FEATURE_WLAN_SCAN_PNO
9885 case WDA_SET_PNO_REQ:
9886 {
9887 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9888 break;
9889 }
9890 case WDA_UPDATE_SCAN_PARAMS_REQ:
9891 {
9892 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9893 break;
9894 }
9895 case WDA_SET_RSSI_FILTER_REQ:
9896 {
9897 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9898 break;
9899 }
9900#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009901 case WDA_SET_TX_PER_TRACKING_REQ:
9902 {
9903 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9904 break;
9905 }
9906
9907#ifdef WLAN_FEATURE_PACKET_FILTERING
9908 case WDA_8023_MULTICAST_LIST_REQ:
9909 {
9910 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9911 break;
9912 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9914 {
9915 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9916 break;
9917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009918 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9919 {
9920 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9921 break;
9922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009923 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9924 {
9925 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9926 break;
9927 }
9928#endif // WLAN_FEATURE_PACKET_FILTERING
9929
9930
9931 case WDA_TRANSMISSION_CONTROL_IND:
9932 {
9933 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9934 break;
9935 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009936 case WDA_SET_POWER_PARAMS_REQ:
9937 {
9938 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9939 break;
9940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009941#ifdef WLAN_FEATURE_GTK_OFFLOAD
9942 case WDA_GTK_OFFLOAD_REQ:
9943 {
9944 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9945 break;
9946 }
9947
9948 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9949 {
9950 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9951 break;
9952 }
9953#endif //WLAN_FEATURE_GTK_OFFLOAD
9954
9955 case WDA_SET_TM_LEVEL_REQ:
9956 {
9957 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9958 break;
9959 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009960#ifdef WLAN_FEATURE_11AC
9961 case WDA_UPDATE_OP_MODE:
9962 {
9963 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9964 {
9965 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
9966 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
9967 else
9968 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9969 " VHT OpMode Feature is Not Supported \n");
9970 }
9971 else
9972 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9973 " 11AC Feature is Not Supported \n");
9974 break;
9975 }
9976#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009977 default:
9978 {
9979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9980 "No Handling for msg type %x in WDA "
9981 ,pMsg->type);
9982 /* Do Nothing? MSG Body should be freed at here */
9983 if(NULL != pMsg->bodyptr)
9984 {
9985 vos_mem_free(pMsg->bodyptr);
9986 }
9987 //WDA_VOS_ASSERT(0) ;
9988 }
9989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009990 return status ;
9991}
9992
Jeff Johnson295189b2012-06-20 16:38:30 -07009993/*
9994 * FUNCTION: WDA_LowLevelIndCallback
9995 * IND API callback from WDI, send Ind to PE
9996 */
9997void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
9998 void* pUserData )
9999{
10000 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10001#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10002 tSirRSSINotification rssiNotification;
10003#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 if(NULL == pWDA)
10005 {
10006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010007 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010008 VOS_ASSERT(0);
10009 return ;
10010 }
10011
10012 switch(wdiLowLevelInd->wdiIndicationType)
10013 {
10014 case WDI_RSSI_NOTIFICATION_IND:
10015 {
10016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10017 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010018#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10019 rssiNotification.bReserved =
10020 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10021 rssiNotification.bRssiThres1NegCross =
10022 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10023 rssiNotification.bRssiThres1PosCross =
10024 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10025 rssiNotification.bRssiThres2NegCross =
10026 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10027 rssiNotification.bRssiThres2PosCross =
10028 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10029 rssiNotification.bRssiThres3NegCross =
10030 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10031 rssiNotification.bRssiThres3PosCross =
10032 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Jeff Johnson295189b2012-06-20 16:38:30 -070010033 WLANTL_BMPSRSSIRegionChangedNotification(
10034 pWDA->pVosContext,
10035 &rssiNotification);
10036#endif
10037 break ;
10038 }
10039 case WDI_MISSED_BEACON_IND:
10040 {
10041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10042 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010043 /* send IND to PE */
10044 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10045 break ;
10046 }
10047 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10048 {
10049 /* TODO: Decode Ind and send Ind to PE */
10050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10051 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10052 break ;
10053 }
10054
10055 case WDI_MIC_FAILURE_IND:
10056 {
10057 tpSirSmeMicFailureInd pMicInd =
10058 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10059
10060 if(NULL == pMicInd)
10061 {
10062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010063 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 break;
10065 }
10066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10067 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010068 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10069 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10070 vos_mem_copy(pMicInd->bssId,
10071 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10072 sizeof(tSirMacAddr));
10073 vos_mem_copy(pMicInd->info.srcMacAddr,
10074 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10075 sizeof(tSirMacAddr));
10076 vos_mem_copy(pMicInd->info.taMacAddr,
10077 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10078 sizeof(tSirMacAddr));
10079 vos_mem_copy(pMicInd->info.dstMacAddr,
10080 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10081 sizeof(tSirMacAddr));
10082 vos_mem_copy(pMicInd->info.rxMacAddr,
10083 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10084 sizeof(tSirMacAddr));
10085 pMicInd->info.multicast =
10086 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10087 pMicInd->info.keyId=
10088 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10089 pMicInd->info.IV1=
10090 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10091 vos_mem_copy(pMicInd->info.TSC,
10092 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010093 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10094 (void *)pMicInd , 0) ;
10095 break ;
10096 }
10097 case WDI_FATAL_ERROR_IND:
10098 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010099 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 /* TODO: Decode Ind and send Ind to PE */
10101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10102 "Received WDI_FATAL_ERROR_IND from WDI ");
10103 break ;
10104 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010105 case WDI_DEL_STA_IND:
10106 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 tpDeleteStaContext pDelSTACtx =
10108 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10109
10110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10111 "Received WDI_DEL_STA_IND from WDI ");
10112 if(NULL == pDelSTACtx)
10113 {
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010116 break;
10117 }
10118 vos_mem_copy(pDelSTACtx->addr2,
10119 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10120 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 vos_mem_copy(pDelSTACtx->bssId,
10122 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10123 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 pDelSTACtx->assocId =
10125 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10126 pDelSTACtx->reasonCode =
10127 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10128 pDelSTACtx->staId =
10129 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10131 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010132 break ;
10133 }
10134 case WDI_COEX_IND:
10135 {
10136 tANI_U32 index;
10137 vos_msg_t vosMsg;
10138 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10139 if(NULL == pSmeCoexInd)
10140 {
10141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010142 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 break;
10144 }
10145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10146 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010147 /* Message Header */
10148 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10149 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010150 /* Info from WDI Indication */
10151 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10152 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10153 {
10154 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10155 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010156 /* VOS message wrapper */
10157 vosMsg.type = eWNI_SME_COEX_IND;
10158 vosMsg.bodyptr = (void *)pSmeCoexInd;
10159 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010160 /* Send message to SME */
10161 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10162 {
10163 /* free the mem and return */
10164 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10165 }
10166 else
10167 {
10168 /* DEBUG */
10169 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10170 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10171 pSmeCoexInd->coexIndType,
10172 pSmeCoexInd->coexIndData[0],
10173 pSmeCoexInd->coexIndData[1],
10174 pSmeCoexInd->coexIndData[2],
10175 pSmeCoexInd->coexIndData[3]);
10176 }
10177 break;
10178 }
10179 case WDI_TX_COMPLETE_IND:
10180 {
10181 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10182 /* Calling TxCompleteAck Indication from wda context*/
10183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10184 "Complete Indication received from HAL");
10185 if( pWDA->pAckTxCbFunc )
10186 {
10187 if( VOS_STATUS_SUCCESS !=
10188 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10189 {
10190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10191 "Tx Complete timeout Timer Stop Failed ");
10192 }
10193 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10194 pWDA->pAckTxCbFunc = NULL;
10195 }
10196 else
10197 {
10198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10199 "Tx Complete Indication is received after timeout ");
10200 }
10201 break;
10202 }
10203#ifdef WLAN_FEATURE_P2P
10204 case WDI_P2P_NOA_ATTR_IND :
10205 {
10206 tSirP2PNoaAttr *pP2pNoaAttr =
10207 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10209 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010210 if (NULL == pP2pNoaAttr)
10211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10213 "Memory allocation failure, "
10214 "WDI_P2P_NOA_ATTR_IND not forwarded");
10215 break;
10216 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 pP2pNoaAttr->index =
10218 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10219 pP2pNoaAttr->oppPsFlag =
10220 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10221 pP2pNoaAttr->ctWin =
10222 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10223
10224 pP2pNoaAttr->uNoa1IntervalCnt =
10225 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10226 pP2pNoaAttr->uNoa1Duration =
10227 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10228 pP2pNoaAttr->uNoa1Interval =
10229 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10230 pP2pNoaAttr->uNoa1StartTime =
10231 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010232 pP2pNoaAttr->uNoa2IntervalCnt =
10233 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10234 pP2pNoaAttr->uNoa2Duration =
10235 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10236 pP2pNoaAttr->uNoa2Interval =
10237 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10238 pP2pNoaAttr->uNoa2StartTime =
10239 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010240 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10241 (void *)pP2pNoaAttr , 0) ;
10242 break;
10243 }
10244#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010245#ifdef FEATURE_WLAN_SCAN_PNO
10246 case WDI_PREF_NETWORK_FOUND_IND:
10247 {
10248 vos_msg_t vosMsg;
10249 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10251 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010252 if (NULL == pPrefNetworkFoundInd)
10253 {
10254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10255 "Memory allocation failure, "
10256 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10257 break;
10258 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 /* Message Header */
10260 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10261 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10262
10263 /* Info from WDI Indication */
10264 pPrefNetworkFoundInd->ssId.length =
10265 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10268 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10269 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 /* VOS message wrapper */
10272 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10273 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10274 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010275 /* Send message to SME */
10276 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10277 {
10278 /* free the mem and return */
10279 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10280 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 break;
10282 }
10283#endif // FEATURE_WLAN_SCAN_PNO
10284
10285#ifdef WLAN_WAKEUP_EVENTS
10286 case WDI_WAKE_REASON_IND:
10287 {
10288 vos_msg_t vosMsg;
10289 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10290 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10291 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10292
10293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10294 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10295 wdiLowLevelInd->wdiIndicationType,
10296 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10297 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10298 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10299
10300 if (NULL == pWakeReasonInd)
10301 {
10302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10303 "Memory allocation failure, "
10304 "WDI_WAKE_REASON_IND not forwarded");
10305 break;
10306 }
10307
10308 vos_mem_zero(pWakeReasonInd, allocSize);
10309
10310 /* Message Header */
10311 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10312 pWakeReasonInd->mesgLen = allocSize;
10313
10314 /* Info from WDI Indication */
10315 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10316 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10317 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10318 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10319 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10320 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10321 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10322 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10323
10324 /* VOS message wrapper */
10325 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10326 vosMsg.bodyptr = (void *) pWakeReasonInd;
10327 vosMsg.bodyval = 0;
10328
10329 /* Send message to SME */
10330 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10331 {
10332 /* free the mem and return */
10333 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10334 }
10335
10336 break;
10337 }
10338#endif // WLAN_WAKEUP_EVENTS
10339
10340 case WDI_TX_PER_HIT_IND:
10341 {
10342 vos_msg_t vosMsg;
10343 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10344 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10345 /* VOS message wrapper */
10346 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10347 vosMsg.bodyptr = NULL;
10348 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010349 /* Send message to SME */
10350 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10351 {
10352 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10353 }
10354 break;
10355 }
10356
10357 default:
10358 {
10359 /* TODO error */
10360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10361 "Received UNKNOWN Indication from WDI ");
10362 }
10363 }
10364 return ;
10365}
10366
Jeff Johnson295189b2012-06-20 16:38:30 -070010367/*
10368 * BA related processing in WDA.
10369 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010370void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10371 void* pUserData)
10372{
10373 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10374 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010375 if(NULL == pWdaParams)
10376 {
10377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010378 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010379 VOS_ASSERT(0) ;
10380 return ;
10381 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010382 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 vos_mem_free(pWdaParams->wdaMsgParam) ;
10384 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10385 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010387 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010388 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10389 {
10390 tANI_U8 i = 0 ;
10391 tBaActivityInd *baActivityInd = NULL ;
10392 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10393 tANI_U8 allocSize = sizeof(tBaActivityInd)
10394 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10395 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10396 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 if(NULL == baActivityInd)
10399 {
10400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010402 VOS_ASSERT(0) ;
10403 return;
10404 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10406 sizeof(tSirMacAddr)) ;
10407 baActivityInd->baCandidateCnt = baCandidateCount ;
10408
10409 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10410 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10411
10412 for(i = 0 ; i < baCandidateCount ; i++)
10413 {
10414 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010415 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10416 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10418 {
10419 baCandidate->baInfo[tid].fBaEnable =
10420 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10421 baCandidate->baInfo[tid].startingSeqNum =
10422 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10423 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010424 wdiBaCandidate++ ;
10425 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010427 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10428 }
10429 else
10430 {
10431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10432 "BA Trigger RSP with Failure received ");
10433 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010434 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010435}
Jeff Johnson295189b2012-06-20 16:38:30 -070010436/*
10437 * BA Activity check timer handler
10438 */
10439void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10440{
10441 tANI_U8 curSta = 0 ;
10442 tANI_U8 tid = 0 ;
10443 tANI_U8 size = 0 ;
10444 tANI_U8 baCandidateCount = 0 ;
10445 tANI_U8 newBaCandidate = 0 ;
10446 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10447
10448 if(NULL == pWDA)
10449 {
10450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010451 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010452 VOS_ASSERT(0);
10453 return ;
10454 }
10455 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10458 "Inconsistent STA entries in WDA");
10459 VOS_ASSERT(0) ;
10460 }
10461 /* walk through all STA entries and find out TX packet count */
10462 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10463 {
10464 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10465 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010466 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010467 tANI_U32 txPktCount = 0 ;
10468 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010469 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010470 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10471 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10473 curSta, tid, &txPktCount)))
10474 {
10475#if 0
10476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10477 "************* %d:%d, %d ",curSta, txPktCount,
10478 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10479#endif
10480 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010481 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010482 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10483 curSta, tid)))
10484 {
10485 /* get prepare for sending message to HAL */
10486 //baCandidate[baCandidateCount].staIdx = curSta ;
10487 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10488 newBaCandidate = WDA_ENABLE_BA ;
10489 }
10490 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10491 }
10492 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010493 /* fill the entry for all the sta with given TID's */
10494 if(WDA_ENABLE_BA == newBaCandidate)
10495 {
10496 /* move to next BA candidate */
10497 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10498 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10499 baCandidateCount++ ;
10500 newBaCandidate = WDA_DISABLE_BA ;
10501 }
10502 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 /* prepare and send message to hal */
10504 if( 0 < baCandidateCount)
10505 {
10506 WDI_Status status = WDI_STATUS_SUCCESS ;
10507 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10508 tWDA_ReqParams *pWdaParams =
10509 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 if(NULL == pWdaParams)
10511 {
10512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 VOS_ASSERT(0) ;
10515 return;
10516 }
10517 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10518 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10519 if(NULL == wdiTriggerBaReq)
10520 {
10521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010522 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010523 VOS_ASSERT(0) ;
10524 vos_mem_free(pWdaParams);
10525 return;
10526 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010527 do
10528 {
10529 WDI_TriggerBAReqinfoType *triggerBaInfo =
10530 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10531 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10532 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10533 * for each request */
10534 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10535 triggerBaInfo->ucBASessionID = 0;
10536 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10537 } while(0) ;
10538 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010540 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 pWdaParams->pWdaContext = pWDA;
10542 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10543 pWdaParams->wdaMsgParam = NULL;
10544 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10545 WDA_TriggerBaReqCallback, pWdaParams) ;
10546 if(IS_WDI_STATUS_FAILURE(status))
10547 {
10548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10549 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10550 vos_mem_free(pWdaParams->wdaMsgParam) ;
10551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10552 vos_mem_free(pWdaParams) ;
10553 }
10554 }
10555 else
10556 {
10557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10558 "There is no TID for initiating BA");
10559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 if( VOS_STATUS_SUCCESS !=
10561 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10562 {
10563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10564 "BA Activity Timer Stop Failed ");
10565 return ;
10566 }
10567 if( VOS_STATUS_SUCCESS !=
10568 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10569 {
10570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10571 "BA Activity Timer Start Failed ");
10572 return;
10573 }
10574 return ;
10575}
Jeff Johnson295189b2012-06-20 16:38:30 -070010576/*
10577 * WDA common routine to create timer used by WDA.
10578 */
10579static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10580{
Jeff Johnson295189b2012-06-20 16:38:30 -070010581 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10582 tANI_U32 val = 0 ;
10583 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10584
10585 if(NULL == pMac)
10586 {
10587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010588 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010589 VOS_ASSERT(0);
10590 return VOS_STATUS_E_FAILURE;
10591 }
10592 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10593 != eSIR_SUCCESS)
10594 {
10595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10596 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10597 return VOS_STATUS_E_FAILURE;
10598 }
10599 val = SYS_MS_TO_TICKS(val) ;
10600
10601 /* BA activity check timer */
10602 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10603 "BA Activity Check timer", WDA_TimerHandler,
10604 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10605 if(status != TX_SUCCESS)
10606 {
10607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10608 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010609 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010611 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010612 /* Tx Complete Timeout timer */
10613 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10614 "Tx Complete Check timer", WDA_TimerHandler,
10615 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010616 if(status != TX_SUCCESS)
10617 {
10618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10619 "Unable to create Tx Complete Timeout timer");
10620 /* Destroy timer of BA activity check timer */
10621 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10622 if(status != TX_SUCCESS)
10623 {
10624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010626 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010627 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010628 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010630 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010631}
Jeff Johnson295189b2012-06-20 16:38:30 -070010632/*
10633 * WDA common routine to destroy timer used by WDA.
10634 */
10635static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10636{
10637 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10639 if(status != TX_SUCCESS)
10640 {
10641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10642 "Unable to Destroy Tx Complete Timeout timer");
10643 return eSIR_FAILURE ;
10644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010645 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10646 if(status != TX_SUCCESS)
10647 {
10648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10649 "Unable to Destroy BA activity timer");
10650 return eSIR_FAILURE ;
10651 }
10652
10653 return eSIR_SUCCESS ;
10654}
Jeff Johnson295189b2012-06-20 16:38:30 -070010655/*
10656 * WDA timer handler.
10657 */
10658void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10659{
10660 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10661 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010662 /*
10663 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10664 */
10665 wdaMsg.type = timerInfo ;
10666 wdaMsg.bodyptr = NULL;
10667 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 /* post the message.. */
10669 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10670 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10671 {
10672 vosStatus = VOS_STATUS_E_BADMSG;
10673 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010674}
Jeff Johnson295189b2012-06-20 16:38:30 -070010675/*
10676 * WDA Tx Complete timeout Indication.
10677 */
10678void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10679{
10680 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 if( pWDA->pAckTxCbFunc )
10682 {
10683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10684 "TxComplete timer expired\n");
10685 pWDA->pAckTxCbFunc( pMac, 0);
10686 pWDA->pAckTxCbFunc = NULL;
10687 }
10688 else
10689 {
10690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10691 "There is no request pending for TxComplete and wait timer expired\n");
10692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010693}
Jeff Johnson295189b2012-06-20 16:38:30 -070010694/*
10695 * WDA Set REG Domain to VOS NV
10696 */
10697eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10698{
10699 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10700 {
10701 return eHAL_STATUS_INVALID_PARAMETER;
10702 }
10703 return eHAL_STATUS_SUCCESS;
10704}
10705#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10706
Jeff Johnson295189b2012-06-20 16:38:30 -070010707#ifdef FEATURE_WLAN_SCAN_PNO
10708/*
10709 * FUNCTION: WDA_PNOScanReqCallback
10710 *
10711 */
10712void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10713{
10714 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010716 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010717 if(NULL == pWdaParams)
10718 {
10719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010720 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010721 VOS_ASSERT(0) ;
10722 return ;
10723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010724 if( pWdaParams != NULL )
10725 {
10726 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10727 {
10728 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010730 if( pWdaParams->wdaMsgParam != NULL)
10731 {
10732 vos_mem_free(pWdaParams->wdaMsgParam);
10733 }
10734
10735 vos_mem_free(pWdaParams) ;
10736 }
10737
10738 return ;
10739}
Jeff Johnson295189b2012-06-20 16:38:30 -070010740/*
10741 * FUNCTION: WDA_UpdateScanParamsCallback
10742 *
10743 */
10744void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10745{
10746 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010748 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 if(NULL == pWdaParams)
10750 {
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010752 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010753 VOS_ASSERT(0) ;
10754 return ;
10755 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010756 if( pWdaParams != NULL )
10757 {
10758 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10759 {
10760 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10761 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 if( pWdaParams->wdaMsgParam != NULL)
10763 {
10764 vos_mem_free(pWdaParams->wdaMsgParam);
10765 }
10766 vos_mem_free(pWdaParams) ;
10767 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 return ;
10769}
Jeff Johnson295189b2012-06-20 16:38:30 -070010770/*
10771 * FUNCTION: WDA_SetPowerParamsCallback
10772 *
10773 */
10774void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
10775{
Jeff Johnsone7245742012-09-05 17:12:55 -070010776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010777
10778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010779 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010780 if(NULL == pWdaParams)
10781 {
10782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010783 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010784 VOS_ASSERT(0) ;
10785 return ;
10786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 if( pWdaParams != NULL )
10788 {
10789 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10790 {
10791 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010793 if( pWdaParams->wdaMsgParam != NULL)
10794 {
10795 vos_mem_free(pWdaParams->wdaMsgParam);
10796 }
10797 vos_mem_free(pWdaParams) ;
10798 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 return ;
10800}
Jeff Johnson295189b2012-06-20 16:38:30 -070010801/*
10802 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10803 * Request to WDI to set Preferred Network List.Offload
10804 */
10805VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
10806 tSirPNOScanReq *pPNOScanReqParams)
10807{
Jeff Johnson43971f52012-07-17 12:26:56 -070010808 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010809 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
10810 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
10811 tWDA_ReqParams *pWdaParams ;
10812 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010814 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010815 if(NULL == pwdiPNOScanReqInfo)
10816 {
10817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010818 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 VOS_ASSERT(0);
10820 return VOS_STATUS_E_NOMEM;
10821 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10823 if(NULL == pWdaParams)
10824 {
10825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_ASSERT(0);
10828 vos_mem_free(pwdiPNOScanReqInfo);
10829 return VOS_STATUS_E_NOMEM;
10830 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010831 //
10832 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
10833 //
10834 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
10835 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
10837 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
10838 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
10840 {
10841 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
10842 &pPNOScanReqParams->aNetworks[i],
10843 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
10844 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 /*Scan timer intervals*/
10846 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
10847 &pPNOScanReqParams->scanTimers,
10848 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070010849 /*Probe template for 2.4GHz band*/
10850 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
10851 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10852 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010853 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
10854 pPNOScanReqParams->p24GProbeTemplate,
10855 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 /*Probe template for 5GHz band*/
10857 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
10858 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10859 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
10861 pPNOScanReqParams->p5GProbeTemplate,
10862 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010864
Jeff Johnson295189b2012-06-20 16:38:30 -070010865 /* Store Params pass it to WDI */
10866 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
10867 pWdaParams->pWdaContext = pWDA;
10868 /* Store param pointer as passed in by caller */
10869 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
10871 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 if(IS_WDI_STATUS_FAILURE(status))
10873 {
10874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10875 "Failure in Set PNO REQ WDI API, free all the memory " );
10876 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10877 vos_mem_free(pWdaParams->wdaMsgParam);
10878 pWdaParams->wdaWdiApiMsgParam = NULL;
10879 pWdaParams->wdaMsgParam = NULL;
10880 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010881 return CONVERT_WDI2VOS_STATUS(status) ;
10882}
Jeff Johnson295189b2012-06-20 16:38:30 -070010883/*
10884 * FUNCTION: WDA_RssiFilterCallback
10885 *
10886 */
10887void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
10888{
10889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10890
10891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010892 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010893
10894 VOS_ASSERT(NULL != pWdaParams);
10895
10896 vos_mem_free(pWdaParams->wdaMsgParam) ;
10897 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10898 vos_mem_free(pWdaParams) ;
10899
10900 return ;
10901}
10902/*
10903 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10904 * Request to WDI to set Preferred Network List.Offload
10905 */
10906VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
10907 tSirSetRSSIFilterReq* pRssiFilterParams)
10908{
Jeff Johnson43971f52012-07-17 12:26:56 -070010909 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
10911 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
10912 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010915 if(NULL == pwdiSetRssiFilterReqInfo)
10916 {
10917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010919 VOS_ASSERT(0);
10920 return VOS_STATUS_E_NOMEM;
10921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10923 if(NULL == pWdaParams)
10924 {
10925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 VOS_ASSERT(0);
10928 vos_mem_free(pwdiSetRssiFilterReqInfo);
10929 return VOS_STATUS_E_NOMEM;
10930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010931 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
10932 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010933
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 /* Store Params pass it to WDI */
10935 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
10936 pWdaParams->pWdaContext = pWDA;
10937 /* Store param pointer as passed in by caller */
10938 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010939 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
10940 (WDI_PNOScanCb)WDA_RssiFilterCallback,
10941 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010942 if(IS_WDI_STATUS_FAILURE(status))
10943 {
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10945 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
10946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10947 vos_mem_free(pWdaParams->wdaMsgParam);
10948 pWdaParams->wdaWdiApiMsgParam = NULL;
10949 pWdaParams->wdaMsgParam = NULL;
10950 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010951 return CONVERT_WDI2VOS_STATUS(status) ;
10952}
10953
Jeff Johnson295189b2012-06-20 16:38:30 -070010954/*
10955 * FUNCTION: WDA_ProcessUpdateScanParams
10956 * Request to WDI to update Scan Parameters
10957 */
10958VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
10959 tSirUpdateScanParams *pUpdateScanParams)
10960{
Jeff Johnson43971f52012-07-17 12:26:56 -070010961 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010962 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
10963 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
10964 sizeof(WDI_UpdateScanParamsInfoType)) ;
10965 tWDA_ReqParams *pWdaParams ;
10966 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010968 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010969 if(NULL == wdiUpdateScanParamsInfoType)
10970 {
10971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010972 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010973 VOS_ASSERT(0);
10974 return VOS_STATUS_E_NOMEM;
10975 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10977 if ( NULL == pWdaParams )
10978 {
10979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 VOS_ASSERT(0);
10982 vos_mem_free(wdiUpdateScanParamsInfoType);
10983 return VOS_STATUS_E_NOMEM;
10984 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 //
10986 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
10987 //
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10989 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
10990 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
10991 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
10992 "sir struct %d wdi struct %d",
10993 pUpdateScanParams->b11dEnabled,
10994 pUpdateScanParams->b11dResolved,
10995 pUpdateScanParams->ucChannelCount,
10996 pUpdateScanParams->usPassiveMinChTime,
10997 pUpdateScanParams->usPassiveMaxChTime,
10998 pUpdateScanParams->usActiveMinChTime,
10999 pUpdateScanParams->usActiveMaxChTime,
11000 sizeof(tSirUpdateScanParams),
11001 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11002
Jeff Johnson295189b2012-06-20 16:38:30 -070011003 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11004 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011005 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11006 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11008 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011009 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11010 pUpdateScanParams->usActiveMaxChTime;
11011 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11012 pUpdateScanParams->usActiveMinChTime;
11013 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11014 pUpdateScanParams->usPassiveMaxChTime;
11015 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11016 pUpdateScanParams->usPassiveMinChTime;
11017
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011019 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11020 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011021
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 for ( i = 0; i <
11023 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11024 i++)
11025 {
11026 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11027 "Update Scan Parameters channel: %d",
11028 pUpdateScanParams->aChannels[i]);
11029
11030 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11031 pUpdateScanParams->aChannels[i];
11032 }
11033
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011035
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 /* Store Params pass it to WDI */
11037 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11038 pWdaParams->pWdaContext = pWDA;
11039 /* Store param pointer as passed in by caller */
11040 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011041
Jeff Johnson295189b2012-06-20 16:38:30 -070011042
11043
11044 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11045 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11046 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011047 if(IS_WDI_STATUS_FAILURE(status))
11048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11050 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11051 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11052 vos_mem_free(pWdaParams->wdaMsgParam);
11053 vos_mem_free(pWdaParams);
11054 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 return CONVERT_WDI2VOS_STATUS(status) ;
11056}
11057#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011058#ifdef WLAN_FEATURE_PACKET_FILTERING
11059/*
11060 * FUNCTION: WDA_8023MulticastListReqCallback
11061 *
11062 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011063void WDA_8023MulticastListReqCallback(
11064 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11065 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011066{
11067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011069 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011070 if(NULL == pWdaParams)
11071 {
11072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 VOS_ASSERT(0) ;
11075 return ;
11076 }
11077
11078 vos_mem_free(pWdaParams->wdaMsgParam) ;
11079 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11080 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011081 //print a msg, nothing else to do
11082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11083 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 return ;
11085}
Jeff Johnson295189b2012-06-20 16:38:30 -070011086/*
11087 * FUNCTION: WDA_Process8023MulticastListReq
11088 * Request to WDI to add 8023 Multicast List
11089 */
11090VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11091 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11092{
Jeff Johnson43971f52012-07-17 12:26:56 -070011093 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011094 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11095 tWDA_ReqParams *pWdaParams ;
11096 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011098 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011099 pwdiFltPktSetMcListReqParamsType =
11100 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11101 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11102 ) ;
11103 if(NULL == pwdiFltPktSetMcListReqParamsType)
11104 {
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011107 return VOS_STATUS_E_NOMEM;
11108 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11110 if(NULL == pWdaParams)
11111 {
11112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011114 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11115 return VOS_STATUS_E_NOMEM;
11116 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011117
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 //
11119 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11120 //
11121 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011122 pRcvFltMcAddrList->ulMulticastAddrCnt;
11123
11124 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11125 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11126 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11127 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11128
Jeff Johnson295189b2012-06-20 16:38:30 -070011129 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11130 {
11131 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11132 &(pRcvFltMcAddrList->multicastAddr[i]),
11133 sizeof(tSirMacAddr));
11134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011135 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011136
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 /* Store Params pass it to WDI */
11138 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11139 pWdaParams->pWdaContext = pWDA;
11140 /* Store param pointer as passed in by caller */
11141 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011142 status = WDI_8023MulticastListReq(
11143 pwdiFltPktSetMcListReqParamsType,
11144 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11145 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011146 if(IS_WDI_STATUS_FAILURE(status))
11147 {
11148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11149 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11150 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11151 vos_mem_free(pWdaParams->wdaMsgParam);
11152 vos_mem_free(pWdaParams);
11153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 return CONVERT_WDI2VOS_STATUS(status) ;
11155}
Jeff Johnson295189b2012-06-20 16:38:30 -070011156/*
11157 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11158 *
11159 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011160void WDA_ReceiveFilterSetFilterReqCallback(
11161 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11162 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011163{
11164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011166 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011167 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 if(NULL == pWdaParams)
11169 {
11170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011171 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011172 VOS_ASSERT(0) ;
11173 return ;
11174 }
11175
11176 vos_mem_free(pWdaParams->wdaMsgParam) ;
11177 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11178 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 //print a msg, nothing else to do
11180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11181 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 return ;
11183}
Jeff Johnson295189b2012-06-20 16:38:30 -070011184/*
11185 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11186 * Request to WDI to set Receive Filters
11187 */
11188VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11189 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11190{
Jeff Johnson43971f52012-07-17 12:26:56 -070011191 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11193 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11194 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11195 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11196 tWDA_ReqParams *pWdaParams ;
11197 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011199 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011200 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11201 {
11202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 VOS_ASSERT(0);
11205 return VOS_STATUS_E_NOMEM;
11206 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11208 if(NULL == pWdaParams)
11209 {
11210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 VOS_ASSERT(0);
11213 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11214 return VOS_STATUS_E_NOMEM;
11215 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011216 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11217 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11218 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11219 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011220 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11221 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11222
11223 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11224 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011225
11226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11227 "FID %d FT %d NParams %d CT %d",
11228 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11229 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11230 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11231 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011232 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11233 {
11234 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11235 &pRcvPktFilterCfg->paramsData[i],
11236 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11238 "Proto %d Comp Flag %d \n",
11239 pwdiSetRcvPktFilterReqParamsType->
11240 wdiPktFilterCfg.paramsData[i].protocolLayer,
11241 pwdiSetRcvPktFilterReqParamsType->
11242 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11244 "Data Offset %d Data Len %d\n",
11245 pwdiSetRcvPktFilterReqParamsType->
11246 wdiPktFilterCfg.paramsData[i].dataOffset,
11247 pwdiSetRcvPktFilterReqParamsType->
11248 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11250 "CData: %d:%d:%d:%d:%d:%d\n",
11251 pwdiSetRcvPktFilterReqParamsType->
11252 wdiPktFilterCfg.paramsData[i].compareData[0],
11253 pwdiSetRcvPktFilterReqParamsType->
11254 wdiPktFilterCfg.paramsData[i].compareData[1],
11255 pwdiSetRcvPktFilterReqParamsType->
11256 wdiPktFilterCfg.paramsData[i].compareData[2],
11257 pwdiSetRcvPktFilterReqParamsType->
11258 wdiPktFilterCfg.paramsData[i].compareData[3],
11259 pwdiSetRcvPktFilterReqParamsType->
11260 wdiPktFilterCfg.paramsData[i].compareData[4],
11261 pwdiSetRcvPktFilterReqParamsType->
11262 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11264 "MData: %d:%d:%d:%d:%d:%d\n",
11265 pwdiSetRcvPktFilterReqParamsType->
11266 wdiPktFilterCfg.paramsData[i].dataMask[0],
11267 pwdiSetRcvPktFilterReqParamsType->
11268 wdiPktFilterCfg.paramsData[i].dataMask[1],
11269 pwdiSetRcvPktFilterReqParamsType->
11270 wdiPktFilterCfg.paramsData[i].dataMask[2],
11271 pwdiSetRcvPktFilterReqParamsType->
11272 wdiPktFilterCfg.paramsData[i].dataMask[3],
11273 pwdiSetRcvPktFilterReqParamsType->
11274 wdiPktFilterCfg.paramsData[i].dataMask[4],
11275 pwdiSetRcvPktFilterReqParamsType->
11276 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011278 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011279 /* Store Params pass it to WDI */
11280 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11281 pWdaParams->pWdaContext = pWDA;
11282 /* Store param pointer as passed in by caller */
11283 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011284 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11285 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11286 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011287 if(IS_WDI_STATUS_FAILURE(status))
11288 {
11289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11290 "Failure in SetFilter(),free all the memory,status %d ",status);
11291 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11292 vos_mem_free(pWdaParams->wdaMsgParam);
11293 vos_mem_free(pWdaParams);
11294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011295 return CONVERT_WDI2VOS_STATUS(status) ;
11296}
Jeff Johnson295189b2012-06-20 16:38:30 -070011297/*
11298 * FUNCTION: WDA_FilterMatchCountReqCallback
11299 *
11300 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011301void WDA_FilterMatchCountReqCallback(
11302 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11303 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011304{
11305 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11306 tWDA_CbContext *pWDA;
11307 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11308 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11309 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11310 tANI_U8 i;
11311 vos_msg_t vosMsg;
11312
11313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011314 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011315 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11316
Jeff Johnsone7245742012-09-05 17:12:55 -070011317 if(NULL == pRcvFltPktMatchCntRsp)
11318 {
11319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011320 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011321 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011322 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011323 return ;
11324 }
11325
Jeff Johnson295189b2012-06-20 16:38:30 -070011326 if(NULL == pWdaParams)
11327 {
11328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011329 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011330 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011331 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011332 return ;
11333 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11335 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11337 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11338
11339 /* Message Header */
11340 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11341 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11342
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011343 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011344
11345 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11346 {
11347 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11348 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11349 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 /* VOS message wrapper */
11351 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11352 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11353 vosMsg.bodyval = 0;
11354 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11355 {
11356 /* free the mem and return */
11357 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11358 }
11359
11360 vos_mem_free(pWdaParams->wdaMsgParam) ;
11361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11362 vos_mem_free(pWdaParams) ;
11363}
Jeff Johnson295189b2012-06-20 16:38:30 -070011364/*
11365 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11366 * Request to WDI to get PC Filter Match Count
11367 */
11368VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11369{
Jeff Johnson43971f52012-07-17 12:26:56 -070011370 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011371 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11372 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11373 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011375 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11377 {
11378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011379 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011380 VOS_ASSERT(0);
11381 return VOS_STATUS_E_NOMEM;
11382 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11384 if(NULL == pWdaParams)
11385 {
11386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011387 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 VOS_ASSERT(0);
11389 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11390 return VOS_STATUS_E_NOMEM;
11391 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011392
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11394
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011395 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11396 pRcvFltPktMatchRsp->bssId,
11397 sizeof(wpt_macAddr));
11398
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 /* Store Params pass it to WDI */
11400 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11401 pWdaParams->pWdaContext = pWDA;
11402 /* Store param pointer as passed in by caller */
11403 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011404 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11405 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11406 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 if(IS_WDI_STATUS_FAILURE(status))
11408 {
11409 /* failure returned by WDI API */
11410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11411 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11412 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11413 vos_mem_free(pWdaParams) ;
11414 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11415 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11416 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011417 return CONVERT_WDI2VOS_STATUS(status) ;
11418}
Jeff Johnson295189b2012-06-20 16:38:30 -070011419/*
11420 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11421 *
11422 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011423void WDA_ReceiveFilterClearFilterReqCallback(
11424 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11425 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011426{
11427 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011429 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011430/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11431 if(NULL == pWdaParams)
11432 {
11433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011434 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011435 VOS_ASSERT(0) ;
11436 return ;
11437 }
11438
11439 vos_mem_free(pWdaParams->wdaMsgParam) ;
11440 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11441 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 //print a msg, nothing else to do
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11444 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 return ;
11446}
Jeff Johnson295189b2012-06-20 16:38:30 -070011447/*
11448 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11449 * Request to WDI to clear Receive Filters
11450 */
11451VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11452 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11453{
Jeff Johnson43971f52012-07-17 12:26:56 -070011454 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011455 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11456 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11457 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011459 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011460 if(NULL == pwdiRcvFltPktClearReqParamsType)
11461 {
11462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011464 VOS_ASSERT(0);
11465 return VOS_STATUS_E_NOMEM;
11466 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11468 if(NULL == pWdaParams)
11469 {
11470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 VOS_ASSERT(0);
11473 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11474 return VOS_STATUS_E_NOMEM;
11475 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011476 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11477 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011478 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11479 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11480 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11481 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011482
11483 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011484 /* Store Params pass it to WDI */
11485 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11486 pWdaParams->pWdaContext = pWDA;
11487 /* Store param pointer as passed in by caller */
11488 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011489 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11490 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11491 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 if(IS_WDI_STATUS_FAILURE(status))
11493 {
11494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11495 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11497 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 return CONVERT_WDI2VOS_STATUS(status) ;
11499}
11500#endif // WLAN_FEATURE_PACKET_FILTERING
11501
Jeff Johnson295189b2012-06-20 16:38:30 -070011502/*
11503 * FUNCTION: WDA_ProcessSetPowerParamsReq
11504 * Request to WDI to set power params
11505 */
11506VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11507 tSirSetPowerParamsReq *pPowerParams)
11508{
Jeff Johnson43971f52012-07-17 12:26:56 -070011509 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011510 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11511 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011514 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 if(NULL == pwdiSetPowerParamsReqInfo)
11516 {
11517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011518 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011519 VOS_ASSERT(0);
11520 return VOS_STATUS_E_NOMEM;
11521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011522 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11523 if(NULL == pWdaParams)
11524 {
11525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011526 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 VOS_ASSERT(0);
11528 vos_mem_free(pwdiSetPowerParamsReqInfo);
11529 return VOS_STATUS_E_NOMEM;
11530 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011531
Jeff Johnson295189b2012-06-20 16:38:30 -070011532
11533 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11534 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011535 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11536 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11538 pPowerParams->uListenInterval;
11539 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11540 pPowerParams->uBcastMcastFilter;
11541 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11542 pPowerParams->uEnableBET;
11543 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11544 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011545 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011546
Jeff Johnson295189b2012-06-20 16:38:30 -070011547 /* Store Params pass it to WDI */
11548 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11549 pWdaParams->pWdaContext = pWDA;
11550 /* Store param pointer as passed in by caller */
11551 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011552 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11553 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11554 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 if(IS_WDI_STATUS_FAILURE(status))
11556 {
11557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11558 "Failure in Set power params REQ WDI API, free all the memory " );
11559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11560 vos_mem_free(pWdaParams->wdaMsgParam);
11561 pWdaParams->wdaWdiApiMsgParam = NULL;
11562 pWdaParams->wdaMsgParam = NULL;
11563 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 return CONVERT_WDI2VOS_STATUS(status) ;
11565}
11566
11567/*
11568 * FUNCTION: WDA_SetTmLevelRspCallback
11569 * Set TM Level response
11570 */
11571void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11572{
11573 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11574
11575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011576 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011577
11578 if(NULL == pWdaParams)
11579 {
11580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011581 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011582 VOS_ASSERT(0) ;
11583 return ;
11584 }
11585
11586 /* Dose not need to send notification to upper layer
11587 * Just free allocated resources */
11588 if( pWdaParams != NULL )
11589 {
11590 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11591 {
11592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11593 }
11594 vos_mem_free(pWdaParams->wdaMsgParam) ;
11595 vos_mem_free(pWdaParams) ;
11596 }
11597}
11598
11599/*
11600 * FUNCTION: WDA_ProcessSetTmLevelReq
11601 * Set TM Level request
11602 */
11603VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11604 tAniSetTmLevelReq *setTmLevelReq)
11605{
11606 WDI_Status status = WDI_STATUS_SUCCESS ;
11607 tWDA_ReqParams *pWdaParams ;
11608 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11609 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11610 sizeof(WDI_SetTmLevelReqType)) ;
11611 if(NULL == wdiSetTmLevelReq)
11612 {
11613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011615 VOS_ASSERT(0);
11616 return VOS_STATUS_E_NOMEM;
11617 }
11618
11619 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11620 if(NULL == pWdaParams)
11621 {
11622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011623 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 VOS_ASSERT(0);
11625 vos_mem_free(wdiSetTmLevelReq);
11626 return VOS_STATUS_E_NOMEM;
11627 }
11628
11629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011630 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011631
11632 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11633 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11634
11635 pWdaParams->pWdaContext = pWDA;
11636 pWdaParams->wdaMsgParam = setTmLevelReq;
11637 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11638
11639 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11640 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11641
11642 if(IS_WDI_STATUS_FAILURE(status))
11643 {
11644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11645 "Failure set thernal mitigation level free all the memory " );
11646 vos_mem_free(pWdaParams->wdaMsgParam) ;
11647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11648 vos_mem_free(pWdaParams) ;
11649 }
11650
11651 return CONVERT_WDI2VOS_STATUS(status) ;
11652}
11653
11654VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11655 tpTxControlParams pTxCtrlParam)
11656{
11657 VOS_STATUS wdaStatus;
11658
11659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011661 if( pTxCtrlParam == NULL )
11662 {
11663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011664 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011665 return VOS_STATUS_E_FAILURE;
11666 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011667 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11668 {
11669 wdaStatus = WDA_SuspendDataTx(pWDA);
11670 }
11671 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11672 {
11673 wdaStatus = WDA_ResumeDataTx(pWDA);
11674 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 return wdaStatus;
11676}
11677
11678 /* FUNCTION WDA_featureCapsExchange
11679 * WDA API to invoke capability exchange between host and FW.
11680 */
11681void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11682{
11683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011684 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011685 WDI_featureCapsExchangeReq( NULL, pVosContext);
11686}
11687
11688 /* FUNCTION WDA_getHostWlanFeatCaps
11689 * Wrapper for WDI API, that will return if the feature (enum value).passed
11690 * to this API is supported or not in Host
11691 * return value
11692 * 0 - implies feature is NOT Supported
11693 * any non zero value - implies feature is SUPPORTED
11694 */
11695tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11696{
11697 return WDI_getHostWlanFeatCaps(featEnumValue);
11698}
11699
11700 /* FUNCTION WDA_getFwWlanFeatCaps
11701 * Wrapper for WDI API, that will return if the feature (enum value).passed
11702 * to this API is supported or not in FW
11703 * return value
11704 * 0 - implies feature is NOT Supported
11705 * any non zero value - implies feature is SUPPORTED
11706 */
11707tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11708{
11709 return WDI_getFwWlanFeatCaps(featEnumValue);
11710}
11711
11712/*
11713 * FUNCTION: WDA_shutdown
11714 * Shutdown WDA/WDI without handshaking with Riva.
11715 * Synchronous function.
11716 */
11717VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11718{
11719 WDI_Status wdiStatus;
11720 //tANI_U8 eventIdx = 0;
11721 VOS_STATUS status = VOS_STATUS_SUCCESS;
11722 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011723 if (NULL == pWDA)
11724 {
11725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011726 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011727 VOS_ASSERT(0);
11728 return VOS_STATUS_E_FAILURE;
11729 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 /* FTM mode stay START_STATE */
11731 if( (WDA_READY_STATE != pWDA->wdaState) &&
11732 (WDA_INIT_STATE != pWDA->wdaState) &&
11733 (WDA_START_STATE != pWDA->wdaState) )
11734 {
11735 VOS_ASSERT(0);
11736 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011737
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011738 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
11739 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070011740 {
11741 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011742 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011743 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011744
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 /* call WDI shutdown */
11746 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011747 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11748 {
11749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11750 "error in WDA Stop" );
11751 status = VOS_STATUS_E_FAILURE;
11752 }
11753 /* WDI stop is synchrnous, shutdown is complete when it returns */
11754 pWDA->wdaState = WDA_STOP_STATE;
11755
Jeff Johnson295189b2012-06-20 16:38:30 -070011756 /* shutdown should perform the stop & close actions. */
11757 /* Destroy the event */
11758 status = vos_event_destroy(&pWDA->txFrameEvent);
11759 if(!VOS_IS_STATUS_SUCCESS(status))
11760 {
11761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11762 "VOS Event destroy failed - status = %d\n", status);
11763 status = VOS_STATUS_E_FAILURE;
11764 }
11765 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
11766 if(!VOS_IS_STATUS_SUCCESS(status))
11767 {
11768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11769 "VOS Event destroy failed - status = %d\n", status);
11770 status = VOS_STATUS_E_FAILURE;
11771 }
11772 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
11773 if(!VOS_IS_STATUS_SUCCESS(status))
11774 {
11775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11776 "VOS Event destroy failed - status = %d\n", status);
11777 status = VOS_STATUS_E_FAILURE;
11778 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011779 /* free WDA context */
11780 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
11781 if ( !VOS_IS_STATUS_SUCCESS(status) )
11782 {
11783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11784 "error in WDA close " );
11785 status = VOS_STATUS_E_FAILURE;
11786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011787 return status;
11788}
Jeff Johnsone7245742012-09-05 17:12:55 -070011789/*
11790 * FUNCTION: WDA_stopFailed
11791 * WDA stop failed
11792 */
11793
11794void WDA_stopFailed(v_PVOID_t pVosContext)
11795{
11796 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011797 if(pWDA == NULL)
11798 {
11799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11800 "Could not get the WDA Context pointer" );
11801 return;
11802 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011803 pWDA->needShutdown = TRUE;
11804}
11805/*
11806 * FUNCTION: WDA_needShutdown
11807 * WDA needs a shutdown
11808 */
11809
11810v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
11811{
11812 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011813 if(pWDA == NULL)
11814 {
11815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11816 "Could not get the WDA Context pointer" );
11817 return 0;
11818 }
11819 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070011820}
11821
Mohit Khanna4a70d262012-09-11 16:30:12 -070011822#ifdef WLAN_FEATURE_11AC
11823/*
11824 * FUNCTION: WDA_SetBeaconFilterReqCallback
11825 *
11826 */
11827void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
11828{
11829 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011831 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011832 if(NULL == pWdaParams)
11833 {
11834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011835 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011836 VOS_ASSERT(0) ;
11837 return ;
11838 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011839
Mohit Khanna4a70d262012-09-11 16:30:12 -070011840 vos_mem_free(pWdaParams->wdaMsgParam) ;
11841 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11842 vos_mem_free(pWdaParams) ;
11843 /*
11844 * No respone required for SetBeaconFilter req so just free the request
11845 * param here
11846 */
11847
11848 return ;
11849}
11850
11851VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
11852 tUpdateVHTOpMode *pData)
11853{
11854 WDI_Status status = WDI_STATUS_SUCCESS ;
11855 tWDA_ReqParams *pWdaParams ;
11856 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
11857 sizeof(WDI_UpdateVHTOpMode)) ;
11858 if(NULL == wdiTemp)
11859 {
11860 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011861 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011862 VOS_ASSERT(0);
11863 return VOS_STATUS_E_NOMEM;
11864 }
11865 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11866 if(NULL == pWdaParams)
11867 {
11868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011869 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011870 VOS_ASSERT(0);
11871 vos_mem_free(wdiTemp);
11872 return VOS_STATUS_E_NOMEM;
11873 }
11874
11875 wdiTemp->opMode = pData->opMode;
11876 wdiTemp->staId = pData->staId;
11877
11878 pWdaParams->pWdaContext = pWDA;
11879 /* Store Req pointer, as this will be used for response */
11880 pWdaParams->wdaMsgParam = (void *)pData;
11881 /* store Params pass it to WDI */
11882 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
11883
11884 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
11885
11886 if(IS_WDI_STATUS_FAILURE(status))
11887 {
11888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11889 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
11890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11891 vos_mem_free(pWdaParams->wdaMsgParam);
11892 vos_mem_free(pWdaParams);
11893 }
11894 return CONVERT_WDI2VOS_STATUS(status) ;
11895}
11896#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011897
11898/*==========================================================================
11899 FUNCTION WDA_TransportChannelDebug
11900
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070011901 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011902 Display Transport Channel debugging information
11903 User may request to display DXE channel snapshot
11904 Or if host driver detects any abnormal stcuk may display
11905
11906 PARAMETERS
11907 displaySnapshot : Dispaly DXE snapshot option
11908 enableStallDetect : Enable stall detect feature
11909 This feature will take effect to data performance
11910 Not integrate till fully verification
11911
11912 RETURN VALUE
11913 NONE
11914
11915===========================================================================*/
11916void WDA_TransportChannelDebug
11917(
11918 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011919 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011920)
11921{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011922 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011923 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011924}