blob: cf5fe1a88b5604ac54dae4de357dbe1b6fa09e72 [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);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800230 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700231 }
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);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800238 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 }
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);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800245 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700246 }
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);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800252 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 }
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" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
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;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800276
277error:
278 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
279 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280}
281
Jeff Johnson295189b2012-06-20 16:38:30 -0700282/*
283 * FUNCTION: WDA_preStart
284 * Trigger DAL-AL to start CFG download
285 */
286VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
287{
288 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
289 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700290 /*
291 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
292 */
293 wdaMsg.type = WNI_CFG_DNLD_REQ ;
294 wdaMsg.bodyptr = NULL;
295 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 /* post the message.. */
297 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
298 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
299 {
300 vosStatus = VOS_STATUS_E_BADMSG;
301 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 return( vosStatus );
303}
Jeff Johnson295189b2012-06-20 16:38:30 -0700304/*
305 * FUNCTION: WDA_wdiStartCallback
306 * Once WDI_Start is finished, WDI start callback will be called by WDI
307 * to indicate completion of WDI_Start.
308 */
309void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
310 void *pVosContext)
311{
312 tWDA_CbContext *wdaContext;
313 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 if (NULL == pVosContext)
315 {
316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700317 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 return;
319 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
321 if (NULL == wdaContext)
322 {
323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700324 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return;
326 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
328 {
329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700330 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 }
332 else
333 {
334 wdaContext->wdaState = WDA_START_STATE;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 /* extract and save version information from the Start Response */
337 wdaContext->wcnssWlanCompiledVersion.major =
338 wdiRspParams->wlanCompiledVersion.major;
339 wdaContext->wcnssWlanCompiledVersion.minor =
340 wdiRspParams->wlanCompiledVersion.minor;
341 wdaContext->wcnssWlanCompiledVersion.version =
342 wdiRspParams->wlanCompiledVersion.version;
343 wdaContext->wcnssWlanCompiledVersion.revision =
344 wdiRspParams->wlanCompiledVersion.revision;
345 wdaContext->wcnssWlanReportedVersion.major =
346 wdiRspParams->wlanReportedVersion.major;
347 wdaContext->wcnssWlanReportedVersion.minor =
348 wdiRspParams->wlanReportedVersion.minor;
349 wdaContext->wcnssWlanReportedVersion.version =
350 wdiRspParams->wlanReportedVersion.version;
351 wdaContext->wcnssWlanReportedVersion.revision =
352 wdiRspParams->wlanReportedVersion.revision;
353 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
354 wdiRspParams->wcnssSoftwareVersion,
355 sizeof(wdaContext->wcnssSoftwareVersionString));
356 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
357 wdiRspParams->wcnssHardwareVersion,
358 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* Notify WDA_start that WDI_Start has completed */
360 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700361 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700366 return;
367}
368
Jeff Johnson295189b2012-06-20 16:38:30 -0700369/*
370 * FUNCTION: WDA_start
371 * Prepare TLV configuration and call WDI_Start.
372 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700373VOS_STATUS WDA_start(v_PVOID_t pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
377 WDI_Status wdiStatus;
378 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 if (NULL == pVosContext)
380 {
381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700382 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 return VOS_STATUS_E_FAILURE;
384 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
386 if (NULL == wdaContext)
387 {
388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700389 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return VOS_STATUS_E_FAILURE;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 /* Non-FTM mode, WDA status for START must be INIT
393 * FTM mode, WDA Status for START can be INIT or STOP */
394 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
395 (WDA_STOP_STATE != wdaContext->wdaState) )
396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
398 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700399 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return VOS_STATUS_E_FAILURE;
401 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 /* initialize the wdiStartParam. Note that we can create this on
403 the stack since we won't exit until WDI_Start() completes or
404 times out */
405 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 /* prepare the config TLV for the WDI */
408 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
409 if ( !VOS_IS_STATUS_SUCCESS(status) )
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* note from here onwards if an error occurs we must
416 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
418 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
419 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700420 /* initialize the WDA-WDI synchronization event */
421 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* call WDI start */
423 wdiStatus = WDI_Start(&wdiStartParam,
424 (WDI_StartRspCb)WDA_wdiStartCallback,
425 (v_VOID_t *)pVosContext);
426 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700429 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 vos_mem_free(wdiStartParam.pConfigBuffer);
431 return VOS_STATUS_E_FAILURE;
432 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 /* wait for WDI start to invoke our callback */
434 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
435 WDA_WDI_START_TIMEOUT );
436 if ( !VOS_IS_STATUS_SUCCESS(status) )
437 {
438 if ( VOS_STATUS_E_TIMEOUT == status )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 }
443 else
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
446 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700447 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
449 vos_mem_free(wdiStartParam.pConfigBuffer);
450 return VOS_STATUS_E_FAILURE;
451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 /* we no longer need the config TLV */
454 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* if we are not in the START state then WDI_Start() failed */
456 if (WDA_START_STATE != wdaContext->wdaState)
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700459 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* FTM mode does not need to monitor BA activity */
463 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
464 {
465 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800466 if(VOS_STATUS_SUCCESS == status)
467 {
468 wdaContext->wdaTimersCreated = VOS_TRUE;
469 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 return status;
472}
473
Jeff Johnson295189b2012-06-20 16:38:30 -0700474/*
475 * FUNCTION: WDA_prepareConfigTLV
476 * Function to prepare CFG for DAL(WDA)
477 */
478VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
479 WDI_StartReqParamsType *wdiStartParams )
480{
481 /* get pMac to acess CFG data base */
482 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
483 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
484 tHalCfg *tlvStruct = NULL ;
485 tANI_U8 *tlvStructStart = NULL ;
486 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
487 v_PVOID_t *configParam;
488 tANI_U32 configParamSize;
489 tANI_U32 *configDataValue;
490 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 if ((NULL == pMac)||(NULL == wdaContext))
492 {
493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700494 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 VOS_ASSERT(0);
496 return VOS_STATUS_E_FAILURE;
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
499 WNI_CFG_STA_ID_LEN +
500 WNI_CFG_EDCA_WME_ACBK_LEN +
501 WNI_CFG_EDCA_WME_ACBE_LEN +
502 WNI_CFG_EDCA_WME_ACVI_LEN +
503 WNI_CFG_EDCA_WME_ACVO_LEN +
504 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 /* malloc memory for all configs in one shot */
506 configParam = vos_mem_malloc(configParamSize);
507
508 if(NULL == configParam )
509 {
510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700511 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 VOS_ASSERT(0) ;
513 return VOS_STATUS_E_NOMEM;
514 }
515 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 tlvStruct = (tHalCfg *)configParam;
518 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 /* TODO: Remove Later */
520 /* QWLAN_HAL_CFG_STA_ID */
521 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
522 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
523 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
524 eSIR_SUCCESS)
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
527 "Failed to get value for WNI_CFG_STA_ID");
528 goto handle_failure;
529 }
530 tlvStruct->length = strLength ;
531 /* calculate the pad bytes to have the CFG in aligned format */
532 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
533 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
535 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
537 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
538 tlvStruct->length = sizeof(tANI_U32);
539 configDataValue = (tANI_U32 *)(tlvStruct + 1);
540 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
541 != eSIR_SUCCESS)
542 {
543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
544 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
545 goto handle_failure;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
548 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
550 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
551 tlvStruct->length = sizeof(tANI_U32);
552 configDataValue = (tANI_U32 *)(tlvStruct + 1);
553 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
554 eSIR_SUCCESS)
555 {
556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
557 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
558 goto handle_failure;
559 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
561 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
563 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
564 tlvStruct->length = sizeof(tANI_U32);
565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
566 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
567 != eSIR_SUCCESS)
568 {
569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
570 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
571 goto handle_failure;
572 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
574 + sizeof(tHalCfg) + tlvStruct->length)) ;
575
576 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
577 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
581 configDataValue ) != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CAL_PERIOD */
590 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
594 != eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CAL_PERIOD");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_CAL_CONTROL */
603 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_CAL_CONTROL");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 /* QWLAN_HAL_CFG_PROXIMITY */
616 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
617 tlvStruct->length = sizeof(tANI_U32);
618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
619 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
620 != eSIR_SUCCESS)
621 {
622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
623 "Failed to get value for WNI_CFG_PROXIMITY");
624 goto handle_failure;
625 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
627 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
629 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
630 tlvStruct->length = sizeof(tANI_U32);
631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
632 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
633 != eSIR_SUCCESS)
634 {
635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
636 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
637 goto handle_failure;
638 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
640 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700641 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
642 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
643 tlvStruct->length = sizeof(tANI_U32);
644 configDataValue = (tANI_U32 *)(tlvStruct + 1);
645 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
646 eSIR_SUCCESS)
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
649 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
650 goto handle_failure;
651 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
653 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
655 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
656 tlvStruct->length = sizeof(tANI_U32);
657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
658 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
659 configDataValue ) != eSIR_SUCCESS)
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
662 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
663 goto handle_failure;
664 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
666 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
668 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
669 tlvStruct->length = sizeof(tANI_U32);
670 configDataValue = (tANI_U32 *)(tlvStruct + 1);
671 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
672 eSIR_SUCCESS)
673 {
674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
675 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
676 goto handle_failure;
677 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
679 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
681 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
682 tlvStruct->length = sizeof(tANI_U32);
683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
684 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
685 eSIR_SUCCESS)
686 {
687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
688 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
689 goto handle_failure;
690 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
692 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
694 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
695 tlvStruct->length = sizeof(tANI_U32);
696 configDataValue = (tANI_U32 *)(tlvStruct + 1);
697 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
698 eSIR_SUCCESS)
699 {
700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
701 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
702 goto handle_failure;
703 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
705 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700706 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
707 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
708 tlvStruct->length = sizeof(tANI_U32);
709 configDataValue = (tANI_U32 *)(tlvStruct + 1);
710 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
711 configDataValue ) != eSIR_SUCCESS)
712 {
713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
714 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
715 goto handle_failure;
716 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700717 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
718 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
720 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
721 tlvStruct->length = sizeof(tANI_U32);
722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
723 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
724 configDataValue ) != eSIR_SUCCESS)
725 {
726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
727 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
728 goto handle_failure;
729 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700730 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
731 + sizeof(tHalCfg) + tlvStruct->length));
732
733 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
734 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
738 configDataValue ) != eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
747 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length));
759
760 /* QWLAN_HAL_CFG_FIXED_RATE */
761 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
762 tlvStruct->length = sizeof(tANI_U32);
763 configDataValue = (tANI_U32 *)(tlvStruct + 1);
764 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
765 != eSIR_SUCCESS)
766 {
767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
768 "Failed to get value for WNI_CFG_FIXED_RATE");
769 goto handle_failure;
770 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700771 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
772 + sizeof(tHalCfg) + tlvStruct->length));
773
774 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
775 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
776 tlvStruct->length = sizeof(tANI_U32);
777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
778 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
779 != eSIR_SUCCESS)
780 {
781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
782 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
783 goto handle_failure;
784 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
786 + sizeof(tHalCfg) + tlvStruct->length));
787
788 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
789 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
802 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
803 tlvStruct->length = sizeof(tANI_U32);
804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
805 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
806 configDataValue ) != eSIR_SUCCESS)
807 {
808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
809 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
810 goto handle_failure;
811 }
812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
815 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
819 configDataValue ) != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
828 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
829 tlvStruct->length = sizeof(tANI_U32);
830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
831 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
832 configDataValue ) != eSIR_SUCCESS)
833 {
834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
835 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
836 goto handle_failure;
837 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
839 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
841 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
842 tlvStruct->length = sizeof(tANI_U32);
843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
844 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
845 configDataValue ) != eSIR_SUCCESS)
846 {
847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
848 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
849 goto handle_failure;
850 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
852 + sizeof(tHalCfg) + tlvStruct->length);
853
854#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
855 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
856 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
860 configDataValue ) != eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length);
868#endif
869 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
883 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
884 tlvStruct->length = sizeof(tANI_U32);
885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
886 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
887 eSIR_SUCCESS)
888 {
889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
890 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
891 goto handle_failure;
892 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
894 + sizeof(tHalCfg) + tlvStruct->length);
895
896 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
897 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
910 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
923 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
936 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length);
948
949 /* QWLAN_HAL_CFG_STATS_PERIOD */
950 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_STATS_PERIOD");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
963 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
967 eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
976 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
980 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
982 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 /* QWLAN_HAL_CFG_DTIM_PERIOD */
984 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
988 != eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_DTIM_PERIOD");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
997 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
998 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1001 &strLength) != eSIR_SUCCESS)
1002 {
1003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1004 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1005 goto handle_failure;
1006 }
1007 tlvStruct->length = strLength;
1008 /* calculate the pad bytes to have the CFG in aligned format */
1009 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1010 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1014 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1015 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1018 &strLength) != eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1022 goto handle_failure;
1023 }
1024 tlvStruct->length = strLength;
1025 /* calculate the pad bytes to have the CFG in aligned format */
1026 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1027 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1031 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1032 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1035 &strLength) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1039 goto handle_failure;
1040 }
1041 tlvStruct->length = strLength;
1042 /* calculate the pad bytes to have the CFG in aligned format */
1043 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1044 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1048 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1049 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1052 &strLength) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1056 goto handle_failure;
1057 }
1058 tlvStruct->length = strLength;
1059 /* calculate the pad bytes to have the CFG in aligned format */
1060 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1061 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001062 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1063 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1065 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1066 tlvStruct->length = sizeof(tANI_U32);
1067 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1068 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1069 != eSIR_SUCCESS)
1070 {
1071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1072 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1073 goto handle_failure;
1074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1076 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1078 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1079 tlvStruct->length = sizeof(tANI_U32);
1080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1081 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1082 != eSIR_SUCCESS)
1083 {
1084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1085 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1086 goto handle_failure;
1087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1089 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1091 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1092 tlvStruct->length = sizeof(tANI_U32);
1093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1094 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1095 != eSIR_SUCCESS)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1098 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1099 goto handle_failure;
1100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1102 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1104 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1105 tlvStruct->length = sizeof(tANI_U32);
1106 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1107 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1108 != eSIR_SUCCESS)
1109 {
1110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1111 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1112 goto handle_failure;
1113 }
1114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1117 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1118 tlvStruct->length = sizeof(tANI_U32);
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1121 != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1125 goto handle_failure;
1126 }
1127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1128 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1130 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1131 tlvStruct->length = sizeof(tANI_U32);
1132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1133 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1134 != eSIR_SUCCESS)
1135 {
1136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1137 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1138 goto handle_failure;
1139 }
1140 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1141 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1143 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1144 tlvStruct->length = sizeof(tANI_U32);
1145 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1146 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1147 != eSIR_SUCCESS)
1148 {
1149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1150 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1151 goto handle_failure;
1152 }
1153 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1154 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1156 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1157 tlvStruct->length = sizeof(tANI_U32);
1158 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1159 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1160 != eSIR_SUCCESS)
1161 {
1162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1163 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1164 goto handle_failure;
1165 }
1166 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1167 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1169 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1170 tlvStruct->length = sizeof(tANI_U32);
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1173 != eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1177 goto handle_failure;
1178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1180 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1182 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1183 tlvStruct->length = sizeof(tANI_U32);
1184 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1185 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1186 != eSIR_SUCCESS)
1187 {
1188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1189 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1190 goto handle_failure;
1191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1193 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001194 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1195 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1196 tlvStruct->length = sizeof(tANI_U32);
1197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1198 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1199 != eSIR_SUCCESS)
1200 {
1201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1202 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1203 goto handle_failure;
1204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1206 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1208 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1209 * into FW, so the parameters are added here.
1210 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1212 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1217 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1219 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1220 tlvStruct->length = sizeof(tANI_U32);
1221 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1222 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1223 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1224 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1226 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1227 tlvStruct->length = sizeof(tANI_U32);
1228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1229 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001232 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
1239
1240 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
1247
1248 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1249 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length) ;
1255
1256 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
1263
1264 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1265 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1266 tlvStruct->length = sizeof(tANI_U32);
1267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1268 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
1271
1272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1341 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1342 wcnssCompiledApiVersion.minor,
1343 wcnssCompiledApiVersion.version,
1344 wcnssCompiledApiVersion.revision);
1345 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1346 + sizeof(tHalCfg) + tlvStruct->length) ;
1347
Jeff Johnsond13512a2012-07-17 11:42:19 -07001348 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1349 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1353 configDataValue ) != eSIR_SUCCESS)
1354 {
1355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1356 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1357 goto handle_failure;
1358 }
1359
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1363 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1364 tlvStruct->length = sizeof(tANI_U32);
1365 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1366 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1367 configDataValue ) != eSIR_SUCCESS)
1368 {
1369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1370 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1371 goto handle_failure;
1372 }
1373
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
1377 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1378 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1382 != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
Jeff Johnson295189b2012-06-20 16:38:30 -07001392 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001393#ifdef WLAN_DEBUG
1394 {
1395 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1397 "****** Dumping CFG TLV ***** ");
1398 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1399 {
1400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1401 "%02x %02x %02x %02x %02x %02x %02x %02x",
1402 tlvStructStart[i],
1403 tlvStructStart[i+1],
1404 tlvStructStart[i+2],
1405 tlvStructStart[i+3],
1406 tlvStructStart[i+4],
1407 tlvStructStart[i+5],
1408 tlvStructStart[i+6],
1409 tlvStructStart[i+7]);
1410 }
1411 /* Dump the bytes in the last line*/
1412 for (; i < wdiStartParams->usConfigBufferLen; i++)
1413 {
1414 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1415 "%02x ",tlvStructStart[i]);
1416 }
1417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1418 "**************************** ");
1419 }
1420#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001422handle_failure:
1423 vos_mem_free(configParam);
1424 return VOS_STATUS_E_FAILURE;
1425}
Jeff Johnson295189b2012-06-20 16:38:30 -07001426/*
1427 * FUNCTION: WDA_wdiCompleteCB
1428 * call the voss call back function
1429 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001430void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001431{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1433 tWDA_CbContext *wdaContext;
1434
1435 if(NULL == pWdaParams)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001438 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001439 VOS_ASSERT(0) ;
1440 return ;
1441 }
1442
1443 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1444
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 if (NULL == wdaContext)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001448 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001449 return ;
1450 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001451
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001453 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001454 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001456 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001457 vos_mem_free(pWdaParams);
1458
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 if(WDI_STATUS_SUCCESS != status)
1460 {
1461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1462 "WDI stop callback returned failure" );
1463 VOS_ASSERT(0) ;
1464 }
1465 else
1466 {
1467 wdaContext->wdaState = WDA_STOP_STATE;
1468 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001469
Jeff Johnson295189b2012-06-20 16:38:30 -07001470 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001471 vos_WDAComplete_cback(wdaContext->pVosContext);
1472
Jeff Johnson295189b2012-06-20 16:38:30 -07001473 return ;
1474}
Jeff Johnson295189b2012-06-20 16:38:30 -07001475/*
1476 * FUNCTION: WDA_stop
1477 * call WDI_stop
1478 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001479VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1480{
1481 WDI_Status wdiStatus;
1482 VOS_STATUS status = VOS_STATUS_SUCCESS;
1483 WDI_StopReqParamsType *wdiStopReq;
1484 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001485 tWDA_ReqParams *pWdaParams ;
1486
Jeff Johnson295189b2012-06-20 16:38:30 -07001487 if (NULL == pWDA)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001490 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001491 VOS_ASSERT(0);
1492 return VOS_STATUS_E_FAILURE;
1493 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001494 if (pWDA->wdiFailed == true)
1495 {
1496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001497 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001498 return VOS_STATUS_E_ALREADY;
1499 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001500
Jeff Johnson295189b2012-06-20 16:38:30 -07001501 /* FTM mode stay START_STATE */
1502 if( (WDA_READY_STATE != pWDA->wdaState) &&
1503 (WDA_INIT_STATE != pWDA->wdaState) &&
1504 (WDA_START_STATE != pWDA->wdaState) )
1505 {
1506 VOS_ASSERT(0);
1507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001508 wdiStopReq = (WDI_StopReqParamsType *)
1509 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1510 if(NULL == wdiStopReq)
1511 {
1512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001514 VOS_ASSERT(0);
1515 return VOS_STATUS_E_NOMEM;
1516 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001517
Jeff Johnson295189b2012-06-20 16:38:30 -07001518 wdiStopReq->wdiStopReason = reason;
1519 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001520
1521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1522 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 {
1524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001526 VOS_ASSERT(0);
1527 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001528 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001530
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001531 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1532 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001533 {
1534 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001535 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001536 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001537
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001538 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1539 pWdaParams->wdaMsgParam = NULL;
1540 pWdaParams->pWdaContext = pWDA;
1541
Jeff Johnson295189b2012-06-20 16:38:30 -07001542 /* call WDI stop */
1543 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001544 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1545
Jeff Johnson295189b2012-06-20 16:38:30 -07001546 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1547 {
1548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1549 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1551 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001552 status = VOS_STATUS_E_FAILURE;
1553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001554 return status;
1555}
Jeff Johnson295189b2012-06-20 16:38:30 -07001556/*
1557 * FUNCTION: WDA_close
1558 * call WDI_close and free the WDA context
1559 */
1560VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1561{
Jeff Johnson43971f52012-07-17 12:26:56 -07001562 VOS_STATUS status = VOS_STATUS_SUCCESS;
1563 WDI_Status wstatus;
1564 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001565 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 if (NULL == wdaContext)
1567 {
1568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001569 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001570 return VOS_STATUS_E_FAILURE;
1571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001572 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1573 (WDA_STOP_STATE != wdaContext->wdaState))
1574 {
1575 VOS_ASSERT(0);
1576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001577 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001578 wstatus = WDI_Close();
1579 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 {
1581 status = VOS_STATUS_E_FAILURE;
1582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001585 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1586 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001587 {
1588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1589 "WDI Sync Event destroy failed - status = %d\n", status);
1590 status = VOS_STATUS_E_FAILURE;
1591 }
1592
Jeff Johnson43971f52012-07-17 12:26:56 -07001593 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001594 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001595 {
1596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1597 "VOS Event destroy failed - status = %d\n", status);
1598 status = VOS_STATUS_E_FAILURE;
1599 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001600 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001601 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "VOS Event destroy failed - status = %d\n", status);
1605 status = VOS_STATUS_E_FAILURE;
1606 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001607 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001608 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001609 {
1610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1611 "VOS Event destroy failed - status = %d\n", status);
1612 status = VOS_STATUS_E_FAILURE;
1613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001614 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001615 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001616 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "error in WDA close " );
1620 status = VOS_STATUS_E_FAILURE;
1621 }
1622 return status;
1623}
Jeff Johnson295189b2012-06-20 16:38:30 -07001624/*
1625 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1626 * returns 1 if the compiled version is greater than or equal to the input version
1627 */
1628
1629uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1630{
1631 VOS_STATUS status = VOS_STATUS_SUCCESS;
1632 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1633 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001634 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001635 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1636 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1637 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1638 (compiledVersion.revision >= revision)))
1639 return 1;
1640 else
1641 return 0;
1642}
Jeff Johnson295189b2012-06-20 16:38:30 -07001643/*
1644 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1645 * returns 1 if the compiled version is greater than or equal to the input version
1646 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001647uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1648{
1649 VOS_STATUS status = VOS_STATUS_SUCCESS;
1650 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1651 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1654 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1655 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1656 (reportedVersion.revision >= revision)))
1657 return 1;
1658 else
1659 return 0;
1660}
Jeff Johnson295189b2012-06-20 16:38:30 -07001661/*
1662 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1663 * Returns the version of the WCNSS WLAN API with which the HOST
1664 * device driver was compiled
1665 */
1666VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1667 tSirVersionType *pVersion)
1668{
1669 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001671 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 if ((NULL == pvosGCtx) || (NULL == pVersion))
1673 {
1674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001675 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001676 VOS_ASSERT(0);
1677 return VOS_STATUS_E_FAILURE;
1678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001679 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1680 if (NULL == pWDA )
1681 {
1682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001683 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 VOS_ASSERT(0);
1685 return VOS_STATUS_E_FAILURE;
1686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 *pVersion = pWDA->wcnssWlanCompiledVersion;
1688 return VOS_STATUS_SUCCESS;
1689}
Jeff Johnson295189b2012-06-20 16:38:30 -07001690/*
1691 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1692 * Returns the version of the WCNSS WLAN API with which the WCNSS
1693 * device driver was compiled
1694 */
1695VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1696 tSirVersionType *pVersion)
1697{
1698 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001700 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 if ((NULL == pvosGCtx) || (NULL == pVersion))
1702 {
1703 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001704 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 VOS_ASSERT(0);
1706 return VOS_STATUS_E_FAILURE;
1707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1709 if (NULL == pWDA )
1710 {
1711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001712 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001713 VOS_ASSERT(0);
1714 return VOS_STATUS_E_FAILURE;
1715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 *pVersion = pWDA->wcnssWlanReportedVersion;
1717 return VOS_STATUS_SUCCESS;
1718}
Jeff Johnson295189b2012-06-20 16:38:30 -07001719/*
1720 * FUNCTION: WDA_GetWcnssSoftwareVersion
1721 * Returns the WCNSS Software version string
1722 */
1723VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1724 tANI_U8 *pVersion,
1725 tANI_U32 versionBufferSize)
1726{
1727 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001729 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 if ((NULL == pvosGCtx) || (NULL == pVersion))
1731 {
1732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001733 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 VOS_ASSERT(0);
1735 return VOS_STATUS_E_FAILURE;
1736 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001737 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1738 if (NULL == pWDA )
1739 {
1740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001741 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 VOS_ASSERT(0);
1743 return VOS_STATUS_E_FAILURE;
1744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001745 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1746 return VOS_STATUS_SUCCESS;
1747}
Jeff Johnson295189b2012-06-20 16:38:30 -07001748/*
1749 * FUNCTION: WDA_GetWcnssHardwareVersion
1750 * Returns the WCNSS Hardware version string
1751 */
1752VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1753 tANI_U8 *pVersion,
1754 tANI_U32 versionBufferSize)
1755{
1756 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001758 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 if ((NULL == pvosGCtx) || (NULL == pVersion))
1760 {
1761 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001762 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001763 VOS_ASSERT(0);
1764 return VOS_STATUS_E_FAILURE;
1765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1767 if (NULL == pWDA )
1768 {
1769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001770 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 VOS_ASSERT(0);
1772 return VOS_STATUS_E_FAILURE;
1773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1775 return VOS_STATUS_SUCCESS;
1776}
Jeff Johnson295189b2012-06-20 16:38:30 -07001777/*
1778 * FUNCTION: WDA_WniCfgDnld
1779 * Trigger CFG Download
1780 */
1781VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1782{
1783 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001784 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001785 v_VOID_t *pFileImage = NULL;
1786 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 v_VOID_t *pCfgBinary = NULL;
1788 v_SIZE_t cbCfgBinarySize = 0;
1789
1790 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 if (NULL == pMac )
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 /* get the number of bytes in the CFG Binary... */
1799 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1800 &cbFileImageSize );
1801 if ( VOS_STATUS_E_NOMEM != vosStatus )
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1804 "Error obtaining binary size" );
1805 goto fail;
1806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001807 // malloc a buffer to read in the Configuration binary file.
1808 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 if ( NULL == pFileImage )
1810 {
1811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1812 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1813 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001814 vosStatus = VOS_STATUS_E_NOMEM;
1815 goto fail;
1816 }
1817
1818 /* Get the entire CFG file image... */
1819 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1820 &cbFileImageSize );
1821 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1822 {
1823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1824 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1825 cbFileImageSize );
1826 goto fail;
1827 }
1828
1829 /*
1830 * Validate the binary image. This function will return a pointer
1831 * and length where the CFG binary is located within the binary image file.
1832 */
1833 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1834 &pCfgBinary, &cbCfgBinarySize );
1835 if ( VOS_FALSE == bStatus )
1836 {
1837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1838 "Error: Cannot find STA CFG in binary image file" );
1839 vosStatus = VOS_STATUS_E_FAILURE;
1840 goto fail;
1841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001842 /*
1843 * TODO: call the config download function
1844 * for now calling the existing cfg download API
1845 */
1846 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if( pFileImage != NULL )
1848 {
1849 vos_mem_free( pFileImage );
1850 }
1851 return vosStatus;
1852
1853fail:
1854 if(pCfgBinary != NULL)
1855 vos_mem_free( pFileImage );
1856
1857 return vosStatus;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/* -----------------------------------------------------------------
1860 * WDI interface
1861 * -----------------------------------------------------------------
1862 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001863/*
1864 * FUNCTION: WDA_suspendDataTxCallback
1865 * call back function called from TL after suspend Transmission
1866 */
1867VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1868 v_U8_t* ucSTAId,
1869 VOS_STATUS vosStatus)
1870{
1871 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001873 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 if (NULL == pWDA )
1875 {
1876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001877 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 VOS_ASSERT(0);
1879 return VOS_STATUS_E_FAILURE;
1880 }
1881 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1882 {
1883 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1884 }
1885 else
1886 {
1887 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 /* Trigger the event to bring the WDA TL suspend function to come
1890 * out of wait*/
1891 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1892 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1893 {
1894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1895 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 /* If TL suspended had timedout before this callback was called, resume back
1898 * TL.*/
1899 if (pWDA->txSuspendTimedOut)
1900 {
1901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1902 "Late TLSuspendCallback, resuming TL back again\n");
1903 WDA_ResumeDataTx(pWDA);
1904 pWDA->txSuspendTimedOut = FALSE;
1905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001906 return VOS_STATUS_SUCCESS;
1907}
Jeff Johnson295189b2012-06-20 16:38:30 -07001908/*
1909 * FUNCTION: WDA_suspendDataTx
1910 * Update TL to suspend the data Transmission
1911 */
1912VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1913{
1914 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1915 tANI_U8 eventIdx = 0;
1916 tANI_U8 ucSTAId = 0;
1917
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001919 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001921 if (pWDA->txSuspendTimedOut)
1922 {
1923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1924 "TL suspend timedout previously, CB not called yet\n");
1925 return status;
1926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001927 /* Reset the event to be not signalled */
1928 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1929 if(!VOS_IS_STATUS_SUCCESS(status))
1930 {
1931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1932 "VOS Event reset failed - status = %d\n",status);
1933 return VOS_STATUS_E_FAILURE;
1934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 /*Indicate TL to suspend transmission for all Sta Id */
1936 ucSTAId = WLAN_ALL_STA;
1937 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1938 WDA_SuspendDataTxCallback);
1939 if(status != VOS_STATUS_SUCCESS)
1940 {
1941 return status;
1942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 /* Wait for the event to be set by the TL, to get the response of
1944 * suspending the TX queues, this event should be set by the Callback
1945 * function called by TL*/
1946 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1947 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1948 if(!VOS_IS_STATUS_SUCCESS(status))
1949 {
1950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1951 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001952 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 /* Set this flag to true when TL suspend times out, so that when TL
1954 * suspend eventually happens and calls the callback, TL can be resumed
1955 * right away by looking at this flag when true.*/
1956 pWDA->txSuspendTimedOut = TRUE;
1957 }
1958 else
1959 {
1960 pWDA->txSuspendTimedOut = FALSE;
1961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001962 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1963 {
1964 status = VOS_STATUS_SUCCESS;
1965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 return status;
1967}
Jeff Johnson295189b2012-06-20 16:38:30 -07001968/*
1969 * FUNCTION: WDA_resumeDataTx
1970 * Update TL to resume the data Transmission
1971 */
1972VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1973{
1974 VOS_STATUS status = VOS_STATUS_SUCCESS;
1975 tANI_U8 ucSTAId = 0;
1976
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001978 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 ucSTAId = WLAN_ALL_STA;
1980 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1981 return status;
1982}
Jeff Johnson295189b2012-06-20 16:38:30 -07001983/*
1984 * FUNCTION: WDA_InitScanReqCallback
1985 * Trigger Init SCAN callback
1986 */
1987void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
1988{
1989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1990 tWDA_CbContext *pWDA;
1991 tInitScanParams *pWDA_ScanParam ;
1992 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001994 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if(NULL == pWdaParams)
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001998 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 VOS_ASSERT(0) ;
2000 return ;
2001 }
2002 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2003 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 if(NULL == pWDA_ScanParam)
2005 {
2006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002007 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002008 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2010 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002011 return ;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 if(WDI_STATUS_SUCCESS != wdiStatus)
2014 {
2015 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 if(VOS_STATUS_SUCCESS != status)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002019 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 }
2021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 /* free WDI command buffer */
2023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002025
Jeff Johnson295189b2012-06-20 16:38:30 -07002026
2027 /* assign status to scan params */
2028 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 /* send SCAN RSP message back to PE */
2030 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 return ;
2032}
2033
2034/*
2035 * FUNCTION: WDA_ProcessInitScanReq
2036 * Trigger Init SCAN in DAL
2037 */
2038VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2039 tInitScanParams *initScanParams)
2040{
2041 WDI_Status status = WDI_STATUS_SUCCESS ;
2042 WDI_InitScanReqParamsType *wdiInitScanParam =
2043 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2044 sizeof(WDI_InitScanReqParamsType)) ;
2045 tWDA_ReqParams *pWdaParams;
2046 tANI_U8 i = 0;
2047
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 if(NULL == wdiInitScanParam)
2051 {
2052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002053 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002054 VOS_ASSERT(0);
2055 return VOS_STATUS_E_NOMEM;
2056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2058 if(NULL == pWdaParams)
2059 {
2060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 VOS_ASSERT(0);
2063 vos_mem_free(wdiInitScanParam);
2064 return VOS_STATUS_E_NOMEM;
2065 }
2066
2067 /* Copy init Scan params to WDI structure */
2068 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2069 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2070 sizeof(tSirMacAddr)) ;
2071 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2072 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2073 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2074#ifdef WLAN_FEATURE_P2P
2075 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2076 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2077#else
2078 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2079 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2080#endif
2081 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2082 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2084 {
2085 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2086 initScanParams->scanEntry.bssIdx[i] ;
2087 }
2088
2089 /* if Frame length, copy macMgmtHdr or WDI structure */
2090 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2091 {
2092 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2093 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2094 }
2095 wdiInitScanParam->wdiReqStatusCB = NULL ;
2096
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 /* Store Init Req pointer, as this will be used for response */
2098 pWdaParams->pWdaContext = pWDA;
2099 pWdaParams->wdaMsgParam = initScanParams;
2100 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 /* first try to suspend TX */
2102 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 if(WDI_STATUS_SUCCESS != status)
2104 {
2105 goto handleWdiFailure;
2106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 /* call DAL API to pass init scan request to DAL */
2108 status = WDI_InitScanReq(wdiInitScanParam,
2109 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 if(IS_WDI_STATUS_FAILURE(status))
2111 {
2112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2113 "error in WDA Init Scan, Resume Tx " );
2114 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 VOS_ASSERT(0) ;
2116
2117 goto handleWdiFailure;
2118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002120handleWdiFailure:
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2122 "Failure in WDI Api, free all the memory " );
2123 /* free WDI command buffer */
2124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2125 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 /* send Failure to PE */
2127 initScanParams->status = eSIR_FAILURE ;
2128 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 return CONVERT_WDI2VOS_STATUS(status) ;
2130}
2131
Jeff Johnson295189b2012-06-20 16:38:30 -07002132/*
2133 * FUNCTION: WDA_StartScanReqCallback
2134 * send Start SCAN RSP back to PE
2135 */
2136void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2137 void* pUserData)
2138{
2139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2140 tWDA_CbContext *pWDA;
2141 tStartScanParams *pWDA_ScanParam;
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 if(NULL == pWdaParams)
2145 {
2146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 VOS_ASSERT(0) ;
2149 return ;
2150 }
2151 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2152 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 if(NULL == pWDA_ScanParam)
2154 {
2155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002156 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002158 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 return ;
2160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2162 {
2163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002164 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002166 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 return ;
2168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2170 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002171
Jeff Johnson295189b2012-06-20 16:38:30 -07002172
2173 /* assign status to scan params */
2174 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 /* send SCAN RSP message back to PE */
2176 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 return ;
2178}
2179
Jeff Johnson295189b2012-06-20 16:38:30 -07002180/*
2181 * FUNCTION: WDA_ProcessStartScanReq
2182 * Trigger start SCAN in WDI
2183 */
2184VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2185 tStartScanParams *startScanParams)
2186{
2187 WDI_Status status = WDI_STATUS_SUCCESS;
2188 WDI_StartScanReqParamsType *wdiStartScanParams =
2189 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2190 sizeof(WDI_StartScanReqParamsType)) ;
2191 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 if(NULL == wdiStartScanParams)
2195 {
2196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 VOS_ASSERT(0);
2199 return VOS_STATUS_E_NOMEM;
2200 }
2201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2202 if(NULL == pWdaParams)
2203 {
2204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 VOS_ASSERT(0);
2207 vos_mem_free(wdiStartScanParams);
2208 return VOS_STATUS_E_NOMEM;
2209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 /* Copy init Scan params to WDI structure */
2211 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2212 wdiStartScanParams->wdiReqStatusCB = NULL ;
2213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 /* Store Init Req pointer, as this will be used for response */
2215 /* store Params pass it to WDI */
2216 pWdaParams->pWdaContext = pWDA;
2217 pWdaParams->wdaMsgParam = startScanParams;
2218 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 /* call DAL API to pass init scan request to DAL */
2220 status = WDI_StartScanReq(wdiStartScanParams,
2221 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 /* failure returned by WDI API */
2223 if(IS_WDI_STATUS_FAILURE(status))
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2226 "Failure in Start Scan WDI API, free all the memory "
2227 "It should be due to previous abort scan." );
2228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2229 vos_mem_free(pWdaParams) ;
2230 startScanParams->status = eSIR_FAILURE ;
2231 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 return CONVERT_WDI2VOS_STATUS(status) ;
2234}
Jeff Johnson295189b2012-06-20 16:38:30 -07002235/*
2236 * FUNCTION: WDA_EndScanReqCallback
2237 * END SCAN callback
2238 */
2239void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2240{
2241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2242 tWDA_CbContext *pWDA;
2243 tEndScanParams *endScanParam;
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 if(NULL == pWdaParams)
2247 {
2248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0) ;
2251 return ;
2252 }
2253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2254 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255 if(NULL == endScanParam)
2256 {
2257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002258 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2261 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 return ;
2263 }
2264
2265 /* Free WDI command buffer */
2266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2267 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 /* assign status to scan params */
2269 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 /* send response back to PE */
2271 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2272 return ;
2273}
2274
Jeff Johnson295189b2012-06-20 16:38:30 -07002275/*
2276 * FUNCTION: WDA_ProcessEndScanReq
2277 * Trigger END SCAN in WDI
2278 */
2279VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2280 tEndScanParams *endScanParams)
2281{
2282 WDI_Status status = WDI_STATUS_SUCCESS;
2283 WDI_EndScanReqParamsType *wdiEndScanParams =
2284 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2285 sizeof(WDI_EndScanReqParamsType)) ;
2286 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 if(NULL == wdiEndScanParams)
2290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 VOS_ASSERT(0);
2294 return VOS_STATUS_E_NOMEM;
2295 }
2296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2297 if(NULL == pWdaParams)
2298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 VOS_ASSERT(0);
2302 vos_mem_free(wdiEndScanParams);
2303 return VOS_STATUS_E_NOMEM;
2304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 /* Copy init Scan params to WDI structure */
2306 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2307 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 /* Store Init Req pointer, as this will be used for response */
2309 /* store Params pass it to WDI */
2310 pWdaParams->pWdaContext = pWDA;
2311 pWdaParams->wdaMsgParam = endScanParams;
2312 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 /* call DAL API to pass init scan request to DAL */
2314 status = WDI_EndScanReq(wdiEndScanParams,
2315 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 if(IS_WDI_STATUS_FAILURE(status))
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2319 "Failure in End Scan WDI API, free all the memory "
2320 "It should be due to previous abort scan." );
2321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2322 vos_mem_free(pWdaParams) ;
2323 endScanParams->status = eSIR_FAILURE ;
2324 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 return CONVERT_WDI2VOS_STATUS(status) ;
2327}
Jeff Johnson295189b2012-06-20 16:38:30 -07002328/*
2329 * FUNCTION: WDA_FinishScanReqCallback
2330 * Trigger Finish SCAN callback
2331 */
2332void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2333{
2334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2335 tWDA_CbContext *pWDA;
2336 tFinishScanParams *finishScanParam;
2337 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002339 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 if(NULL == pWdaParams)
2341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 VOS_ASSERT(0) ;
2345 return ;
2346 }
2347
2348 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2349 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 if(NULL == finishScanParam)
2351 {
2352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002353 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2356 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 return ;
2358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2360 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 /*
2362 * Now Resume TX, if we reached here means, TX is already suspended, we
2363 * have to resume it unconditionaly
2364 */
2365 status = WDA_ResumeDataTx(pWDA) ;
2366
2367 if(VOS_STATUS_SUCCESS != status)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2374 return ;
2375}
Jeff Johnson295189b2012-06-20 16:38:30 -07002376/*
2377 * FUNCTION: WDA_ProcessFinshScanReq
2378 * Trigger Finish SCAN in WDI
2379 */
2380VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2381 tFinishScanParams *finishScanParams)
2382{
2383 WDI_Status status = WDI_STATUS_SUCCESS;
2384 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2385 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2386 sizeof(WDI_FinishScanReqParamsType)) ;
2387 tWDA_ReqParams *pWdaParams ;
2388 tANI_U8 i = 0;
2389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002390 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 if(NULL == wdiFinishScanParams)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 VOS_ASSERT(0);
2396 return VOS_STATUS_E_NOMEM;
2397 }
2398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2399 if(NULL == pWdaParams)
2400 {
2401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 VOS_ASSERT(0);
2404 vos_mem_free(wdiFinishScanParams);
2405 return VOS_STATUS_E_NOMEM;
2406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 /* Copy init Scan params to WDI structure */
2408 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2409 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2410 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2412 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2413 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2414 finishScanParams->frameLength ;
2415 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2416 finishScanParams->currentOperChannel ;
2417 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2418 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2419 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2421 {
2422 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2423 finishScanParams->scanEntry.bssIdx[i] ;
2424 }
2425
2426
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 /* if Frame length, copy macMgmtHdr ro WDI structure */
2428 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2429 {
2430 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2431 &finishScanParams->macMgmtHdr,
2432 sizeof(WDI_MacMgmtHdr)) ;
2433 }
2434 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 /* Store Init Req pointer, as this will be used for response */
2436 /* store Params pass it to WDI */
2437 pWdaParams->pWdaContext = pWDA;
2438 pWdaParams->wdaMsgParam = finishScanParams;
2439 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /* call DAL API to pass init scan request to DAL */
2441 status = WDI_FinishScanReq(wdiFinishScanParams,
2442 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444
2445 /*
2446 * WDI API returns failure..
2447 */
2448 if(IS_WDI_STATUS_FAILURE( status))
2449 {
2450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2451 "Failure in Finish Scan WDI API, free all the memory " );
2452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2453 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 finishScanParams->status = eSIR_FAILURE ;
2455 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 return CONVERT_WDI2VOS_STATUS(status) ;
2458}
Jeff Johnson295189b2012-06-20 16:38:30 -07002459/*---------------------------------------------------------------------
2460 * ASSOC API's
2461 *---------------------------------------------------------------------
2462 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_JoinReqCallback
2465 * Trigger Init SCAN callback
2466 */
2467void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2468{
2469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2470 tWDA_CbContext *pWDA;
2471 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 if(NULL == pWdaParams)
2475 {
2476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0) ;
2479 return ;
2480 }
2481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2482 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2484 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 /* reset macBSSID */
2486 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 /* reset macSTASelf */
2488 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 return ;
2492}
Jeff Johnson295189b2012-06-20 16:38:30 -07002493/*
2494 * FUNCTION: WDA_ProcessJoinReq
2495 * Trigger Join REQ in WDI
2496 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002497VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2498 tSwitchChannelParams* joinReqParam)
2499{
2500 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 WDI_JoinReqParamsType *wdiJoinReqParam =
2502 (WDI_JoinReqParamsType *)vos_mem_malloc(
2503 sizeof(WDI_JoinReqParamsType)) ;
2504 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == wdiJoinReqParam)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002512 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 return VOS_STATUS_E_NOMEM;
2514 }
2515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2516 if(NULL == pWdaParams)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0);
2521 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002522 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 return VOS_STATUS_E_NOMEM;
2524 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002525
2526 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2527 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2528 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2531 "%s: received join request when BSSID or self-STA is NULL "
2532 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002533 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002534 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2535 VOS_ASSERT(0);
2536 vos_mem_free(wdiJoinReqParam);
2537 vos_mem_free(pWdaParams);
2538 joinReqParam->status = eSIR_FAILURE ;
2539 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2540 return VOS_STATUS_E_INVAL;
2541 }
2542
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 /* copy the BSSID for pWDA */
2544 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2545 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2547 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2549 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002550#ifdef WLAN_FEATURE_VOWIFI
2551 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2552 joinReqParam->maxTxPower ;
2553#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2555 joinReqParam->localPowerConstraint ;
2556#endif
2557 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2558 joinReqParam->secondaryChannelOffset ;
2559 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2560
2561 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* Store Init Req pointer, as this will be used for response */
2563 /* store Params pass it to WDI */
2564 pWdaParams->pWdaContext = pWDA;
2565 pWdaParams->wdaMsgParam = joinReqParam;
2566 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 status = WDI_JoinReq(wdiJoinReqParam,
2568 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 if(IS_WDI_STATUS_FAILURE(status))
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2572 "Failure in Join WDI API, free all the memory " );
2573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2574 vos_mem_free(pWdaParams) ;
2575 joinReqParam->status = eSIR_FAILURE ;
2576 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return CONVERT_WDI2VOS_STATUS(status) ;
2579}
Jeff Johnson295189b2012-06-20 16:38:30 -07002580/*
2581 * FUNCTION: WDA_SwitchChannelReqCallback
2582 * send Switch channel RSP back to PE
2583 */
2584void WDA_SwitchChannelReqCallback(
2585 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2586{
2587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2588 tWDA_CbContext *pWDA;
2589 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 if(NULL == pWdaParams)
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 VOS_ASSERT(0) ;
2597 return ;
2598 }
2599 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2600 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2601
2602#ifdef WLAN_FEATURE_VOWIFI
2603 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2604#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2606 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 pSwitchChanParams->status =
2608 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 return ;
2611}
Jeff Johnson295189b2012-06-20 16:38:30 -07002612/*
2613 * FUNCTION: WDA_ProcessChannelSwitchReq
2614 * Request to WDI to switch channel REQ params.
2615 */
2616VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2617 tSwitchChannelParams *pSwitchChanParams)
2618{
2619 WDI_Status status = WDI_STATUS_SUCCESS ;
2620 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2621 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2622 sizeof(WDI_SwitchChReqParamsType)) ;
2623 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 if(NULL == wdiSwitchChanParam)
2627 {
2628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 VOS_ASSERT(0);
2631 return VOS_STATUS_E_NOMEM;
2632 }
2633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2634 if(NULL == pWdaParams)
2635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 VOS_ASSERT(0);
2639 vos_mem_free(wdiSwitchChanParam);
2640 return VOS_STATUS_E_NOMEM;
2641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2643#ifndef WLAN_FEATURE_VOWIFI
2644 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2645 pSwitchChanParams->localPowerConstraint;
2646#endif
2647 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2648 pSwitchChanParams->secondaryChannelOffset;
2649 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 /* Store req pointer, as this will be used for response */
2651 /* store Params pass it to WDI */
2652 pWdaParams->pWdaContext = pWDA;
2653 pWdaParams->wdaMsgParam = pSwitchChanParams;
2654 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655#ifdef WLAN_FEATURE_VOWIFI
2656 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2657 = pSwitchChanParams->maxTxPower;
2658 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2659 pSwitchChanParams ->selfStaMacAddr,
2660 sizeof(tSirMacAddr));
2661#endif
2662 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2663 pSwitchChanParams->bssId,
2664 sizeof(tSirMacAddr));
2665
2666 status = WDI_SwitchChReq(wdiSwitchChanParam,
2667 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 if(IS_WDI_STATUS_FAILURE(status))
2669 {
2670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2671 "Failure in process channel switch Req WDI API, free all the memory " );
2672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2673 vos_mem_free(pWdaParams) ;
2674 pSwitchChanParams->status = eSIR_FAILURE ;
2675 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 return CONVERT_WDI2VOS_STATUS(status) ;
2678}
Jeff Johnson295189b2012-06-20 16:38:30 -07002679/*
2680 * FUNCTION: WDA_ConfigBssReqCallback
2681 * config BSS Req Callback, called by WDI
2682 */
2683void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2684 ,void* pUserData)
2685{
2686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2687 tWDA_CbContext *pWDA;
2688 tAddBssParams *configBssReqParam;
2689 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 if(NULL == pWdaParams)
2693 {
2694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002695 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 VOS_ASSERT(0) ;
2697 return ;
2698 }
2699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2700 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2701 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 configBssReqParam->status =
2703 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2705 {
2706 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2707 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2709 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2710 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2711
2712 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2713 {
2714 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2715 {
2716 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2717 staConfigBssParam->staType = STA_ENTRY_BSSID;
2718 }
2719 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2720 (staConfigBssParam->staType == STA_ENTRY_SELF))
2721 {
2722 /* This is the 1st add BSS Req for the BTAMP STA */
2723 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2724 staConfigBssParam->staType = STA_ENTRY_BSSID;
2725 }
2726 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2727 (staConfigBssParam->staType == STA_ENTRY_PEER))
2728 {
2729 /* This is the 2nd ADD BSS Request that is sent
2730 * on the BTAMP STA side. The Sta type is
2731 * set to STA_ENTRY_PEER here.*/
2732 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2733 }
2734 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2735 (staConfigBssParam->staType == STA_ENTRY_SELF))
2736 {
2737 /* statype is already set by PE.
2738 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2739 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2740 staConfigBssParam->staType = STA_ENTRY_BSSID;
2741 }
2742 else
2743 {
2744 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2745 staConfigBssParam->staType = STA_ENTRY_PEER;
2746 }
2747 }
2748 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2749 {
2750 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2751 staConfigBssParam->staType = STA_ENTRY_SELF;
2752 }
2753 else
2754 {
2755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2756 "Invalid operation mode specified");
2757 VOS_ASSERT(0);
2758 }
2759
2760 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2765 sizeof(tSirMacAddr));
2766 staConfigBssParam->txChannelWidthSet =
2767 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2769 staConfigBssParam->htCapable)
2770 {
2771 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2772 wdiConfigBssRsp->ucBSSIdx;
2773 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2774 WDA_VALID_STA_INDEX ;
2775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2777 wdiConfigBssRsp->ucBSSIdx,
2778 wdiConfigBssRsp->ucSTAIdx))
2779 {
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 VOS_ASSERT(0) ;
2783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2785 {
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_ASSERT(0) ;
2789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002790#ifdef WLAN_FEATURE_VOWIFI
2791 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2792#endif
2793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2795 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798}
Jeff Johnson295189b2012-06-20 16:38:30 -07002799/*
2800 * FUNCTION: WDA_UpdateEdcaParamsForAC
2801 * Update WDI EDCA params with PE edca params
2802 */
2803void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2804 WDI_EdcaParamRecord *wdiEdcaParam,
2805 tSirMacEdcaParamRecord *macEdcaParam)
2806{
2807 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2808 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2809 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2810 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2811 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2812 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_ProcessConfigBssReq
2816 * Configure BSS before starting Assoc with AP
2817 */
2818VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2819 tAddBssParams* configBssReqParam)
2820{
2821 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2823 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2824 sizeof(WDI_ConfigBSSReqParamsType)) ;
2825 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 if(NULL == wdiConfigBssReqParam)
2829 {
2830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 VOS_ASSERT(0);
2833 return VOS_STATUS_E_NOMEM;
2834 }
2835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2836 if(NULL == pWdaParams)
2837 {
2838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 VOS_ASSERT(0);
2841 vos_mem_free(wdiConfigBssReqParam);
2842 return VOS_STATUS_E_NOMEM;
2843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2846 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 /* Store Init Req pointer, as this will be used for response */
2848 /* store Params pass it to WDI */
2849 pWdaParams->pWdaContext = pWDA;
2850 pWdaParams->wdaMsgParam = configBssReqParam;
2851 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2853 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if(IS_WDI_STATUS_FAILURE(status))
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2857 "Failure in Config BSS WDI API, free all the memory " );
2858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2859 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 return CONVERT_WDI2VOS_STATUS(status) ;
2864}
Jeff Johnson295189b2012-06-20 16:38:30 -07002865#ifdef ENABLE_HAL_COMBINED_MESSAGES
2866/*
2867 * FUNCTION: WDA_PostAssocReqCallback
2868 * Post ASSOC req callback, send RSP back to PE
2869 */
2870void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2871 void* pUserData)
2872{
2873 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2874 tPostAssocParams *postAssocReqParam =
2875 (tPostAssocParams *)pWDA->wdaMsgParam ;
2876 /*STA context within the BSS Params*/
2877 tAddStaParams *staPostAssocParam =
2878 &postAssocReqParam->addBssParams.staContext ;
2879 /*STA Params for self STA*/
2880 tAddStaParams *selfStaPostAssocParam =
2881 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 postAssocReqParam->status =
2885 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2887 {
2888 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2889 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2890 sizeof(tSirMacAddr)) ;
2891 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2892 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2893 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2895 }
2896 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2897 pWDA->wdaWdiApiMsgParam = NULL;
2898 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901}
Jeff Johnson295189b2012-06-20 16:38:30 -07002902/*
2903 * FUNCTION: WDA_ProcessPostAssocReq
2904 * Trigger POST ASSOC processing in WDI
2905 */
2906VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2907 tPostAssocParams *postAssocReqParam)
2908{
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 WDI_Status status = WDI_STATUS_SUCCESS ;
2910
2911 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2912 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2913 sizeof(WDI_PostAssocReqParamsType)) ;
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 if(NULL == wdiPostAssocReqParam)
2918 {
2919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 VOS_ASSERT(0);
2922 return VOS_STATUS_E_NOMEM;
2923 }
2924
2925 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2926 {
2927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002928 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 VOS_ASSERT(0);
2930 return VOS_STATUS_E_FAILURE;
2931 }
2932
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 /* update BSS params into WDI structure */
2934 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2935 &postAssocReqParam->addBssParams) ;
2936 /* update STA params into WDI structure */
2937 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2938 &postAssocReqParam->addStaParams) ;
2939
2940 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2941 postAssocReqParam->addBssParams.highPerformance;
2942 WDA_UpdateEdcaParamsForAC(pWDA,
2943 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2944 &postAssocReqParam->addBssParams.acbe);
2945 WDA_UpdateEdcaParamsForAC(pWDA,
2946 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2947 &postAssocReqParam->addBssParams.acbk);
2948 WDA_UpdateEdcaParamsForAC(pWDA,
2949 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2950 &postAssocReqParam->addBssParams.acvi);
2951 WDA_UpdateEdcaParamsForAC(pWDA,
2952 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2953 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 /* Store Init Req pointer, as this will be used for response */
2955 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 /* store Params pass it to WDI */
2957 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2959 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(IS_WDI_STATUS_FAILURE(status))
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2963 "Failure in Post Assoc WDI API, free all the memory " );
2964 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2965 pWDA->wdaWdiApiMsgParam = NULL;
2966 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 return CONVERT_WDI2VOS_STATUS(status) ;
2971}
2972#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002973/*
2974 * FUNCTION: WDA_AddStaReqCallback
2975 * ADD STA req callback, send RSP back to PE
2976 */
2977void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2978 void* pUserData)
2979{
2980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2981 tWDA_CbContext *pWDA;
2982 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == pWdaParams)
2986 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 VOS_ASSERT(0) ;
2989 return ;
2990 }
2991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2992 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 addStaReqParam->status =
2994 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
2996 {
2997 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
2998 /*TODO: UMAC structure doesn't have these fields*/
2999 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3000 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3001 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3002 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3003 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3004 /* update staIndex as valid index for BA if STA is HT capable*/
3005 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
3006 {
3007 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3008 wdiConfigStaRsp->ucBssIdx;
3009 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3010 WDA_VALID_STA_INDEX ;
3011 }
3012 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3013 {
3014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003015 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 VOS_ASSERT(0) ;
3017 return ;
3018 }
3019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3021 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 return ;
3024}
Jeff Johnson295189b2012-06-20 16:38:30 -07003025/*
3026 * FUNCTION: WDA_ConfigStaReq
3027 * Trigger Config STA processing in WDI
3028 */
3029VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3030 tAddStaParams *addStaReqParam)
3031{
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003033 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3034 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3035 sizeof(WDI_ConfigSTAReqParamsType)) ;
3036 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 if(NULL == wdiConfigStaReqParam)
3040 {
3041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 VOS_ASSERT(0);
3044 return VOS_STATUS_E_NOMEM;
3045 }
3046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3047 if(NULL == pWdaParams)
3048 {
3049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 VOS_ASSERT(0);
3052 vos_mem_free(wdiConfigStaReqParam);
3053 return VOS_STATUS_E_NOMEM;
3054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 /* update STA params into WDI structure */
3057 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3058 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 /* Store Init Req pointer, as this will be used for response */
3060 /* store Params pass it to WDI */
3061 pWdaParams->pWdaContext = pWDA;
3062 pWdaParams->wdaMsgParam = addStaReqParam;
3063 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3065 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003066 if(IS_WDI_STATUS_FAILURE(status))
3067 {
3068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3069 "Failure in Config STA WDI API, free all the memory " );
3070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3071 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003072 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003073 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 return CONVERT_WDI2VOS_STATUS(status) ;
3076}
Jeff Johnson295189b2012-06-20 16:38:30 -07003077/*
3078 * FUNCTION: WDA_DelBSSReqCallback
3079 * Dens DEL BSS RSP back to PE
3080 */
3081void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3082 void* pUserData)
3083{
3084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3085 tWDA_CbContext *pWDA;
3086 tDeleteBssParams *delBssReqParam;
3087 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003089 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003090 if(NULL == pWdaParams)
3091 {
3092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003093 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 VOS_ASSERT(0) ;
3095 return ;
3096 }
3097 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3098 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003100 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3101 {
3102 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3103 sizeof(tSirMacAddr)) ;
3104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3106 {
3107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 VOS_ASSERT(0) ;
3110 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003111 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3112 {
3113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003114 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003115 VOS_ASSERT(0) ;
3116 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003117 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3118 {
3119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003120 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003121 VOS_ASSERT(0) ;
3122 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003123 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3124 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 /* reset the the system role*/
3126 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3127
3128 /* Reset the BA related information */
3129 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3130 {
3131 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3132 {
3133 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3134 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3135 /* Reset framesTxed counters here */
3136 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3137 {
3138 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3139 }
3140 }
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 return ;
3144}
3145
Jeff Johnson295189b2012-06-20 16:38:30 -07003146/*
3147 * FUNCTION: WDA_ProcessDelBssReq
3148 * Init DEL BSS req with WDI
3149 */
3150VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3151 tDeleteBssParams *delBssParam)
3152{
3153 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003154 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3155 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3156 sizeof(WDI_DelBSSReqParamsType)) ;
3157 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003159 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003160 if(NULL == wdiDelBssReqParam)
3161 {
3162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 VOS_ASSERT(0);
3165 return VOS_STATUS_E_NOMEM;
3166 }
3167 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3168 if(NULL == pWdaParams)
3169 {
3170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003172 VOS_ASSERT(0);
3173 vos_mem_free(wdiDelBssReqParam);
3174 return VOS_STATUS_E_NOMEM;
3175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003176 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3177 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3178
3179 /* Store Init Req pointer, as this will be used for response */
3180 /* store Params pass it to WDI */
3181 pWdaParams->pWdaContext = pWDA;
3182 pWdaParams->wdaMsgParam = delBssParam;
3183 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 status = WDI_DelBSSReq(wdiDelBssReqParam,
3185 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 if(IS_WDI_STATUS_FAILURE(status))
3187 {
3188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3189 "Failure in Del BSS WDI API, free all the memory " );
3190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3191 vos_mem_free(pWdaParams) ;
3192 delBssParam->status = eSIR_FAILURE ;
3193 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 return CONVERT_WDI2VOS_STATUS(status) ;
3196}
Jeff Johnson295189b2012-06-20 16:38:30 -07003197/*
3198 * FUNCTION: WDA_DelSTAReqCallback
3199 * Dens DEL STA RSP back to PE
3200 */
3201void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3202 void* pUserData)
3203{
3204 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3205 tWDA_CbContext *pWDA;
3206 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003208 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003209 if(NULL == pWdaParams)
3210 {
3211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003212 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003213 VOS_ASSERT(0) ;
3214 return ;
3215 }
3216 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3217 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003219 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3220 {
3221 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3222 {
3223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003224 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003225 VOS_ASSERT(0) ;
3226 }
3227 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3228 }
3229 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3230 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003231 /*Reset the BA information corresponding to this STAIdx */
3232 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3233 WDA_INVALID_STA_INDEX;
3234 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3235
3236 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 return ;
3238}
Jeff Johnson295189b2012-06-20 16:38:30 -07003239/*
3240 * FUNCTION: WDA_ProcessDelStaReq
3241 * Init DEL STA req with WDI
3242 */
3243VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3244 tDeleteStaParams *delStaParam)
3245{
3246 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003247 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3248 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3249 sizeof(WDI_DelSTAReqParamsType)) ;
3250 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003252 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003253 if(NULL == wdiDelStaReqParam)
3254 {
3255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003256 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 VOS_ASSERT(0);
3258 return VOS_STATUS_E_NOMEM;
3259 }
3260 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3261 if(NULL == pWdaParams)
3262 {
3263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003264 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003265 VOS_ASSERT(0);
3266 vos_mem_free(wdiDelStaReqParam);
3267 return VOS_STATUS_E_NOMEM;
3268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003269 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3270 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 /* Store Init Req pointer, as this will be used for response */
3272 /* store Params pass it to WDI */
3273 pWdaParams->pWdaContext = pWDA;
3274 pWdaParams->wdaMsgParam = delStaParam;
3275 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 status = WDI_DelSTAReq(wdiDelStaReqParam,
3277 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003278 if(IS_WDI_STATUS_FAILURE(status))
3279 {
3280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3281 "Failure in Del STA WDI API, free all the memory status = %d",
3282 status );
3283 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3284 vos_mem_free(pWdaParams) ;
3285 delStaParam->status = eSIR_FAILURE ;
3286 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 return CONVERT_WDI2VOS_STATUS(status) ;
3289}
Jeff Johnson295189b2012-06-20 16:38:30 -07003290void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3291{
3292 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3293 tWDA_CbContext *pWDA;
3294 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 if(NULL == pWdaParams)
3298 {
3299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003300 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003301 VOS_ASSERT(0) ;
3302 return ;
3303 }
3304 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3305 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3307 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3309 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3310 pwdiAddSTASelfRsp->macSelfSta,
3311 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 return ;
3314}
Jeff Johnson295189b2012-06-20 16:38:30 -07003315/*
3316 * FUNCTION: WDA_ProcessAddStaSelfReq
3317 *
3318 */
3319VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3320{
3321 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003322 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003323 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3324 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3325 sizeof(WDI_AddSTASelfReqParamsType)) ;
3326 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003328 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003329 if( NULL == wdiAddStaSelfReq )
3330 {
3331 VOS_ASSERT( 0 );
3332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003333 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 return( VOS_STATUS_E_NOMEM );
3335 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003337 if( NULL == pWdaParams )
3338 {
3339 VOS_ASSERT( 0 );
3340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003341 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 vos_mem_free(wdiAddStaSelfReq) ;
3343 return( VOS_STATUS_E_NOMEM );
3344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3347 /* Store Init Req pointer, as this will be used for response */
3348 /* store Params pass it to WDI */
3349 pWdaParams->pWdaContext = pWDA;
3350 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3351 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003352 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353
Jeff Johnson43971f52012-07-17 12:26:56 -07003354 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 {
3356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3357 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003358 wstatus );
3359 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3361 vos_mem_free(pWdaParams) ;
3362 pAddStaSelfReq->status = eSIR_FAILURE ;
3363 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3364 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003365 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003366}
Jeff Johnson295189b2012-06-20 16:38:30 -07003367/*
3368 * FUNCTION: WDA_DelSTASelfRespCallback
3369 *
3370 */
3371void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3372 wdiDelStaSelfRspParams , void* pUserData)
3373{
3374 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3375 tWDA_CbContext *pWDA;
3376 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003378 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 if (NULL == pWdaParams)
3380 {
3381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003382 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003383 VOS_ASSERT(0);
3384 return;
3385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3387 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 delStaSelfParams->status =
3389 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3390
3391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3392 vos_mem_free(pWdaParams) ;
3393
3394 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 return ;
3396}
Jeff Johnson295189b2012-06-20 16:38:30 -07003397/*
3398 * FUNCTION: WDA_DelSTASelfReqCallback
3399 *
3400 */
3401void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3402 void* pUserData)
3403{
3404 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3405 tWDA_CbContext *pWDA;
3406 tDelStaSelfParams *delStaSelfParams;
3407
3408 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3409 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003410 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003411
3412 if (NULL == pWdaParams)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_ASSERT(0);
3417 return;
3418 }
3419
3420 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3421 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3422
3423 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3424
3425 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3426 {
3427 VOS_ASSERT(0);
3428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3429 vos_mem_free(pWdaParams) ;
3430 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3431 }
3432
3433 return ;
3434}
3435
3436/*
3437 * FUNCTION: WDA_DelSTASelfReq
3438 * Trigger Config STA processing in WDI
3439 */
3440VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3441 tDelStaSelfParams* pDelStaSelfReqParam)
3442{
3443 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003444 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 tWDA_ReqParams *pWdaParams = NULL;
3446 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3447 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3448 sizeof(WDI_DelSTASelfReqParamsType)) ;
3449
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003451 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003452 if( NULL == wdiDelStaSelfReq )
3453 {
3454 VOS_ASSERT( 0 );
3455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003456 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 return( VOS_STATUS_E_NOMEM );
3458 }
3459
3460 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3461 if( NULL == pWdaParams )
3462 {
3463 VOS_ASSERT( 0 );
3464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003465 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003466 vos_mem_free(wdiDelStaSelfReq) ;
3467 return( VOS_STATUS_E_NOMEM );
3468 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 pWdaParams->pWdaContext = pWDA;
3470 /* Store param pointer as passed in by caller */
3471 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3472 /* store Params pass it to WDI */
3473 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3475 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3476
3477 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3478 wdiDelStaSelfReq->pUserData = pWdaParams;
3479
Jeff Johnson43971f52012-07-17 12:26:56 -07003480 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3482
Jeff Johnson43971f52012-07-17 12:26:56 -07003483 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003484 {
3485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3486 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3487 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003488 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3490 vos_mem_free(pWdaParams) ;
3491 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3492 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3493 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003494 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495}
3496
Jeff Johnson295189b2012-06-20 16:38:30 -07003497/*
3498 * FUNCTION: WDA_SendMsg
3499 * Send Message back to PE
3500 */
3501void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3502 void *pBodyptr, tANI_U32 bodyVal)
3503{
3504 tSirMsgQ msg = {0} ;
3505 tANI_U32 status = VOS_STATUS_SUCCESS ;
3506 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003507 msg.type = msgType;
3508 msg.bodyval = bodyVal;
3509 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003510 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003511 if (VOS_STATUS_SUCCESS != status)
3512 {
3513 if(NULL != pBodyptr)
3514 {
3515 vos_mem_free(pBodyptr);
3516 }
3517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003518 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003519 VOS_ASSERT(0) ;
3520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003521 return ;
3522}
Jeff Johnson295189b2012-06-20 16:38:30 -07003523/*
3524 * FUNCTION: WDA_UpdateBSSParams
3525 * Translated WDA/PE BSS info into WDI BSS info..
3526 */
3527void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3528 WDI_ConfigBSSReqInfoType *wdiBssParams,
3529 tAddBssParams *wdaBssParams)
3530{
3531 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003532 /* copy bssReq Params to WDI structure */
3533 vos_mem_copy(wdiBssParams->macBSSID,
3534 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3535 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3536 sizeof(tSirMacAddr)) ;
3537 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3538 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3539 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 wdiBssParams->ucShortSlotTimeSupported =
3541 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003542 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3543 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3544 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3545 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3546 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3547
3548 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3549 wdiBssParams->ucTXOPProtectionFullSupport =
3550 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3552 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003554 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3555 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3556 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3557 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3558
3559 /* copy SSID into WDI structure */
3560 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3561 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3562 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3564 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003565 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003566#ifdef WLAN_FEATURE_VOWIFI
3567 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3568#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003571#ifdef WLAN_FEATURE_VOWIFI_11R
3572 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 if(wdiBssParams->bExtSetStaKeyParamValid)
3574 {
3575 /* copy set STA key params to WDI structure */
3576 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3577 wdaBssParams->extSetStaKeyParam.staIdx;
3578 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3579 wdaBssParams->extSetStaKeyParam.encType;
3580 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3581 wdaBssParams->extSetStaKeyParam.wepType;
3582 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3583 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3585 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003586 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3588 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3589 {
3590 WDA_GetWepKeysFromCfg( pWDA,
3591 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3592 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3593 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3594 }
3595 else
3596 {
3597#ifdef WLAN_SOFTAP_FEATURE
3598 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3599 keyIndex++)
3600 {
3601 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3602 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3603 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3604 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3605 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3606 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3608 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3609 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3610 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3611 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3612 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3613 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3614 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003616 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3617 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3618#else
3619 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3620 wdaBssParams->extSetStaKeyParam.key.keyId;
3621 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3622 wdaBssParams->extSetStaKeyParam.key.unicast;
3623 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3624 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3625 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3626 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3627 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3628 wdaBssParams->extSetStaKeyParam.key.paeRole;
3629 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3630 wdaBssParams->extSetStaKeyParam.key.keyLength;
3631 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3632 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3633 SIR_MAC_MAX_KEY_LENGTH);
3634 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3635#endif
3636 }
3637 }
3638 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3639 }
3640 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3641 {
3642 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3643 sizeof(wdaBssParams->extSetStaKeyParam) );
3644 }
3645#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003646#ifdef WLAN_FEATURE_11AC
3647 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3648 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3649#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003650
3651 return ;
3652}
Jeff Johnson295189b2012-06-20 16:38:30 -07003653/*
3654 * FUNCTION: WDA_UpdateSTAParams
3655 * Translated WDA/PE BSS info into WDI BSS info..
3656 */
3657void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3658 WDI_ConfigStaReqInfoType *wdiStaParams,
3659 tAddStaParams *wdaStaParams)
3660{
3661 tANI_U8 i = 0;
3662 /* Update STA params */
3663 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3664 sizeof(tSirMacAddr)) ;
3665 wdiStaParams->usAssocId = wdaStaParams->assocId;
3666 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3667
3668 wdiStaParams->ucShortPreambleSupported =
3669 wdaStaParams->shortPreambleSupported;
3670 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3671 sizeof(tSirMacAddr)) ;
3672 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3673
3674 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3675
3676 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3677 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3678 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3679 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3680 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3681 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3682 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3683
3684 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3685 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003686 wdiStaParams->wdiSupportedRates.opRateMode =
3687 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003688 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3689 {
3690 wdiStaParams->wdiSupportedRates.llbRates[i] =
3691 wdaStaParams->supportedRates.llbRates[i];
3692 }
3693 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3694 {
3695 wdiStaParams->wdiSupportedRates.llaRates[i] =
3696 wdaStaParams->supportedRates.llaRates[i];
3697 }
3698 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3699 {
3700 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3701 wdaStaParams->supportedRates.aniLegacyRates[i];
3702 }
3703 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3704 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003705#ifdef WLAN_FEATURE_11AC
3706 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3707 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3708 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3709 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3710#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3712 {
3713 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3714 wdaStaParams->supportedRates.supportedMCSSet[i];
3715 }
3716 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3717 wdaStaParams->supportedRates.rxHighestDataRate;
3718
3719 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3720
3721 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3722
3723 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3724 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3725 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3726
3727 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3728 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3729 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3730 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3731#ifdef WLAN_FEATURE_P2P
3732 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3733#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003734#ifdef WLAN_FEATURE_11AC
3735 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3736 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3737#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003738 return ;
3739}
Jeff Johnson295189b2012-06-20 16:38:30 -07003740/*
3741 * -------------------------------------------------------------------------
3742 * CFG update to WDI
3743 * -------------------------------------------------------------------------
3744 */
3745
3746 /*
3747 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3748 * Convert the WNI CFG ID to HAL CFG ID
3749 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003750static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003751{
3752 switch(wniCfgId)
3753 {
3754 case WNI_CFG_STA_ID:
3755 return QWLAN_HAL_CFG_STA_ID;
3756 case WNI_CFG_CURRENT_TX_ANTENNA:
3757 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3758 case WNI_CFG_CURRENT_RX_ANTENNA:
3759 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3760 case WNI_CFG_LOW_GAIN_OVERRIDE:
3761 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3762 case WNI_CFG_POWER_STATE_PER_CHAIN:
3763 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3764 case WNI_CFG_CAL_PERIOD:
3765 return QWLAN_HAL_CFG_CAL_PERIOD;
3766 case WNI_CFG_CAL_CONTROL:
3767 return QWLAN_HAL_CFG_CAL_CONTROL;
3768 case WNI_CFG_PROXIMITY:
3769 return QWLAN_HAL_CFG_PROXIMITY;
3770 case WNI_CFG_NETWORK_DENSITY:
3771 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3772 case WNI_CFG_MAX_MEDIUM_TIME:
3773 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3774 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3775 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3776 case WNI_CFG_RTS_THRESHOLD:
3777 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3778 case WNI_CFG_SHORT_RETRY_LIMIT:
3779 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3780 case WNI_CFG_LONG_RETRY_LIMIT:
3781 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3782 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3783 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3784 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3785 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3786 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3787 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3788 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3789 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3790 case WNI_CFG_FIXED_RATE:
3791 return QWLAN_HAL_CFG_FIXED_RATE;
3792 case WNI_CFG_RETRYRATE_POLICY:
3793 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3794 case WNI_CFG_RETRYRATE_SECONDARY:
3795 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3796 case WNI_CFG_RETRYRATE_TERTIARY:
3797 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3798 case WNI_CFG_FORCE_POLICY_PROTECTION:
3799 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3800 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3801 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3802 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3803 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3804 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3805 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3806 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3807 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3808 case WNI_CFG_MAX_BA_SESSIONS:
3809 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3810 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3811 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3812 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3813 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3814 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3815 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3816 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3817 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3818 case WNI_CFG_STATS_PERIOD:
3819 return QWLAN_HAL_CFG_STATS_PERIOD;
3820 case WNI_CFG_CFP_MAX_DURATION:
3821 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3822#if 0 /*This is not part of CFG*/
3823 case WNI_CFG_FRAME_TRANS_ENABLED:
3824 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3825#endif
3826 case WNI_CFG_DTIM_PERIOD:
3827 return QWLAN_HAL_CFG_DTIM_PERIOD;
3828 case WNI_CFG_EDCA_WME_ACBK:
3829 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3830 case WNI_CFG_EDCA_WME_ACBE:
3831 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3832 case WNI_CFG_EDCA_WME_ACVI:
3833 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3834 case WNI_CFG_EDCA_WME_ACVO:
3835 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3836#if 0
3837 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3838 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3839 case WNI_CFG_TELE_BCN_TRANS_LI:
3840 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3841 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3842 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3843 case WNI_CFG_TELE_BCN_MAX_LI:
3844 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3845 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3846 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3847#endif
3848 case WNI_CFG_ENABLE_CLOSE_LOOP:
3849 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
3850 default:
3851 {
3852 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3853 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3854 wniCfgId);
3855 return VOS_STATUS_E_INVAL;
3856 }
3857 }
3858}
Jeff Johnson295189b2012-06-20 16:38:30 -07003859/*
3860 * FUNCTION: WDA_UpdateCfgCallback
3861 *
3862 */
3863void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3864{
3865 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3866 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3867 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 /*
3871 * currently there is no response message is expected between PE and
3872 * WDA, Failure return from WDI is a ASSERT condition
3873 */
3874 if(WDI_STATUS_SUCCESS != wdiStatus)
3875 {
3876 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003877 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003878 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3879 }
3880
3881 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3882 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3883 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 return ;
3885}
Jeff Johnson295189b2012-06-20 16:38:30 -07003886/*
3887 * FUNCTION: WDA_UpdateCfg
3888 *
3889 */
3890VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3891{
3892
3893 WDI_Status status = WDI_STATUS_SUCCESS ;
3894 tANI_U32 val =0;
3895 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3896 tHalCfg *configData;
3897 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3898 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003900 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003901 if (NULL == pMac )
3902 {
3903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003904 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 return VOS_STATUS_E_FAILURE;
3906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003907 if(WDA_START_STATE != pWDA->wdaState)
3908 {
3909 return VOS_STATUS_E_FAILURE;
3910 }
3911
3912 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3913 {
3914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003915 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003916 VOS_ASSERT(0);
3917 return VOS_STATUS_E_FAILURE;
3918 }
3919
3920 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3921 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 if(NULL == wdiCfgReqParam)
3923 {
3924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 VOS_ASSERT(0);
3927 return VOS_STATUS_E_NOMEM;
3928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3930 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 if(NULL == wdiCfgReqParam->pConfigBuffer)
3932 {
3933 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003934 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003935 vos_mem_free(wdiCfgReqParam);
3936 VOS_ASSERT(0);
3937 return VOS_STATUS_E_NOMEM;
3938 }
3939
3940 /*convert the WNI CFG Id to HAL CFG Id*/
3941 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3942 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3943
3944 /*TODO: revisit this for handling string parameters */
3945 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3946 &val) != eSIR_SUCCESS)
3947 {
3948 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3949 "Failed to cfg get id %d\n", cfgParam->bodyval);
3950 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3951 vos_mem_free(wdiCfgReqParam);
3952 return eSIR_FAILURE;
3953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003954 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3955 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3956 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3957 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3958 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3959
3960 /* store Params pass it to WDI */
3961 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003962#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3963 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3964 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003965 if(IS_WDI_STATUS_FAILURE(status))
3966 {
3967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3968 "Failure in Update CFG WDI API, free all the memory " );
3969 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3970 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3971 pWDA->wdaWdiCfgApiMsgParam = NULL;
3972 /* Failure is not expected */
3973 VOS_ASSERT(0) ;
3974 }
3975#else
3976 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3977 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3978 pWDA->wdaWdiCfgApiMsgParam = NULL;
3979#endif
3980 return CONVERT_WDI2VOS_STATUS(status) ;
3981}
3982
Jeff Johnson295189b2012-06-20 16:38:30 -07003983VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
3984 v_U8_t *pDefaultKeyId,
3985 v_U8_t *pNumKeys,
3986 WDI_KeysType *pWdiKeys )
3987{
3988 v_U32_t i, j, defKeyId = 0;
3989 v_U32_t val = SIR_MAC_KEY_LENGTH;
3990 VOS_STATUS status = WDI_STATUS_SUCCESS;
3991 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003992 if (NULL == pMac )
3993 {
3994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003995 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003996 return VOS_STATUS_E_FAILURE;
3997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003998 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
3999 &defKeyId ))
4000 {
4001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4002 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4003 }
4004
4005 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006 /* Need to extract ALL of the configured WEP Keys */
4007 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4008 {
4009 val = SIR_MAC_KEY_LENGTH;
4010 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4011 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4012 pWdiKeys[j].key,
4013 &val ))
4014 {
4015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4016 "WEP Key index [%d] may not configured in CFG\n",i);
4017 }
4018 else
4019 {
4020 pWdiKeys[j].keyId = (tANI_U8) i;
4021 /*
4022 * Actually, a DC (Don't Care) because
4023 * this is determined (and set) by PE/MLME
4024 */
4025 pWdiKeys[j].unicast = 0;
4026 /*
4027 * Another DC (Don't Care)
4028 */
4029 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4030 /* Another DC (Don't Care). Unused for WEP */
4031 pWdiKeys[j].paeRole = 0;
4032 /* Determined from wlan_cfgGetStr() above.*/
4033 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004034 j++;
4035 *pNumKeys = (tANI_U8) j;
4036 }
4037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 return status;
4039}
Jeff Johnson295189b2012-06-20 16:38:30 -07004040/*
4041 * FUNCTION: WDA_SetBssKeyReqCallback
4042 * send SET BSS key RSP back to PE
4043 */
4044void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4045{
4046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4047 tWDA_CbContext *pWDA;
4048 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051 if(NULL == pWdaParams)
4052 {
4053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004054 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 VOS_ASSERT(0) ;
4056 return ;
4057 }
4058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4059 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4061 vos_mem_free(pWdaParams) ;
4062 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004063 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064 return ;
4065}
Jeff Johnson295189b2012-06-20 16:38:30 -07004066/*
4067 * FUNCTION: WDA_ProcessSetBssKeyReq
4068 * Request to WDI for programming the BSS key( key for
4069 * broadcast/multicast frames Encryption)
4070 */
4071VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4072 tSetBssKeyParams *setBssKeyParams )
4073{
4074 WDI_Status status = WDI_STATUS_SUCCESS ;
4075 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4076 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4077 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4078 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004079 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004081 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 if(NULL == wdiSetBssKeyParam)
4083 {
4084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 VOS_ASSERT(0);
4087 return VOS_STATUS_E_NOMEM;
4088 }
4089 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4090 if(NULL == pWdaParams)
4091 {
4092 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004093 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004094 VOS_ASSERT(0);
4095 vos_mem_free(wdiSetBssKeyParam);
4096 return VOS_STATUS_E_NOMEM;
4097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004098 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 /* copy set BSS params to WDI structure */
4100 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4101 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4102 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(setBssKeyParams->encType != eSIR_ED_NONE)
4104 {
4105 if( setBssKeyParams->numKeys == 0 &&
4106 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4107 setBssKeyParams->encType == eSIR_ED_WEP104))
4108 {
4109 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004110 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4111 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4112 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4113 }
4114 else
4115 {
4116 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4117 {
4118 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4119 setBssKeyParams->key[keyIndex].keyId;
4120 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4121 setBssKeyParams->key[keyIndex].unicast;
4122 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4123 setBssKeyParams->key[keyIndex].keyDirection;
4124 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4125 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4126 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4127 setBssKeyParams->key[keyIndex].paeRole;
4128 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4129 setBssKeyParams->key[keyIndex].keyLength;
4130 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4131 setBssKeyParams->key[keyIndex].key,
4132 SIR_MAC_MAX_KEY_LENGTH);
4133 }
4134 }
4135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004136 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4137 setBssKeyParams->singleTidRc;
4138 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004139 /* Store set key pointer, as this will be used for response */
4140 /* store Params pass it to WDI */
4141 pWdaParams->pWdaContext = pWDA;
4142 pWdaParams->wdaMsgParam = setBssKeyParams;
4143 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4145 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4146
4147 if(IS_WDI_STATUS_FAILURE(status))
4148 {
4149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4150 "Failure in Set BSS Key Req WDI API, free all the memory " );
4151 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4152 vos_mem_free(pWdaParams) ;
4153 setBssKeyParams->status = eSIR_FAILURE ;
4154 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4155 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004156 return CONVERT_WDI2VOS_STATUS(status) ;
4157}
Jeff Johnson295189b2012-06-20 16:38:30 -07004158/*
4159 * FUNCTION: WDA_RemoveBssKeyReqCallback
4160 * send SET BSS key RSP back to PE
4161 */
4162void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4163{
4164 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4165 tWDA_CbContext *pWDA;
4166 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004168 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004169 if(NULL == pWdaParams)
4170 {
4171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004172 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004173 VOS_ASSERT(0) ;
4174 return ;
4175 }
4176 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4177 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4179 vos_mem_free(pWdaParams) ;
4180
4181 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 return ;
4184}
Jeff Johnson295189b2012-06-20 16:38:30 -07004185/*
4186 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4187 * Request to WDI to remove the BSS key( key for broadcast/multicast
4188 * frames Encryption)
4189 */
4190VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4191 tRemoveBssKeyParams *removeBssKeyParams )
4192{
4193 WDI_Status status = WDI_STATUS_SUCCESS ;
4194 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4195 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4196 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4197 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004199 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 if(NULL == wdiRemoveBssKeyParam)
4201 {
4202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 VOS_ASSERT(0);
4205 return VOS_STATUS_E_NOMEM;
4206 }
4207 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4208 if(NULL == pWdaParams)
4209 {
4210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 VOS_ASSERT(0);
4213 vos_mem_free(wdiRemoveBssKeyParam);
4214 return VOS_STATUS_E_NOMEM;
4215 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004216 /* copy Remove BSS key params to WDI structure*/
4217 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4218 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4219 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4220 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4221 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 /* Store remove key pointer, as this will be used for response */
4223 /* store Params pass it to WDI */
4224 pWdaParams->pWdaContext = pWDA;
4225 pWdaParams->wdaMsgParam = removeBssKeyParams;
4226 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4228 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 if(IS_WDI_STATUS_FAILURE(status))
4230 {
4231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4232 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4233 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4234 vos_mem_free(pWdaParams) ;
4235 removeBssKeyParams->status = eSIR_FAILURE ;
4236 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 return CONVERT_WDI2VOS_STATUS(status) ;
4239}
Jeff Johnson295189b2012-06-20 16:38:30 -07004240/*
4241 * FUNCTION: WDA_SetBssKeyReqCallback
4242 * send SET BSS key RSP back to PE
4243 */
4244void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4245{
4246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4247 tWDA_CbContext *pWDA;
4248 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004250 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 if(NULL == pWdaParams)
4252 {
4253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004254 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004255 VOS_ASSERT(0) ;
4256 return ;
4257 }
4258 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4259 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4261 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004262 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004263 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 return ;
4265}
Jeff Johnson295189b2012-06-20 16:38:30 -07004266/*
4267 * FUNCTION: WDA_ProcessSetStaKeyReq
4268 * Request to WDI for programming the STA key( key for Unicast frames
4269 * Encryption)
4270 */
4271VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4272 tSetStaKeyParams *setStaKeyParams )
4273{
4274 WDI_Status status = WDI_STATUS_SUCCESS ;
4275 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4276 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4277 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4278 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004279 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004281 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 if(NULL == wdiSetStaKeyParam)
4283 {
4284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 VOS_ASSERT(0);
4287 return VOS_STATUS_E_NOMEM;
4288 }
4289 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4290 if(NULL == pWdaParams)
4291 {
4292 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004293 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004294 VOS_ASSERT(0);
4295 vos_mem_free(wdiSetStaKeyParam);
4296 return VOS_STATUS_E_NOMEM;
4297 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004298 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 /* copy set STA key params to WDI structure */
4301 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4302 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4303 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4304 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 if(setStaKeyParams->encType != eSIR_ED_NONE)
4306 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004307 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4309 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4310 {
4311 WDA_GetWepKeysFromCfg( pWDA,
4312 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4313 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4314 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4315 }
4316 else
4317 {
4318#ifdef WLAN_SOFTAP_FEATURE
4319 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4320 keyIndex++)
4321 {
4322 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4323 setStaKeyParams->key[keyIndex].keyId;
4324 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4325 setStaKeyParams->key[keyIndex].unicast;
4326 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4327 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004328 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4329 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4330 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4331 setStaKeyParams->key[keyIndex].paeRole;
4332 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4333 setStaKeyParams->key[keyIndex].keyLength;
4334 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4335 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4336 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4337 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4338 {
4339 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4340 }
4341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004342 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4343 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4344#else
4345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4346 setStaKeyParams->key.keyId;
4347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4348 setStaKeyParams->key.unicast;
4349 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4350 setStaKeyParams->key.keyDirection;
4351 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4352 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4353 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4354 setStaKeyParams->key.paeRole;
4355 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4356 setStaKeyParams->key.keyLength;
4357 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4358 setStaKeyParams->key[keyIndex].key,
4359 SIR_MAC_MAX_KEY_LENGTH);
4360 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4361#endif
4362 }
4363 }
4364 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4365 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004366 /* Store set key pointer, as this will be used for response */
4367 /* store Params pass it to WDI */
4368 pWdaParams->pWdaContext = pWDA;
4369 pWdaParams->wdaMsgParam = setStaKeyParams;
4370 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4372 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 if(IS_WDI_STATUS_FAILURE(status))
4374 {
4375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4376 "Failure in set STA Key Req WDI API, free all the memory " );
4377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4378 vos_mem_free(pWdaParams) ;
4379 setStaKeyParams->status = eSIR_FAILURE ;
4380 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4381 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004382 return CONVERT_WDI2VOS_STATUS(status) ;
4383}
Jeff Johnson295189b2012-06-20 16:38:30 -07004384/*
4385 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4386 * send SET Bcast STA key RSP back to PE
4387 */
4388void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4389{
4390 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4391 tWDA_CbContext *pWDA;
4392 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004394 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 if(NULL == pWdaParams)
4396 {
4397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004398 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004399 VOS_ASSERT(0) ;
4400 return ;
4401 }
4402 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4403 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4405 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004406 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004407 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 return ;
4409}
4410
Jeff Johnson295189b2012-06-20 16:38:30 -07004411/*
4412 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4413 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4414 * Encryption)
4415 */
4416VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4417 tSetStaKeyParams *setStaKeyParams )
4418{
4419 WDI_Status status = WDI_STATUS_SUCCESS ;
4420 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4421 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4422 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4423 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004424 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004426 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 if(NULL == wdiSetStaKeyParam)
4428 {
4429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004431 VOS_ASSERT(0);
4432 return VOS_STATUS_E_NOMEM;
4433 }
4434 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4435 if(NULL == pWdaParams)
4436 {
4437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004438 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004439 VOS_ASSERT(0);
4440 vos_mem_free(wdiSetStaKeyParam);
4441 return VOS_STATUS_E_NOMEM;
4442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004443 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 /* copy set STA key params to WDI structure */
4446 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4447 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4448 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4449 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 if(setStaKeyParams->encType != eSIR_ED_NONE)
4451 {
4452#ifdef WLAN_SOFTAP_FEATURE
4453 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4454 keyIndex++)
4455 {
4456 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4457 setStaKeyParams->key[keyIndex].keyId;
4458 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4459 setStaKeyParams->key[keyIndex].unicast;
4460 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4461 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004462 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4463 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4464 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4465 setStaKeyParams->key[keyIndex].paeRole;
4466 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4467 setStaKeyParams->key[keyIndex].keyLength;
4468 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4469 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4472 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4473#else
4474 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4475 setStaKeyParams->key.keyId;
4476 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4477 setStaKeyParams->key.unicast;
4478 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4479 setStaKeyParams->key.keyDirection;
4480 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4481 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4482 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4483 setStaKeyParams->key.paeRole;
4484 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4485 setStaKeyParams->key.keyLength;
4486 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4487 setStaKeyParams->key[keyIndex].key,
4488 SIR_MAC_MAX_KEY_LENGTH);
4489 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4490#endif
4491 }
4492 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 /* Store set key pointer, as this will be used for response */
4494 /* store Params pass it to WDI */
4495 pWdaParams->pWdaContext = pWDA;
4496 pWdaParams->wdaMsgParam = setStaKeyParams;
4497 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4499 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004500 if(IS_WDI_STATUS_FAILURE(status))
4501 {
4502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4503 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4504 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4505 vos_mem_free(pWdaParams) ;
4506 setStaKeyParams->status = eSIR_FAILURE ;
4507 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004509 return CONVERT_WDI2VOS_STATUS(status) ;
4510}
Jeff Johnson295189b2012-06-20 16:38:30 -07004511/*
4512 * FUNCTION: WDA_RemoveStaKeyReqCallback
4513 * send SET BSS key RSP back to PE
4514 */
4515void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4516{
4517 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4518 tWDA_CbContext *pWDA;
4519 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004521 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 if(NULL == pWdaParams)
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004525 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_ASSERT(0) ;
4527 return ;
4528 }
4529 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4530 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4532 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004533 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004535 return ;
4536}
4537
Jeff Johnson295189b2012-06-20 16:38:30 -07004538/*
4539 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4540 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4541 */
4542VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4543 tRemoveStaKeyParams *removeStaKeyParams )
4544{
4545 WDI_Status status = WDI_STATUS_SUCCESS ;
4546 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4547 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4548 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4549 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004551 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 if(NULL == wdiRemoveStaKeyParam)
4553 {
4554 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004555 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 VOS_ASSERT(0);
4557 return VOS_STATUS_E_NOMEM;
4558 }
4559 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4560 if(NULL == pWdaParams)
4561 {
4562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004564 VOS_ASSERT(0);
4565 vos_mem_free(wdiRemoveStaKeyParam);
4566 return VOS_STATUS_E_NOMEM;
4567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004568 /* copy remove STA key params to WDI structure*/
4569 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4570 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4571 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4572 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4573 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 /* Store remove key pointer, as this will be used for response */
4575 /* store Params pass it to WDI */
4576 pWdaParams->pWdaContext = pWDA;
4577 pWdaParams->wdaMsgParam = removeStaKeyParams;
4578 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4580 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 if(IS_WDI_STATUS_FAILURE(status))
4582 {
4583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4584 "Failure in remove STA Key Req WDI API, free all the memory " );
4585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4586 vos_mem_free(pWdaParams) ;
4587 removeStaKeyParams->status = eSIR_FAILURE ;
4588 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 return CONVERT_WDI2VOS_STATUS(status) ;
4591}
Jeff Johnson295189b2012-06-20 16:38:30 -07004592/*
4593 * FUNCTION: WDA_IsHandleSetLinkStateReq
4594 * Update the WDA state and return the status to handle this message or not
4595 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004596WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4597 tWDA_CbContext *pWDA,
4598 tLinkStateParams *linkStateParams)
4599{
4600 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 switch(linkStateParams->state)
4602 {
4603 case eSIR_LINK_PREASSOC_STATE:
4604 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4605 /*
4606 * set the WDA state to PRE ASSOC
4607 * copy the BSSID into pWDA to use it in join request and return,
4608 * No need to handle these messages.
4609 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004610 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4611 {
4612 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004613 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004614 }
4615 else
4616 {
4617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004618 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004619 VOS_ASSERT(0);
4620 }
4621
4622 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4623 {
4624 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004626 }
4627 else
4628 {
4629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004630 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004631 VOS_ASSERT(0);
4632 }
4633
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4635 *channel and after ) so reset the WDA state to ready when the second
4636 * time UMAC issue the link state with PREASSOC
4637 */
4638 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4639 {
4640 /* RESET WDA state back to WDA_READY_STATE */
4641 pWDA->wdaState = WDA_READY_STATE;
4642 }
4643 else
4644 {
4645 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4646 }
4647 //populate linkState info in WDACbCtxt
4648 pWDA->linkState = linkStateParams->state;
4649 status = WDA_IGNORE_SET_LINK_STATE;
4650 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 default:
4652 if(pWDA->wdaState != WDA_READY_STATE)
4653 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004654 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4655 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4656 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4657 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4658 *the ASSERT in WDA_Stop during module unload.*/
4659 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4660 {
4661 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004662 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004663 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004664 else
4665 {
4666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004667 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004668 status = WDA_IGNORE_SET_LINK_STATE;
4669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004670 }
4671 break;
4672 }
4673
4674 return status;
4675}
Jeff Johnson295189b2012-06-20 16:38:30 -07004676/*
4677 * FUNCTION: WDA_SetLinkStateCallback
4678 * call back function for set link state from WDI
4679 */
4680void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4681{
4682 tWDA_CbContext *pWDA;
4683 tLinkStateParams *linkStateParams;
4684 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004686 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 if(NULL == pWdaParams)
4688 {
4689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004690 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 VOS_ASSERT(0) ;
4692 return ;
4693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004694 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004696 /*
4697 * In STA mode start the BA activity check timer after association
4698 * and in AP mode start BA activity check timer after BSS start */
4699 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4700 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4701 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4702 {
4703 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4704 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004705 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 /*
4707 * No respone required for WDA_SET_LINK_STATE so free the request
4708 * param here
4709 */
4710 if( pWdaParams != NULL )
4711 {
4712 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4713 {
4714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4715 }
4716 vos_mem_free(pWdaParams);
4717 }
4718 return ;
4719}
Jeff Johnson295189b2012-06-20 16:38:30 -07004720/*
4721 * FUNCTION: WDA_ProcessSetLinkState
4722 * Request to WDI to set the link status.
4723 */
4724VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4725 tLinkStateParams *linkStateParams)
4726{
4727 WDI_Status status = WDI_STATUS_SUCCESS ;
4728 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4729 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4730 sizeof(WDI_SetLinkReqParamsType)) ;
4731 tWDA_ReqParams *pWdaParams ;
4732 tpAniSirGlobal pMac;
4733 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4734
4735 if(NULL == pMac)
4736 {
4737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004738 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004739 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004740 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 return VOS_STATUS_E_FAILURE;
4742 }
4743
4744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 if(NULL == wdiSetLinkStateParam)
4747 {
4748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004750 VOS_ASSERT(0);
4751 return VOS_STATUS_E_NOMEM;
4752 }
4753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4754 if(NULL == pWdaParams)
4755 {
4756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004758 VOS_ASSERT(0);
4759 vos_mem_free(wdiSetLinkStateParam);
4760 return VOS_STATUS_E_NOMEM;
4761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 if(WDA_IGNORE_SET_LINK_STATE ==
4763 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4764 {
4765 status = WDI_STATUS_E_FAILURE;
4766 }
4767 else
4768 {
4769 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4770 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4772 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004773 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4774 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004775 pWdaParams->pWdaContext = pWDA;
4776 /* Store remove key pointer, as this will be used for response */
4777 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 /* store Params pass it to WDI */
4779 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4780 /* Stop Timer only other than GO role and concurrent session */
4781 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4782 && !vos_concurrent_sessions_running() &&
4783 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4784 {
4785 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004787 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4788 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004789 if(IS_WDI_STATUS_FAILURE(status))
4790 {
4791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4792 "Failure in set link state Req WDI API, free all the memory " );
4793 }
4794 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 if(IS_WDI_STATUS_FAILURE(status))
4796 {
4797 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004798 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 vos_mem_free(pWdaParams);
4800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004801 return CONVERT_WDI2VOS_STATUS(status) ;
4802}
Jeff Johnson295189b2012-06-20 16:38:30 -07004803/*
4804 * FUNCTION: WDA_GetStatsReqParamsCallback
4805 * send the response to PE with Stats received from WDI
4806 */
4807void WDA_GetStatsReqParamsCallback(
4808 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4809 void* pUserData)
4810{
4811 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4812 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4813
4814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004815 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 pGetPEStatsRspParams =
4817 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4818 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4819
4820 if(NULL == pGetPEStatsRspParams)
4821 {
4822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004823 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 VOS_ASSERT(0);
4825 return;
4826 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4828 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4829 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4830 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4831 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4832
4833 //Fill the Session Id Properly in PE
4834 pGetPEStatsRspParams->sessionId = 0;
4835 pGetPEStatsRspParams->rc =
4836 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4837 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4838 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 vos_mem_copy( pGetPEStatsRspParams + 1,
4840 wdiGetStatsRsp + 1,
4841 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004842 /* send response to UMAC*/
4843 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4844
4845 return;
4846}
4847
Jeff Johnson295189b2012-06-20 16:38:30 -07004848/*
4849 * FUNCTION: WDA_ProcessGetStatsReq
4850 * Request to WDI to get the statistics
4851 */
4852VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4853 tAniGetPEStatsReq *pGetStatsParams)
4854{
4855 WDI_Status status = WDI_STATUS_SUCCESS ;
4856 WDI_GetStatsReqParamsType wdiGetStatsParam;
4857 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004859 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4861 pGetStatsParams->staId;
4862 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4863 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 status = WDI_GetStatsReq(&wdiGetStatsParam,
4866 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004867 if(IS_WDI_STATUS_FAILURE(status))
4868 {
4869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4870 "Failure in Get Stats Req WDI API, free all the memory " );
4871 pGetPEStatsRspParams =
4872 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4873 if(NULL == pGetPEStatsRspParams)
4874 {
4875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004876 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004877 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004878 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 return VOS_STATUS_E_NOMEM;
4880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4882 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4883 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4884 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4885 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4886 (void *)pGetPEStatsRspParams, 0) ;
4887 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 /* Free the request message */
4889 vos_mem_free(pGetStatsParams);
4890 return CONVERT_WDI2VOS_STATUS(status);
4891}
Jeff Johnson295189b2012-06-20 16:38:30 -07004892/*
4893 * FUNCTION: WDA_UpdateEDCAParamCallback
4894 * call back function for Update EDCA params from WDI
4895 */
4896void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4897{
4898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4899 tEdcaParams *pEdcaParams;
4900
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004902 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 if(NULL == pWdaParams)
4904 {
4905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004906 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_ASSERT(0) ;
4908 return ;
4909 }
4910 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4912 vos_mem_free(pWdaParams);
4913 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004914 return ;
4915}
Jeff Johnson295189b2012-06-20 16:38:30 -07004916/*
4917 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4918 * Request to WDI to Update the EDCA params.
4919 */
4920VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4921 tEdcaParams *pEdcaParams)
4922{
4923 WDI_Status status = WDI_STATUS_SUCCESS ;
4924 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4925 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4926 sizeof(WDI_UpdateEDCAParamsType)) ;
4927 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004930 if(NULL == wdiEdcaParam)
4931 {
4932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004934 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004935 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 return VOS_STATUS_E_NOMEM;
4937 }
4938 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4939 if(NULL == pWdaParams)
4940 {
4941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004943 VOS_ASSERT(0);
4944 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004945 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004946 return VOS_STATUS_E_NOMEM;
4947 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4949 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4950 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4951 &pEdcaParams->acbe);
4952 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4953 &pEdcaParams->acbk);
4954 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4955 &pEdcaParams->acvi);
4956 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4957 &pEdcaParams->acvo);
4958 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004959 pWdaParams->pWdaContext = pWDA;
4960 /* Store remove key pointer, as this will be used for response */
4961 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 /* store Params pass it to WDI */
4963 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4965 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 if(IS_WDI_STATUS_FAILURE(status))
4967 {
4968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4969 "Failure in Update EDCA Params WDI API, free all the memory " );
4970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4971 vos_mem_free(pWdaParams);
4972 vos_mem_free(pEdcaParams);
4973 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 return CONVERT_WDI2VOS_STATUS(status) ;
4975}
Jeff Johnson295189b2012-06-20 16:38:30 -07004976/*
4977 * FUNCTION: WDA_AddBAReqCallback
4978 * send ADD BA RSP back to PE
4979 */
4980void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
4981 void* pUserData)
4982{
4983 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4984 tWDA_CbContext *pWDA;
4985 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004987 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 if(NULL == pWdaParams)
4989 {
4990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004991 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004992 VOS_ASSERT(0) ;
4993 return ;
4994 }
4995 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4996 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4998 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004999 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005000 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 return ;
5002}
5003
Jeff Johnson295189b2012-06-20 16:38:30 -07005004/*
5005 * FUNCTION: WDA_ProcessAddBAReq
5006 * Request to WDI to Update the ADDBA REQ params.
5007 */
5008VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5009 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5010{
Jeff Johnson43971f52012-07-17 12:26:56 -07005011 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5013 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5014 sizeof(WDI_AddBAReqParamsType)) ;
5015 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 if(NULL == wdiAddBAReqParam)
5019 {
5020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 VOS_ASSERT(0);
5023 return VOS_STATUS_E_NOMEM;
5024 }
5025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5026 if(NULL == pWdaParams)
5027 {
5028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005030 VOS_ASSERT(0);
5031 vos_mem_free(wdiAddBAReqParam);
5032 return VOS_STATUS_E_NOMEM;
5033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 do
5035 {
5036 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 wdiAddBaInfo->ucSTAIdx = staIdx ;
5038 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5039 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 } while(0) ;
5041 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 pWdaParams->pWdaContext = pWDA;
5043 /* store Params pass it to WDI */
5044 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5045 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005046 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5047 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005048
Jeff Johnson43971f52012-07-17 12:26:56 -07005049 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005050 {
5051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005052 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5053 status = CONVERT_WDI2VOS_STATUS(wstatus);
5054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 vos_mem_free(pWdaParams);
5056 pAddBAReqParams->status = eSIR_FAILURE;
5057 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5058 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005059 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005060}
Jeff Johnson295189b2012-06-20 16:38:30 -07005061/*
5062 * FUNCTION: WDA_AddBASessionReqCallback
5063 * send ADD BA SESSION RSP back to PE/(or TL)
5064 */
5065void WDA_AddBASessionReqCallback(
5066 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5067{
5068 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5069 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5070 tWDA_CbContext *pWDA;
5071 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005073 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 if(NULL == pWdaParams)
5075 {
5076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005077 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 VOS_ASSERT(0) ;
5079 return ;
5080 }
5081 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5082 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 if( NULL == pAddBAReqParams )
5084 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005086 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005088 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5089 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 return ;
5091 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5093 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 /*
5095 * if WDA in update TL state, update TL with BA session parama and send
5096 * another request to HAL(/WDI) (ADD_BA_REQ)
5097 */
5098
5099 if((VOS_STATUS_SUCCESS ==
5100 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5101 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5102 {
5103 /* Update TL with BA info received from HAL/WDI */
5104 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5105 wdiAddBaSession->usBaSessionID,
5106 wdiAddBaSession->ucSTAIdx,
5107 wdiAddBaSession->ucBaTID,
5108 wdiAddBaSession->ucBaBufferSize,
5109 wdiAddBaSession->ucWinSize,
5110 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5112 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5113 }
5114 else
5115 {
5116 pAddBAReqParams->status =
5117 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5118
5119 /* Setting Flag to indicate that Set BA is success */
5120 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5121 {
5122 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5123 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5124 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5125 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005126 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005128 /*Reset the WDA state to READY */
5129 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 return ;
5131}
5132
Jeff Johnson295189b2012-06-20 16:38:30 -07005133/*
5134 * FUNCTION: WDA_ProcessAddBASessionReq
5135 * Request to WDI to Update the ADDBA REQ params.
5136 */
5137VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5138 tAddBAParams *pAddBAReqParams)
5139{
5140 WDI_Status status = WDI_STATUS_SUCCESS ;
5141 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5142 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5143 sizeof(WDI_AddBASessionReqParamsType)) ;
5144 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005146 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 if(NULL == wdiAddBASessionReqParam)
5148 {
5149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005150 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 VOS_ASSERT(0);
5152 return VOS_STATUS_E_NOMEM;
5153 }
5154 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5155 if(NULL == pWdaParams)
5156 {
5157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005158 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005159 VOS_ASSERT(0);
5160 vos_mem_free(wdiAddBASessionReqParam);
5161 return VOS_STATUS_E_NOMEM;
5162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 /*
5164 * Populate ADD BA parameters and pass these paarmeters to WDI.
5165 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5166 * the state to track if these is BA recipient case or BA initiator
5167 * case.
5168 */
5169 do
5170 {
5171 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5172 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5173 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5174 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5175 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5176 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5177 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005178 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5180 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5181 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5182 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5183 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 /* check the BA direction and update state accordingly */
5185 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5186 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5187 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5188
5189 }while(0) ;
5190 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005191 pWdaParams->pWdaContext = pWDA;
5192 /* Store ADD BA pointer, as this will be used for response */
5193 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5194 /* store Params pass it to WDI */
5195 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5197 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005198 if(IS_WDI_STATUS_FAILURE(status))
5199 {
5200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5201 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5202 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5203 vos_mem_free(pWdaParams->wdaMsgParam);
5204 vos_mem_free(pWdaParams);
5205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005207}
Jeff Johnson295189b2012-06-20 16:38:30 -07005208/*
5209 * FUNCTION: WDA_DelBANotifyTL
5210 * send DEL BA IND to TL
5211 */
5212void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5213 tDelBAParams *pDelBAReqParams)
5214{
5215 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5216 //tSirMsgQ msg;
5217 vos_msg_t vosMsg;
5218 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 if(NULL == pDelBAInd)
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 VOS_ASSERT(0) ;
5224 return;
5225 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005226 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5227 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5228 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5229 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005230
Jeff Johnson295189b2012-06-20 16:38:30 -07005231
5232 vosMsg.type = WDA_DELETEBA_IND;
5233 vosMsg.bodyptr = pDelBAInd;
5234 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5235 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5236 {
5237 vosStatus = VOS_STATUS_E_BADMSG;
5238 }
5239}
Jeff Johnson295189b2012-06-20 16:38:30 -07005240/*
5241 * FUNCTION: WDA_DelBAReqCallback
5242 * send DEL BA RSP back to PE
5243 */
5244void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5245{
5246 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5247 tWDA_CbContext *pWDA;
5248 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005250 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005251 if(NULL == pWdaParams)
5252 {
5253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005254 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005255 VOS_ASSERT(0) ;
5256 return ;
5257 }
5258 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5259 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 /* Notify TL about DEL BA in case of recipinet */
5261 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5262 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5263 {
5264 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005266 /*
5267 * No respone required for WDA_DELBA_IND so just free the request
5268 * param here
5269 */
5270 vos_mem_free(pDelBAReqParams);
5271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5272 vos_mem_free(pWdaParams);
5273 return ;
5274}
5275
Jeff Johnson295189b2012-06-20 16:38:30 -07005276/*
5277 * FUNCTION: WDA_ProcessDelBAReq
5278 * Request to WDI to Update the DELBA REQ params.
5279 */
5280VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5281 tDelBAParams *pDelBAReqParams)
5282{
5283 WDI_Status status = WDI_STATUS_SUCCESS ;
5284 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5285 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5286 sizeof(WDI_DelBAReqParamsType)) ;
5287 tWDA_ReqParams *pWdaParams ;
5288 tANI_U16 staIdx = 0;
5289 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 if(NULL == wdiDelBAReqParam)
5293 {
5294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 VOS_ASSERT(0);
5297 return VOS_STATUS_E_NOMEM;
5298 }
5299 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5300 if(NULL == pWdaParams)
5301 {
5302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005303 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005304 VOS_ASSERT(0);
5305 vos_mem_free(wdiDelBAReqParam);
5306 return VOS_STATUS_E_NOMEM;
5307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005308 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5309 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5310 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5311 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005312 pWdaParams->pWdaContext = pWDA;
5313 /* Store DEL BA pointer, as this will be used for response */
5314 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005315 /* store Params pass it to WDI */
5316 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005317 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5318 * maintained in WDA, so that WDA can retry for another BA session
5319 */
5320 staIdx = pDelBAReqParams->staIdx;
5321 tid = pDelBAReqParams->baTID;
5322 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005323 status = WDI_DelBAReq(wdiDelBAReqParam,
5324 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 if(IS_WDI_STATUS_FAILURE(status))
5326 {
5327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5328 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5329 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5330 vos_mem_free(pWdaParams->wdaMsgParam);
5331 vos_mem_free(pWdaParams);
5332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334}
Jeff Johnson295189b2012-06-20 16:38:30 -07005335/*
5336 * FUNCTION: WDA_AddTSReqCallback
5337 * send ADD TS RSP back to PE
5338 */
5339void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5340{
5341 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5342 tWDA_CbContext *pWDA;
5343 tAddTsParams *pAddTsReqParams;
5344
5345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005346 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 if(NULL == pWdaParams)
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005350 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005351 VOS_ASSERT(0) ;
5352 return ;
5353 }
5354 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5355 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5357 vos_mem_free(pWdaParams);
5358
5359 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005360 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 return ;
5362}
5363
Jeff Johnson295189b2012-06-20 16:38:30 -07005364/*
5365 * FUNCTION: WDA_ProcessAddTSReq
5366 * Request to WDI to Update the ADD TS REQ params.
5367 */
5368VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5369 tAddTsParams *pAddTsReqParams)
5370{
5371 WDI_Status status = WDI_STATUS_SUCCESS ;
5372 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5373 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5374 sizeof(WDI_AddTSReqParamsType)) ;
5375 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005377 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005378 if(NULL == wdiAddTSReqParam)
5379 {
5380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005381 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 VOS_ASSERT(0);
5383 return VOS_STATUS_E_NOMEM;
5384 }
5385 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5386 if(NULL == pWdaParams)
5387 {
5388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005389 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005390 VOS_ASSERT(0);
5391 vos_mem_free(wdiAddTSReqParam);
5392 return VOS_STATUS_E_NOMEM;
5393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005394 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5395 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005396 //TS IE
5397 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5398 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5399 pAddTsReqParams->tspec.length;
5400
5401 //TS IE : TS INFO : TRAFFIC
5402 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5403 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5404 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5405 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5406 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5407 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5408 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5409 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5410 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5411 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5412 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5413 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5414 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5415 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5416 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5417 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5418
5419 //TS IE : TS INFO : SCHEDULE
5420 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5421 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5422 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5423 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005424 //TS IE
5425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5426 pAddTsReqParams->tspec.nomMsduSz;
5427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5428 pAddTsReqParams->tspec.maxMsduSz;
5429 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5430 pAddTsReqParams->tspec.minSvcInterval;
5431 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5432 pAddTsReqParams->tspec.maxSvcInterval;
5433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5434 pAddTsReqParams->tspec.inactInterval;
5435 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5436 pAddTsReqParams->tspec.suspendInterval;
5437 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5438 pAddTsReqParams->tspec.svcStartTime;
5439 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5440 pAddTsReqParams->tspec.minDataRate;
5441 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5442 pAddTsReqParams->tspec.meanDataRate;
5443 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5444 pAddTsReqParams->tspec.peakDataRate;
5445 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5446 pAddTsReqParams->tspec.maxBurstSz;
5447 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5448 pAddTsReqParams->tspec.delayBound;
5449 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5450 pAddTsReqParams->tspec.minPhyRate;
5451 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5452 pAddTsReqParams->tspec.surplusBw;
5453 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5454 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005455 /* TODO: tAddTsParams doesn't have the following fields */
5456#if 0
5457 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5458 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5459 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5460 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5461#endif
5462 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5463
5464 pWdaParams->pWdaContext = pWDA;
5465 /* Store ADD TS pointer, as this will be used for response */
5466 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005467 /* store Params pass it to WDI */
5468 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005469 status = WDI_AddTSReq(wdiAddTSReqParam,
5470 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005471 if(IS_WDI_STATUS_FAILURE(status))
5472 {
5473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5474 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5475 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5476 vos_mem_free(pWdaParams);
5477 pAddTsReqParams->status = eSIR_FAILURE ;
5478 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005480 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005481}
5482
Jeff Johnson295189b2012-06-20 16:38:30 -07005483/*
5484 * FUNCTION: WDA_DelTSReqCallback
5485 * send DEL TS RSP back to PE
5486 */
5487void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5488{
5489 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005491 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5493 vos_mem_free(pWdaParams->wdaMsgParam) ;
5494 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 /*
5496 * No respone required for WDA_DEL_TS_REQ so just free the request
5497 * param here
5498 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005499 return ;
5500}
5501
Jeff Johnson295189b2012-06-20 16:38:30 -07005502/*
5503 * FUNCTION: WDA_ProcessDelTSReq
5504 * Request to WDI to Update the DELTS REQ params.
5505 */
5506VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5507 tDelTsParams *pDelTSReqParams)
5508{
5509 WDI_Status status = WDI_STATUS_SUCCESS ;
5510 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5511 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5512 sizeof(WDI_DelTSReqParamsType)) ;
5513 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005515 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 if(NULL == wdiDelTSReqParam)
5517 {
5518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 VOS_ASSERT(0);
5521 return VOS_STATUS_E_NOMEM;
5522 }
5523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5524 if(NULL == pWdaParams)
5525 {
5526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005528 VOS_ASSERT(0);
5529 vos_mem_free(wdiDelTSReqParam);
5530 return VOS_STATUS_E_NOMEM;
5531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005532 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5533 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5534 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5535 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5536 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 pWdaParams->pWdaContext = pWDA;
5538 /* Store DEL TS pointer, as this will be used for response */
5539 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005540 /* store Params pass it to WDI */
5541 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 status = WDI_DelTSReq(wdiDelTSReqParam,
5543 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005544 if(IS_WDI_STATUS_FAILURE(status))
5545 {
5546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5547 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5548 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5549 vos_mem_free(pWdaParams->wdaMsgParam);
5550 vos_mem_free(pWdaParams);
5551 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005552 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005553}
Jeff Johnson295189b2012-06-20 16:38:30 -07005554/*
5555 * FUNCTION: WDA_UpdateBeaconParamsCallback
5556 * Free the memory. No need to send any response to PE in this case
5557 */
5558void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5559{
5560 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005562 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 if(NULL == pWdaParams)
5564 {
5565 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005566 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005567 VOS_ASSERT(0) ;
5568 return ;
5569 }
5570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5571 vos_mem_free(pWdaParams->wdaMsgParam) ;
5572 vos_mem_free(pWdaParams);
5573 /*
5574 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5575 * param here
5576 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005577 return ;
5578}
Jeff Johnson295189b2012-06-20 16:38:30 -07005579/*
5580 * FUNCTION: WDA_ProcessUpdateBeaconParams
5581 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5582 */
5583VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5584 tUpdateBeaconParams *pUpdateBeaconParams)
5585{
5586 WDI_Status status = WDI_STATUS_SUCCESS ;
5587 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5588 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5589 sizeof(WDI_UpdateBeaconParamsType)) ;
5590 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005592 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005593 if(NULL == wdiUpdateBeaconParams)
5594 {
5595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 VOS_ASSERT(0);
5598 return VOS_STATUS_E_NOMEM;
5599 }
5600 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5601 if(NULL == pWdaParams)
5602 {
5603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005604 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005605 VOS_ASSERT(0);
5606 vos_mem_free(wdiUpdateBeaconParams);
5607 return VOS_STATUS_E_NOMEM;
5608 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005609 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5610 pUpdateBeaconParams->bssIdx;
5611 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5612 pUpdateBeaconParams->fShortPreamble;
5613 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5614 pUpdateBeaconParams->fShortSlotTime;
5615 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5616 pUpdateBeaconParams->beaconInterval;
5617 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5618 pUpdateBeaconParams->llaCoexist;
5619 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5620 pUpdateBeaconParams->llbCoexist;
5621 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5622 pUpdateBeaconParams->llgCoexist;
5623 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5624 pUpdateBeaconParams->ht20MhzCoexist;
5625 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5626 pUpdateBeaconParams->llnNonGFCoexist;
5627 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5628 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5629 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5630 pUpdateBeaconParams->fRIFSMode;
5631 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5632 pUpdateBeaconParams->paramChangeBitmap;
5633 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5634
5635 pWdaParams->pWdaContext = pWDA;
5636 /* Store UpdateBeacon Req pointer, as this will be used for response */
5637 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005638 /* store Params pass it to WDI */
5639 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005640 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5641 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5642 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 if(IS_WDI_STATUS_FAILURE(status))
5644 {
5645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5646 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5647 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5648 vos_mem_free(pWdaParams->wdaMsgParam);
5649 vos_mem_free(pWdaParams);
5650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005651 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005652}
Jeff Johnson295189b2012-06-20 16:38:30 -07005653#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005654/*
5655 * FUNCTION: WDA_TSMStatsReqCallback
5656 * send TSM Stats RSP back to PE
5657 */
5658void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5659{
5660 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5661 tWDA_CbContext *pWDA = NULL;
5662 tTSMStats *pTsmRspParams = NULL;
5663
5664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005665 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 if(NULL == pWdaParams)
5667 {
5668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005669 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005670 VOS_ASSERT(0) ;
5671 return ;
5672 }
5673 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5674 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 if( NULL == pTsmRspParams )
5676 {
5677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005678 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005679 VOS_ASSERT( 0 );
5680 return ;
5681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005682 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5683 vos_mem_free(pWdaParams);
5684
5685 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5686 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5687 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5688 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5689 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5690 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5691 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5692 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5693 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5694 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 return ;
5697}
5698
5699
Jeff Johnson295189b2012-06-20 16:38:30 -07005700/*
5701 * FUNCTION: WDA_ProcessTsmStatsReq
5702 * Request to WDI to get the TSM Stats params.
5703 */
5704VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5705 tTSMStats *pTsmStats)
5706{
5707 WDI_Status status = WDI_STATUS_SUCCESS ;
5708 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5709 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005711 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005712 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5713 sizeof(WDI_TSMStatsReqParamsType));
5714 if(NULL == wdiTSMReqParam)
5715 {
5716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005717 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 VOS_ASSERT(0);
5719 return VOS_STATUS_E_NOMEM;
5720 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005721 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5722 if(NULL == pWdaParams)
5723 {
5724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005725 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 VOS_ASSERT(0);
5727 vos_mem_free(wdiTSMReqParam);
5728 return VOS_STATUS_E_NOMEM;
5729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5731 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5732 pTsmStats->bssId,
5733 sizeof(wpt_macAddr));
5734 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5735
5736 pWdaParams->pWdaContext = pWDA;
5737 /* Store TSM Stats pointer, as this will be used for response */
5738 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 /* store Params pass it to WDI */
5740 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005741 status = WDI_TSMStatsReq(wdiTSMReqParam,
5742 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 if(IS_WDI_STATUS_FAILURE(status))
5744 {
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5746 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5748 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005749 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 return CONVERT_WDI2VOS_STATUS(status) ;
5752}
5753#endif
5754/*
5755 * FUNCTION: WDA_SendBeaconParamsCallback
5756 * No need to send any response to PE in this case
5757 */
5758void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5759{
5760
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005762 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 return ;
5764}
Jeff Johnson295189b2012-06-20 16:38:30 -07005765/*
5766 * FUNCTION: WDA_ProcessSendBeacon
5767 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5768 * start beacon trasmission
5769 */
5770VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5771 tSendbeaconParams *pSendbeaconParams)
5772{
5773 WDI_Status status = WDI_STATUS_SUCCESS ;
5774 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005775 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005776 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005777 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5778 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5779 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5780 pSendbeaconParams->beaconLength;
5781#ifdef WLAN_SOFTAP_FEATURE
5782 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5783 pSendbeaconParams->timIeOffset;
5784#endif
5785#ifdef WLAN_FEATURE_P2P
5786 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5787 pSendbeaconParams->p2pIeOffset;
5788#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005789 /* Copy the beacon template to local buffer */
5790 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5791 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5792 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5793
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5795 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 if(IS_WDI_STATUS_FAILURE(status))
5797 {
5798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5799 "Failure in SEND BEACON REQ Params WDI API" );
5800 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 vos_mem_free(pSendbeaconParams);
5802 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005803}
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5806 * No need to send any response to PE in this case
5807 */
5808void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5809{
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005811 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005812 return ;
5813}
5814
Jeff Johnson295189b2012-06-20 16:38:30 -07005815/*
5816 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5817 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5818 * send probe response
5819 */
5820VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5821 tSendProbeRespParams *pSendProbeRspParams)
5822{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005823 WDI_Status status = WDI_STATUS_SUCCESS;
5824 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5825 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005827 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005828
5829 if (!wdiSendProbeRspParam)
5830 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5831
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005833 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005835 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 /* Copy the Probe Response template to local buffer */
5838 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005839 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005840 pSendProbeRspParams->pProbeRespTemplate,
5841 pSendProbeRspParams->probeRespTemplateLen);
5842 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005843 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005844 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5845 WDI_PROBE_REQ_BITMAP_IE_LEN);
5846
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005847 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005848
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005849 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005850 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005851 if(IS_WDI_STATUS_FAILURE(status))
5852 {
5853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5854 "Failure in SEND Probe RSP Params WDI API" );
5855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005857 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005859}
Jeff Johnson295189b2012-06-20 16:38:30 -07005860#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5861/*
5862 * FUNCTION: WDA_SetMaxTxPowerCallBack
5863 * send the response to PE with power value received from WDI
5864 */
5865void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5866 void* pUserData)
5867{
5868 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5869 tWDA_CbContext *pWDA = NULL;
5870 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5871
5872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005873 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005874 if(NULL == pWdaParams)
5875 {
5876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005877 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 VOS_ASSERT(0) ;
5879 return ;
5880 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5882 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005883 if( NULL == pMaxTxPowerParams )
5884 {
5885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005886 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005887 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005888 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5889 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005890 return ;
5891 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005892
Jeff Johnson295189b2012-06-20 16:38:30 -07005893
5894 /*need to free memory for the pointers used in the
5895 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5897 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005898 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005899
Jeff Johnson295189b2012-06-20 16:38:30 -07005900
5901 /* send response to UMAC*/
5902 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5903
5904 return;
5905}
Jeff Johnson295189b2012-06-20 16:38:30 -07005906/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005907 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 * Request to WDI to send set Max Tx Power Request
5909 */
5910 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5911 tMaxTxPowerParams *MaxTxPowerParams)
5912{
5913 WDI_Status status = WDI_STATUS_SUCCESS;
5914 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5915 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005916
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005918 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005919
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5921 sizeof(WDI_SetMaxTxPowerParamsType));
5922 if(NULL == wdiSetMaxTxPowerParams)
5923 {
5924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005926 VOS_ASSERT(0);
5927 return VOS_STATUS_E_NOMEM;
5928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5930 if(NULL == pWdaParams)
5931 {
5932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 vos_mem_free(wdiSetMaxTxPowerParams);
5935 VOS_ASSERT(0);
5936 return VOS_STATUS_E_NOMEM;
5937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 /* Copy.Max.Tx.Power Params to WDI structure */
5939 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5940 MaxTxPowerParams->bssId,
5941 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5943 MaxTxPowerParams->selfStaMacAddr,
5944 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005945 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5946 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 pWdaParams->pWdaContext = pWDA;
5949 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 /* store Params pass it to WDI */
5951 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5953 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 if(IS_WDI_STATUS_FAILURE(status))
5955 {
5956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5957 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5959 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005960 /* send response to UMAC*/
5961 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005962 }
5963 return CONVERT_WDI2VOS_STATUS(status);
5964
5965}
Jeff Johnson295189b2012-06-20 16:38:30 -07005966#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005967#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005968/*
5969 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5970 * Free the memory. No need to send any response to PE in this case
5971 */
5972void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5973{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005974 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5975
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005977 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005978
5979 if(NULL == pWdaParams)
5980 {
5981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005983 VOS_ASSERT(0) ;
5984 return ;
5985 }
5986
5987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5988 vos_mem_free(pWdaParams->wdaMsgParam) ;
5989 vos_mem_free(pWdaParams);
5990
Jeff Johnson295189b2012-06-20 16:38:30 -07005991 /*
5992 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
5993 * so just free the request param here
5994 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005995 return ;
5996}
5997
Jeff Johnson295189b2012-06-20 16:38:30 -07005998/*
5999 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6000 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6001 */
6002VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6003 tP2pPsParams *pP2pPsConfigParams)
6004{
6005 WDI_Status status = WDI_STATUS_SUCCESS ;
6006 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6007 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6008 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006009 tWDA_ReqParams *pWdaParams = NULL;
6010
Jeff Johnson295189b2012-06-20 16:38:30 -07006011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006012 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 if(NULL == wdiSetP2PGONOAReqParam)
6014 {
6015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 VOS_ASSERT(0);
6018 return VOS_STATUS_E_NOMEM;
6019 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006020
6021 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6022 if(NULL == pWdaParams)
6023 {
6024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006025 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006026 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006027 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006028 VOS_ASSERT(0);
6029 return VOS_STATUS_E_NOMEM;
6030 }
6031
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6033 pP2pPsConfigParams->opp_ps;
6034 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6035 pP2pPsConfigParams->ctWindow;
6036 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6037 pP2pPsConfigParams->count;
6038 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6039 pP2pPsConfigParams->duration;
6040 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6041 pP2pPsConfigParams->interval;
6042 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6043 pP2pPsConfigParams->single_noa_duration;
6044 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6045 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006046
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6048 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006049 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6050
Jeff Johnson295189b2012-06-20 16:38:30 -07006051 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006052 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6053 pWdaParams->pWdaContext = pWDA;
6054
Jeff Johnson295189b2012-06-20 16:38:30 -07006055 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006056 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6057
Jeff Johnson295189b2012-06-20 16:38:30 -07006058 if(IS_WDI_STATUS_FAILURE(status))
6059 {
6060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6061 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006062 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6063 vos_mem_free(pWdaParams->wdaMsgParam);
6064 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006066 return CONVERT_WDI2VOS_STATUS(status);
6067
Jeff Johnson295189b2012-06-20 16:38:30 -07006068}
6069#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006070#ifdef WLAN_FEATURE_VOWIFI_11R
6071/*
6072 * FUNCTION: WDA_AggrAddTSReqCallback
6073 * send ADD AGGREGATED TS RSP back to PE
6074 */
6075void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6076{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006077 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6078 tWDA_CbContext *pWDA;
6079 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006082 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006083 if(NULL == pWdaParams)
6084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006086 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006087 VOS_ASSERT(0) ;
6088 return ;
6089 }
6090
6091 pWDA = pWdaParams->pWdaContext;
6092 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006093
6094 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6095 {
6096 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006098 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006099
6100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6101 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 return ;
6103}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006104/*
6105 * FUNCTION: WDA_ProcessAddTSReq
6106 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6107 */
6108VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6109 tAggrAddTsParams *pAggrAddTsReqParams)
6110{
6111 WDI_Status status = WDI_STATUS_SUCCESS ;
6112 int i;
6113 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006114 tWDA_ReqParams *pWdaParams = NULL;
6115
6116
Jeff Johnson295189b2012-06-20 16:38:30 -07006117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6120 sizeof(WDI_AggrAddTSReqParamsType)) ;
6121 if(NULL == wdiAggrAddTSReqParam)
6122 {
6123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006124 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006125 VOS_ASSERT(0);
6126 return VOS_STATUS_E_NOMEM;
6127 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006128
6129
6130 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6131 if(NULL == pWdaParams)
6132 {
6133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006134 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006135 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006136 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006137 VOS_ASSERT(0);
6138 return VOS_STATUS_E_NOMEM;
6139 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6141 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6142 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006143 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6144 {
6145 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6146 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6147 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6149 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6150 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6151 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6152 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6153 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6154 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6155 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6156 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6157 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6158 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6159 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6160 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6161 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6162 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6163 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6165 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006166 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6167 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6168 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6169 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6170 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6171 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6172 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6173 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6174 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6175 pAggrAddTsReqParams->tspec[i].inactInterval;
6176 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6177 pAggrAddTsReqParams->tspec[i].suspendInterval;
6178 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6179 pAggrAddTsReqParams->tspec[i].svcStartTime;
6180 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6181 pAggrAddTsReqParams->tspec[i].minDataRate;
6182 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6183 pAggrAddTsReqParams->tspec[i].meanDataRate;
6184 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6185 pAggrAddTsReqParams->tspec[i].peakDataRate;
6186 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6187 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6188 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6189 pAggrAddTsReqParams->tspec[i].delayBound;
6190 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6191 pAggrAddTsReqParams->tspec[i].minPhyRate;
6192 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6193 pAggrAddTsReqParams->tspec[i].surplusBw;
6194 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6195 pAggrAddTsReqParams->tspec[i].mediumTime;
6196 }
6197
6198 /* TODO: tAggrAddTsParams doesn't have the following fields */
6199#if 0
6200 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6201 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6202 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6203 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6204#endif
6205 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6206
6207 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006208 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006209 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006210 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6211
6212 pWdaParams->pWdaContext = pWDA;
6213
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006215 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6216
Jeff Johnson295189b2012-06-20 16:38:30 -07006217 if(IS_WDI_STATUS_FAILURE(status))
6218 {
6219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6220 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006221 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6222 vos_mem_free(pWdaParams);
6223
6224 /* send the failure response back to PE*/
6225 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6226 {
6227 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6228 }
6229
6230 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6231 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006233 return CONVERT_WDI2VOS_STATUS(status) ;
6234}
6235#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006236/*
6237 * FUNCTION: WDA_EnterImpsReqCallback
6238 * send Enter IMPS RSP back to PE
6239 */
6240void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6241{
6242 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006244 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006245 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006246 return ;
6247}
Jeff Johnson295189b2012-06-20 16:38:30 -07006248/*
6249 * FUNCTION: WDA_ProcessEnterImpsReq
6250 * Request to WDI to Enter IMPS power state.
6251 */
6252VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6253{
6254 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006256 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006257 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006258 if(IS_WDI_STATUS_FAILURE(status))
6259 {
6260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6261 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006262 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 return CONVERT_WDI2VOS_STATUS(status) ;
6265}
Jeff Johnson295189b2012-06-20 16:38:30 -07006266/*
6267 * FUNCTION: WDA_ExitImpsReqCallback
6268 * send Exit IMPS RSP back to PE
6269 */
6270void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6271{
6272 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006275 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 return ;
6277}
Jeff Johnson295189b2012-06-20 16:38:30 -07006278/*
6279 * FUNCTION: WDA_ProcessExitImpsReq
6280 * Request to WDI to Exit IMPS power state.
6281 */
6282VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6283{
6284 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006288 if(IS_WDI_STATUS_FAILURE(status))
6289 {
6290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6291 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006292 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 return CONVERT_WDI2VOS_STATUS(status) ;
6295}
Jeff Johnson295189b2012-06-20 16:38:30 -07006296/*
6297 * FUNCTION: WDA_EnterBmpsReqCallback
6298 * send Enter BMPS RSP back to PE
6299 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006300void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006301{
6302 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6303 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006304 tEnterBmpsParams *pEnterBmpsRspParams;
6305
Jeff Johnson295189b2012-06-20 16:38:30 -07006306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006307 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006308 if(NULL == pWdaParams)
6309 {
6310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006311 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006312 VOS_ASSERT(0) ;
6313 return ;
6314 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006315
6316 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6317 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6318
6319 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6320 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6321
6322 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006323 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006324 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6325
Jeff Johnson295189b2012-06-20 16:38:30 -07006326 return ;
6327}
Jeff Johnson295189b2012-06-20 16:38:30 -07006328/*
6329 * FUNCTION: WDA_ProcessEnterBmpsReq
6330 * Request to WDI to Enter BMPS power state.
6331 */
6332VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6333 tEnterBmpsParams *pEnterBmpsReqParams)
6334{
6335 WDI_Status status = WDI_STATUS_SUCCESS;
6336 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6337 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006339 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6341 {
6342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006343 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 VOS_ASSERT(0);
6345 return VOS_STATUS_E_FAILURE;
6346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6348 if (NULL == wdiEnterBmpsReqParams)
6349 {
6350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006351 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006353 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6354 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006355 return VOS_STATUS_E_NOMEM;
6356 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6358 if (NULL == pWdaParams)
6359 {
6360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006361 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_ASSERT(0);
6363 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006364 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6365 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 return VOS_STATUS_E_NOMEM;
6367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6369 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6370 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6371 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006372 // For CCX and 11R Roaming
6373 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6374 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6375 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6376 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006377
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 /* Store param pointer as passed in by caller */
6379 /* store Params pass it to WDI */
6380 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006381 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6384 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006385 if (IS_WDI_STATUS_FAILURE(status))
6386 {
6387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6388 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6389 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006390 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006391 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006392 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 return CONVERT_WDI2VOS_STATUS(status);
6395}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006396
6397
6398static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6399 WDI_Status wdiStatus,
6400 tExitBmpsParams *pExitBmpsReqParams)
6401{
6402 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6403
6404 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6405}
6406
6407
Jeff Johnson295189b2012-06-20 16:38:30 -07006408/*
6409 * FUNCTION: WDA_ExitBmpsReqCallback
6410 * send Exit BMPS RSP back to PE
6411 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006412void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006413{
6414 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6415 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006416 tExitBmpsParams *pExitBmpsRspParams;
6417
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006419 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006420 if(NULL == pWdaParams)
6421 {
6422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006423 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006424 VOS_ASSERT(0) ;
6425 return ;
6426 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006427
6428 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6429 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6430
6431 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6432 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006433
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6435 vos_mem_free(pWdaParams) ;
6436
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006437 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 return ;
6439}
Jeff Johnson295189b2012-06-20 16:38:30 -07006440/*
6441 * FUNCTION: WDA_ProcessExitBmpsReq
6442 * Request to WDI to Exit BMPS power state.
6443 */
6444VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6445 tExitBmpsParams *pExitBmpsReqParams)
6446{
6447 WDI_Status status = WDI_STATUS_SUCCESS ;
6448 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6449 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6450 sizeof(WDI_ExitBmpsReqParamsType)) ;
6451 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006453 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006454 if(NULL == wdiExitBmpsReqParams)
6455 {
6456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006457 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006458 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006459 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 return VOS_STATUS_E_NOMEM;
6461 }
6462 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6463 if(NULL == pWdaParams)
6464 {
6465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006466 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 VOS_ASSERT(0);
6468 vos_mem_free(wdiExitBmpsReqParams);
6469 return VOS_STATUS_E_NOMEM;
6470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006471 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006472
6473 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6474
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6476
6477 /* Store param pointer as passed in by caller */
6478 /* store Params pass it to WDI */
6479 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6480 pWdaParams->pWdaContext = pWDA;
6481 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6483 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 if(IS_WDI_STATUS_FAILURE(status))
6485 {
6486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6487 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6489 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006490 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 return CONVERT_WDI2VOS_STATUS(status) ;
6493}
Jeff Johnson295189b2012-06-20 16:38:30 -07006494/*
6495 * FUNCTION: WDA_EnterUapsdReqCallback
6496 * send Enter UAPSD RSP back to PE
6497 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006498void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006499{
6500 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6501 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006502 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006504 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 if(NULL == pWdaParams)
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006508 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 VOS_ASSERT(0) ;
6510 return ;
6511 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006512
6513 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6514 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6515
6516 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6517 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6518
Jeff Johnson295189b2012-06-20 16:38:30 -07006519 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6520 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006521 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006522 return ;
6523}
Jeff Johnson295189b2012-06-20 16:38:30 -07006524/*
6525 * FUNCTION: WDA_ProcessEnterUapsdReq
6526 * Request to WDI to Enter UAPSD power state.
6527 */
6528VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6529 tUapsdParams *pEnterUapsdReqParams)
6530{
6531 WDI_Status status = WDI_STATUS_SUCCESS ;
6532 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6533 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6534 sizeof(WDI_EnterUapsdReqParamsType)) ;
6535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006538 if(NULL == wdiEnterUapsdReqParams)
6539 {
6540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006542 VOS_ASSERT(0);
6543 return VOS_STATUS_E_NOMEM;
6544 }
6545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6546 if(NULL == pWdaParams)
6547 {
6548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006550 VOS_ASSERT(0);
6551 vos_mem_free(wdiEnterUapsdReqParams);
6552 return VOS_STATUS_E_NOMEM;
6553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006554 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6555 pEnterUapsdReqParams->beDeliveryEnabled;
6556 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6557 pEnterUapsdReqParams->beTriggerEnabled;
6558 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6559 pEnterUapsdReqParams->bkDeliveryEnabled;
6560 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6561 pEnterUapsdReqParams->bkTriggerEnabled;
6562 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6563 pEnterUapsdReqParams->viDeliveryEnabled;
6564 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6565 pEnterUapsdReqParams->viTriggerEnabled;
6566 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6567 pEnterUapsdReqParams->voDeliveryEnabled;
6568 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6569 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006570 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006571
6572 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6573
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 /* Store param pointer as passed in by caller */
6575 /* store Params pass it to WDI */
6576 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6577 pWdaParams->pWdaContext = pWDA;
6578 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006579 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6580 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006581 if(IS_WDI_STATUS_FAILURE(status))
6582 {
6583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6584 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6585 vos_mem_free(pWdaParams->wdaMsgParam) ;
6586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6587 vos_mem_free(pWdaParams) ;
6588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006589 return CONVERT_WDI2VOS_STATUS(status) ;
6590}
Jeff Johnson295189b2012-06-20 16:38:30 -07006591/*
6592 * FUNCTION: WDA_ExitUapsdReqCallback
6593 * send Exit UAPSD RSP back to PE
6594 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006595void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006596{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006597
6598 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6599 tWDA_CbContext *pWDA;
6600 tExitUapsdParams *pExitUapsdRspParams;
6601
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006603 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006604 if(NULL == pWdaParams)
6605 {
6606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006607 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006608 VOS_ASSERT(0);
6609 return;
6610 }
6611
6612 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6613 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6614
6615 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6616 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6617
6618 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6619 vos_mem_free(pWdaParams) ;
6620
6621 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006622 return ;
6623}
Jeff Johnson295189b2012-06-20 16:38:30 -07006624/*
6625 * FUNCTION: WDA_ProcessExitUapsdReq
6626 * Request to WDI to Exit UAPSD power state.
6627 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006628VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6629 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006630{
6631 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006632 tWDA_ReqParams *pWdaParams ;
6633 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6634 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6635 sizeof(WDI_ExitUapsdReqParamsType)) ;
6636
Jeff Johnson295189b2012-06-20 16:38:30 -07006637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006638 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006639
6640 if(NULL == wdiExitUapsdReqParams)
6641 {
6642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006643 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006644 VOS_ASSERT(0);
6645 return VOS_STATUS_E_NOMEM;
6646 }
6647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6648 if(NULL == pWdaParams)
6649 {
6650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006651 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006652 VOS_ASSERT(0);
6653 vos_mem_free(wdiExitUapsdReqParams);
6654 return VOS_STATUS_E_NOMEM;
6655 }
6656
6657 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6658 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6659
6660 /* Store param pointer as passed in by caller */
6661 /* store Params pass it to WDI */
6662 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6663 pWdaParams->pWdaContext = pWDA;
6664 pWdaParams->wdaMsgParam = pExitUapsdParams;
6665
6666 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006667 if(IS_WDI_STATUS_FAILURE(status))
6668 {
6669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6670 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006671 vos_mem_free(pWdaParams->wdaMsgParam) ;
6672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6673 vos_mem_free(pWdaParams) ;
6674
Jeff Johnson295189b2012-06-20 16:38:30 -07006675 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006676 return CONVERT_WDI2VOS_STATUS(status) ;
6677}
6678
Jeff Johnson295189b2012-06-20 16:38:30 -07006679/*
6680 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6681 *
6682 */
6683void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6684{
6685 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006687 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 if(NULL == pWdaParams)
6689 {
6690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006691 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006692 VOS_ASSERT(0) ;
6693 return ;
6694 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006695 if( pWdaParams != NULL )
6696 {
6697 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6698 {
6699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6700 }
6701 if( pWdaParams->wdaMsgParam != NULL )
6702 {
6703 vos_mem_free(pWdaParams->wdaMsgParam) ;
6704 }
6705 vos_mem_free(pWdaParams) ;
6706 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 return ;
6708}
Jeff Johnson295189b2012-06-20 16:38:30 -07006709/*
6710 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6711 * Request to WDI to set the power save params at start.
6712 */
6713VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6714 tSirPowerSaveCfg *pPowerSaveCfg)
6715{
6716 WDI_Status status = WDI_STATUS_SUCCESS ;
6717 tHalCfg *tlvStruct = NULL ;
6718 tANI_U8 *tlvStructStart = NULL ;
6719 v_PVOID_t *configParam;
6720 tANI_U32 configParamSize;
6721 tANI_U32 *configDataValue;
6722 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6723 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006725 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006726 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6727 {
6728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006729 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006730 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006731 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006732 return VOS_STATUS_E_FAILURE;
6733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006734 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6735 if (NULL == wdiPowerSaveCfg)
6736 {
6737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006740 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006741 return VOS_STATUS_E_NOMEM;
6742 }
6743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6744 if(NULL == pWdaParams)
6745 {
6746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 VOS_ASSERT(0);
6749 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006750 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 return VOS_STATUS_E_NOMEM;
6752 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6754 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 if(NULL == configParam)
6756 {
6757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006758 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006759 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 vos_mem_free(pWdaParams);
6761 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006762 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 return VOS_STATUS_E_NOMEM;
6764 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 vos_mem_set(configParam, configParamSize, 0);
6766 wdiPowerSaveCfg->pConfigBuffer = configParam;
6767 tlvStruct = (tHalCfg *)configParam;
6768 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6770 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6771 tlvStruct->length = sizeof(tANI_U32);
6772 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6773 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6775 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6777 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6778 tlvStruct->length = sizeof(tANI_U32);
6779 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6780 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006781 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6782 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006783 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6784 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6785 tlvStruct->length = sizeof(tANI_U32);
6786 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6787 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6789 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6791 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6792 tlvStruct->length = sizeof(tANI_U32);
6793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6794 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6796 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006797 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6798 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6799 tlvStruct->length = sizeof(tANI_U32);
6800 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6801 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6803 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6805 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6806 tlvStruct->length = sizeof(tANI_U32);
6807 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6808 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6810 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6812 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6813 tlvStruct->length = sizeof(tANI_U32);
6814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6815 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6817 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6819 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6820 tlvStruct->length = sizeof(tANI_U32);
6821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6822 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6824 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6826 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6827 tlvStruct->length = sizeof(tANI_U32);
6828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6829 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6830 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6831 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6833 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6834 tlvStruct->length = sizeof(tANI_U32);
6835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6836 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6838 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006839 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6840 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6841 tlvStruct->length = sizeof(tANI_U32);
6842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6843 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 /* store Params pass it to WDI */
6849 pWdaParams->wdaMsgParam = configParam;
6850 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6851 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6853 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 if(IS_WDI_STATUS_FAILURE(status))
6855 {
6856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6857 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6858 vos_mem_free(pWdaParams->wdaMsgParam);
6859 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6860 vos_mem_free(pWdaParams);
6861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006862 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 return CONVERT_WDI2VOS_STATUS(status);
6864}
Jeff Johnson295189b2012-06-20 16:38:30 -07006865/*
6866 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6867 *
6868 */
6869void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6870{
6871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006873 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6875 vos_mem_free(pWdaParams);
6876
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 return ;
6878}
Jeff Johnson295189b2012-06-20 16:38:30 -07006879/*
6880 * FUNCTION: WDA_SetUapsdAcParamsReq
6881 * Request to WDI to set the UAPSD params for an ac (sta mode).
6882 */
6883VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6884 tUapsdInfo *pUapsdInfo)
6885{
6886 WDI_Status status = WDI_STATUS_SUCCESS;
6887 tWDA_CbContext *pWDA = NULL ;
6888 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6889 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6890 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6891 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006893 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 if(NULL == wdiUapsdParams)
6895 {
6896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 VOS_ASSERT(0);
6899 return VOS_STATUS_E_NOMEM;
6900 }
6901 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6902 if(NULL == pWdaParams)
6903 {
6904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006905 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006906 VOS_ASSERT(0);
6907 vos_mem_free(wdiUapsdParams);
6908 return VOS_STATUS_E_NOMEM;
6909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006910 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6911 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6912 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6913 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6914 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6915 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006918 pWdaParams->pWdaContext = pWDA;
6919 /* Store param pointer as passed in by caller */
6920 pWdaParams->wdaMsgParam = pUapsdInfo;
6921 /* store Params pass it to WDI */
6922 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6924 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6925 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006926 if(IS_WDI_STATUS_FAILURE(status))
6927 {
6928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6929 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6930 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6931 vos_mem_free(pWdaParams);
6932 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006933 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6934 return VOS_STATUS_SUCCESS;
6935 else
6936 return VOS_STATUS_E_FAILURE;
6937
Jeff Johnson295189b2012-06-20 16:38:30 -07006938}
6939/*
6940 * FUNCTION: WDA_ClearUapsdAcParamsReq
6941 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6942 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6943 * and again enter the UPASD with the modified params. Hence the disable
6944 * function was kept empty.
6945 *
6946 */
6947VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6948{
6949 /* do nothing */
6950 return VOS_STATUS_SUCCESS;
6951}
Jeff Johnson295189b2012-06-20 16:38:30 -07006952/*
6953 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6954 *
6955 */
6956void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6957{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006958 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6959
Jeff Johnson295189b2012-06-20 16:38:30 -07006960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006961 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006962
6963 if(NULL == pWdaParams)
6964 {
6965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006966 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006967 VOS_ASSERT(0) ;
6968 return ;
6969 }
6970
6971 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6972 vos_mem_free(pWdaParams->wdaMsgParam);
6973 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006974
Jeff Johnson295189b2012-06-20 16:38:30 -07006975 //print a msg, nothing else to do
6976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6977 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006978 return ;
6979}
Jeff Johnson295189b2012-06-20 16:38:30 -07006980/*
6981 * FUNCTION: WDA_UpdateUapsdParamsReq
6982 * Request to WDI to update UAPSD params (in softAP mode) for a station.
6983 */
6984VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
6985 tUpdateUapsdParams* pUpdateUapsdInfo)
6986{
6987 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07006988 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006989 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
6990 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
6991 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006992 tWDA_ReqParams *pWdaParams = NULL;
6993
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006995 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 if(NULL == wdiUpdateUapsdParams)
6997 {
6998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 VOS_ASSERT(0);
7001 return VOS_STATUS_E_NOMEM;
7002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007003 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7004 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7005 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007006
7007 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7008 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007009 {
7010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007011 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007013 vos_mem_free(pUpdateUapsdInfo);
7014 vos_mem_free(wdiUpdateUapsdParams);
7015 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007016 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007018 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007019 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007020 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7021 pWdaParams->pWdaContext = pWDA;
7022
Jeff Johnson43971f52012-07-17 12:26:56 -07007023 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007024 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7025 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007026
Jeff Johnson43971f52012-07-17 12:26:56 -07007027 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007028 {
7029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7030 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007031 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7032 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7033 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007034 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007036 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007037}
Jeff Johnson295189b2012-06-20 16:38:30 -07007038/*
7039 * FUNCTION: WDA_ConfigureRxpFilterCallback
7040 *
7041 */
7042void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7043{
7044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007046 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007047 if(WDI_STATUS_SUCCESS != wdiStatus)
7048 {
7049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007050 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007051 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007052 if(NULL == pWdaParams)
7053 {
7054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 VOS_ASSERT(0) ;
7057 return ;
7058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7060 vos_mem_free(pWdaParams->wdaMsgParam);
7061 vos_mem_free(pWdaParams);
7062 return ;
7063}
Jeff Johnson295189b2012-06-20 16:38:30 -07007064/*
7065 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7066 *
7067 */
7068VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7069 tSirWlanSetRxpFilters *pWlanSuspendParam)
7070{
Jeff Johnson295189b2012-06-20 16:38:30 -07007071 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007072 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7074 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7075 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7076 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007078 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 if(NULL == wdiRxpFilterParams)
7080 {
7081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007083 VOS_ASSERT(0);
7084 vos_mem_free(pWlanSuspendParam);
7085 return VOS_STATUS_E_NOMEM;
7086 }
7087 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7088 if(NULL == pWdaParams)
7089 {
7090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007091 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 VOS_ASSERT(0);
7093 vos_mem_free(wdiRxpFilterParams);
7094 vos_mem_free(pWlanSuspendParam);
7095 return VOS_STATUS_E_NOMEM;
7096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7098 pWlanSuspendParam->setMcstBcstFilter;
7099 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7100 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7101
7102 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007103 pWdaParams->pWdaContext = pWDA;
7104 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7105 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007106 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007107 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7108 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007109 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007110 {
7111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7112 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007113 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7115 vos_mem_free(pWdaParams->wdaMsgParam);
7116 vos_mem_free(pWdaParams);
7117 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007118 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007119}
Jeff Johnson295189b2012-06-20 16:38:30 -07007120/*
7121 * FUNCTION: WDA_WdiIndicationCallback
7122 *
7123 */
7124void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7125 void* pUserData)
7126{
7127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007128 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007129}
Jeff Johnson295189b2012-06-20 16:38:30 -07007130/*
7131 * FUNCTION: WDA_ProcessWlanSuspendInd
7132 *
7133 */
7134VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7135 tSirWlanSuspendParam *pWlanSuspendParam)
7136{
7137 WDI_Status wdiStatus;
7138 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007140 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007141 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7142 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7143 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7144 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7147 if(WDI_STATUS_PENDING == wdiStatus)
7148 {
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 }
7152 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7153 {
7154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007155 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007157 vos_mem_free(pWlanSuspendParam);
7158 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7159}
7160
Jeff Johnson295189b2012-06-20 16:38:30 -07007161/*
7162 * FUNCTION: WDA_ProcessWlanResumeCallback
7163 *
7164 */
7165void WDA_ProcessWlanResumeCallback(
7166 WDI_SuspendResumeRspParamsType *resumeRspParams,
7167 void* pUserData)
7168{
7169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 if(NULL == pWdaParams)
7173 {
7174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007175 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 VOS_ASSERT(0) ;
7177 return ;
7178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7180 {
7181 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007182 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7185 vos_mem_free(pWdaParams->wdaMsgParam);
7186 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007187 return ;
7188}
Jeff Johnson295189b2012-06-20 16:38:30 -07007189/*
7190 * FUNCTION: WDA_ProcessWlanResumeReq
7191 *
7192 */
7193VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7194 tSirWlanResumeParam *pWlanResumeParam)
7195{
7196 WDI_Status wdiStatus;
7197 WDI_ResumeParamsType *wdiResumeParams =
7198 (WDI_ResumeParamsType *)vos_mem_malloc(
7199 sizeof(WDI_ResumeParamsType) ) ;
7200 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007202 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007203 if(NULL == wdiResumeParams)
7204 {
7205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007206 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007207 VOS_ASSERT(0);
7208 return VOS_STATUS_E_NOMEM;
7209 }
7210 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7211 if(NULL == pWdaParams)
7212 {
7213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007214 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007215 VOS_ASSERT(0);
7216 vos_mem_free(wdiResumeParams);
7217 return VOS_STATUS_E_NOMEM;
7218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7220 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 wdiResumeParams->wdiReqStatusCB = NULL;
7223 pWdaParams->wdaMsgParam = pWlanResumeParam;
7224 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7225 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007226 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7227 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7228 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7230 {
7231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7232 "Failure in Host Resume REQ WDI API, free all the memory " );
7233 VOS_ASSERT(0);
7234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7235 vos_mem_free(pWdaParams->wdaMsgParam);
7236 vos_mem_free(pWdaParams);
7237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7239}
7240
Jeff Johnson295189b2012-06-20 16:38:30 -07007241/*
7242 * FUNCTION: WDA_SetBeaconFilterReqCallback
7243 *
7244 */
7245void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7246{
7247 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007249 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 if(NULL == pWdaParams)
7251 {
7252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007253 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007254 VOS_ASSERT(0) ;
7255 return ;
7256 }
7257
7258 vos_mem_free(pWdaParams->wdaMsgParam) ;
7259 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7260 vos_mem_free(pWdaParams) ;
7261 /*
7262 * No respone required for SetBeaconFilter req so just free the request
7263 * param here
7264 */
7265
Jeff Johnson295189b2012-06-20 16:38:30 -07007266 return ;
7267}
Jeff Johnson295189b2012-06-20 16:38:30 -07007268/*
7269 * FUNCTION: WDA_SetBeaconFilterReq
7270 * Request to WDI to send the beacon filtering related information.
7271 */
7272VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7273 tBeaconFilterMsg* pBeaconFilterInfo)
7274{
7275 WDI_Status status = WDI_STATUS_SUCCESS;
7276 tANI_U8 *dstPtr, *srcPtr;
7277 tANI_U8 filterLength;
7278 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7279 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7280 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7281 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007283 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007284 if(NULL == wdiBeaconFilterInfo)
7285 {
7286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007287 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 VOS_ASSERT(0);
7289 return VOS_STATUS_E_NOMEM;
7290 }
7291 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7292 if(NULL == pWdaParams)
7293 {
7294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007295 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007296 VOS_ASSERT(0);
7297 vos_mem_free(wdiBeaconFilterInfo);
7298 return VOS_STATUS_E_NOMEM;
7299 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007300 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7301 pBeaconFilterInfo->beaconInterval;
7302 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7303 pBeaconFilterInfo->capabilityInfo;
7304 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7305 pBeaconFilterInfo->capabilityMask;
7306 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007307
7308 //Fill the BssIdx
7309 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7310
Jeff Johnson295189b2012-06-20 16:38:30 -07007311 //Fill structure with info contained in the beaconFilterTable
7312 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7313 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7314 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7315 if(WDI_BEACON_FILTER_LEN < filterLength)
7316 {
7317 filterLength = WDI_BEACON_FILTER_LEN;
7318 }
7319 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007320 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7321 /* Store param pointer as passed in by caller */
7322 /* store Params pass it to WDI */
7323 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7324 pWdaParams->pWdaContext = pWDA;
7325 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7326
Jeff Johnson295189b2012-06-20 16:38:30 -07007327 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7328 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007329 if(IS_WDI_STATUS_FAILURE(status))
7330 {
7331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7332 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7333 vos_mem_free(pWdaParams->wdaMsgParam) ;
7334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7335 vos_mem_free(pWdaParams) ;
7336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007337 return CONVERT_WDI2VOS_STATUS(status) ;
7338}
Jeff Johnson295189b2012-06-20 16:38:30 -07007339/*
7340 * FUNCTION: WDA_RemBeaconFilterReqCallback
7341 *
7342 */
7343void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7344{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007345 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7346
Jeff Johnson295189b2012-06-20 16:38:30 -07007347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007348 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007349
7350 if(NULL == pWdaParams)
7351 {
7352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007353 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007354 VOS_ASSERT(0) ;
7355 return ;
7356 }
7357
7358 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7359 vos_mem_free(pWdaParams->wdaMsgParam);
7360 vos_mem_free(pWdaParams);
7361
Jeff Johnson295189b2012-06-20 16:38:30 -07007362 //print a msg, nothing else to do
7363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7364 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007365 return ;
7366}
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 // TODO: PE does not have this feature for now implemented,
7368 // but the support for removing beacon filter exists between
7369 // HAL and FW. This function can be called whenever PE defines
7370 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007371/*
7372 * FUNCTION: WDA_RemBeaconFilterReq
7373 * Request to WDI to send the removal of beacon filtering related information.
7374 */
7375VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7376 tRemBeaconFilterMsg* pBeaconFilterInfo)
7377{
7378 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007379 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7381 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7382 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007383 tWDA_ReqParams *pWdaParams ;
7384
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007386 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 if(NULL == wdiBeaconFilterInfo)
7388 {
7389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007390 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007391 VOS_ASSERT(0);
7392 return VOS_STATUS_E_NOMEM;
7393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7395 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 //Fill structure with info contained in the ucRemIeId
7397 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7398 pBeaconFilterInfo->ucRemIeId,
7399 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7400 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007401
7402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7403 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007404 {
7405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007408 vos_mem_free(wdiBeaconFilterInfo);
7409 vos_mem_free(pBeaconFilterInfo);
7410 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007411 }
7412
7413 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007414 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007416 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7417
7418 pWdaParams->pWdaContext = pWDA;
7419
Jeff Johnson43971f52012-07-17 12:26:56 -07007420 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007421 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007422 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7425 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007426 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7428 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007429 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007430 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007431 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007432}
Jeff Johnson295189b2012-06-20 16:38:30 -07007433/*
7434 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7435 *
7436 */
7437void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7438{
7439 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007441 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007442 if(NULL == pWdaParams)
7443 {
7444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007445 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 VOS_ASSERT(0) ;
7447 return ;
7448 }
7449
7450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7451 vos_mem_free(pWdaParams) ;
7452
Jeff Johnson295189b2012-06-20 16:38:30 -07007453 return ;
7454}
Jeff Johnson295189b2012-06-20 16:38:30 -07007455/*
7456 * FUNCTION: WDA_SetRSSIThresholdsReq
7457 * Request to WDI to set the RSSI thresholds (sta mode).
7458 */
7459VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7460{
7461 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007462 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 tWDA_CbContext *pWDA = NULL ;
7464 v_PVOID_t pVosContext = NULL;
7465 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7466 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7467 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7468 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007471 if(NULL == wdiRSSIThresholdsInfo)
7472 {
7473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007474 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 VOS_ASSERT(0);
7476 return VOS_STATUS_E_NOMEM;
7477 }
7478 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7479 if(NULL == pWdaParams)
7480 {
7481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007483 VOS_ASSERT(0);
7484 vos_mem_free(wdiRSSIThresholdsInfo);
7485 return VOS_STATUS_E_NOMEM;
7486 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007487 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7489 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7490 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7492 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7493 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007494 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7495 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7496 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007498 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7499 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7500
Jeff Johnson295189b2012-06-20 16:38:30 -07007501 /* Store param pointer as passed in by caller */
7502 /* store Params pass it to WDI */
7503 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7504 pWdaParams->pWdaContext = pWDA;
7505 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007506 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007507 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007508 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 {
7510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7511 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007512 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7514 vos_mem_free(pWdaParams) ;
7515 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007516 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007517
7518}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007519/*
7520 * FUNCTION: WDA_HostOffloadReqCallback
7521 *
7522 */
7523void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7524{
7525 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7526
7527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007528 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 if(NULL == pWdaParams)
7530 {
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007532 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 VOS_ASSERT(0) ;
7534 return ;
7535 }
7536
7537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7538 vos_mem_free(pWdaParams->wdaMsgParam);
7539 vos_mem_free(pWdaParams) ;
7540
7541 //print a msg, nothing else to do
7542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7543 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007544 return ;
7545}
Jeff Johnson295189b2012-06-20 16:38:30 -07007546/*
7547 * FUNCTION: WDA_ProcessHostOffloadReq
7548 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7549 * to broadcast traffic (sta mode).
7550 */
7551VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7552 tSirHostOffloadReq *pHostOffloadParams)
7553{
7554 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007555 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007556 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7557 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7558 sizeof(WDI_HostOffloadReqParamsType)) ;
7559 tWDA_ReqParams *pWdaParams ;
7560
7561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007562 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007563
7564 if(NULL == wdiHostOffloadInfo)
7565 {
7566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007567 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007568 VOS_ASSERT(0);
7569 return VOS_STATUS_E_NOMEM;
7570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7572 if(NULL == pWdaParams)
7573 {
7574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 VOS_ASSERT(0);
7577 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007578 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007579 return VOS_STATUS_E_NOMEM;
7580 }
7581
7582 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7583 pHostOffloadParams->offloadType;
7584 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7585 pHostOffloadParams->enableOrDisable;
7586
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007587 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7588 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7589
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7591 {
7592 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7593 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7594 pHostOffloadParams->params.hostIpv4Addr,
7595 4);
7596 break;
7597 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7598 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7599 pHostOffloadParams->params.hostIpv6Addr,
7600 16);
7601 break;
7602 case SIR_IPV6_NS_OFFLOAD:
7603 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7604 pHostOffloadParams->params.hostIpv6Addr,
7605 16);
7606
7607#ifdef WLAN_NS_OFFLOAD
7608 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7609 {
7610 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7611 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7612 16);
7613 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7614 }
7615 else
7616 {
7617 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7618 }
7619
7620 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7621 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7622 16);
7623 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7624 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7625 6);
7626
7627 //Only two are supported so let's go through them without a loop
7628 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7629 {
7630 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7631 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7632 16);
7633 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7634 }
7635 else
7636 {
7637 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7638 }
7639
7640 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7641 {
7642 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7643 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7644 16);
7645 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7646 }
7647 else
7648 {
7649 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7650 }
7651 break;
7652#endif //WLAN_NS_OFFLOAD
7653 default:
7654 {
7655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7656 "No Handling for Offload Type %x in WDA "
7657 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7658 //WDA_VOS_ASSERT(0) ;
7659 }
7660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007662
Jeff Johnson295189b2012-06-20 16:38:30 -07007663 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007664 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007665 /* store Params pass it to WDI */
7666 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7667 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007668
Jeff Johnson295189b2012-06-20 16:38:30 -07007669
Jeff Johnson43971f52012-07-17 12:26:56 -07007670 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7672
Jeff Johnson43971f52012-07-17 12:26:56 -07007673 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7676 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007677 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7679 vos_mem_free(pWdaParams->wdaMsgParam);
7680 vos_mem_free(pWdaParams) ;
7681 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007682 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007683
7684}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007685/*
7686 * FUNCTION: WDA_KeepAliveReqCallback
7687 *
7688 */
7689void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7690{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007691 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7692
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007695
7696 if(NULL == pWdaParams)
7697 {
7698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007700 VOS_ASSERT(0) ;
7701 return ;
7702 }
7703
7704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7705 vos_mem_free(pWdaParams->wdaMsgParam);
7706 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007707
Jeff Johnson295189b2012-06-20 16:38:30 -07007708 //print a msg, nothing else to do
7709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7710 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 return ;
7712}
Jeff Johnson295189b2012-06-20 16:38:30 -07007713/*
7714 * FUNCTION: WDA_ProcessKeepAliveReq
7715 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7716 * wakeup due to broadcast traffic (sta mode).
7717 */
7718VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7719 tSirKeepAliveReq *pKeepAliveParams)
7720{
7721 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007722 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7724 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7725 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007726 tWDA_ReqParams *pWdaParams;
7727
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007729 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 if(NULL == wdiKeepAliveInfo)
7731 {
7732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007733 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007734 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007735 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007736 return VOS_STATUS_E_NOMEM;
7737 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007738
7739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7740 if(NULL == pWdaParams)
7741 {
7742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007743 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007744 VOS_ASSERT(0);
7745 vos_mem_free(wdiKeepAliveInfo);
7746 vos_mem_free(pKeepAliveParams);
7747 return VOS_STATUS_E_NOMEM;
7748 }
7749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7751 pKeepAliveParams->packetType;
7752 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7753 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007754
7755 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7756 pKeepAliveParams->bssId,
7757 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007758
7759 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7760 {
7761 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7762 pKeepAliveParams->hostIpv4Addr,
7763 SIR_IPV4_ADDR_LEN);
7764 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7765 pKeepAliveParams->destIpv4Addr,
7766 SIR_IPV4_ADDR_LEN);
7767 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7768 pKeepAliveParams->destMacAddr,
7769 SIR_MAC_ADDR_LEN);
7770 }
7771 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7772 {
7773 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7774 SIR_IPV4_ADDR_LEN,
7775 0);
7776 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7777 SIR_IPV4_ADDR_LEN,
7778 0);
7779 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7780 SIR_MAC_ADDR_LEN,
7781 0);
7782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007783 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007784
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007786 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007787 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007788 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7789 pWdaParams->pWdaContext = pWDA;
7790
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7792 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7793 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7794 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7795 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7797 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7798 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7799 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7800 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7802 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7803 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7804 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7805 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7806 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7807 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7808 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7810 "TimePeriod %d PacketType %d",
7811 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7812 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007813 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007814 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7815
Jeff Johnson43971f52012-07-17 12:26:56 -07007816 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 {
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7819 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007820 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7822 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007823 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007824 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007825 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007826
7827}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007828/*
7829 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7830 *
7831 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007832void WDA_WowlAddBcPtrnReqCallback(
7833 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7834 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007835{
7836 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007838 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 if(NULL == pWdaParams)
7840 {
7841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007842 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007843 VOS_ASSERT(0) ;
7844 return ;
7845 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7847 vos_mem_free(pWdaParams->wdaMsgParam);
7848 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007849 return ;
7850}
Jeff Johnson295189b2012-06-20 16:38:30 -07007851/*
7852 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7853 * Request to WDI to add WOWL Bcast pattern
7854 */
7855VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7856 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7857{
7858 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007859 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7861 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7862 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7863 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007865 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007866 if(NULL == wdiWowlAddBcPtrnInfo)
7867 {
7868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007869 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 VOS_ASSERT(0);
7871 return VOS_STATUS_E_NOMEM;
7872 }
7873 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7874 if(NULL == pWdaParams)
7875 {
7876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007877 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007878 VOS_ASSERT(0);
7879 vos_mem_free(wdiWowlAddBcPtrnInfo);
7880 return VOS_STATUS_E_NOMEM;
7881 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7883 pWowlAddBcPtrnParams->ucPatternId;
7884 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7885 pWowlAddBcPtrnParams->ucPatternByteOffset;
7886 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7887 pWowlAddBcPtrnParams->ucPatternMaskSize;
7888 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7889 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007890 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7891 {
7892 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7893 pWowlAddBcPtrnParams->ucPattern,
7894 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7895 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7896 pWowlAddBcPtrnParams->ucPatternMask,
7897 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7898 }
7899 else
7900 {
7901 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7902 pWowlAddBcPtrnParams->ucPattern,
7903 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7904 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7905 pWowlAddBcPtrnParams->ucPatternMask,
7906 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7907
7908 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7909 pWowlAddBcPtrnParams->ucPatternExt,
7910 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7911 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7912 pWowlAddBcPtrnParams->ucPatternMaskExt,
7913 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7914 }
7915
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007916 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7917 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7918
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 /* Store param pointer as passed in by caller */
7921 /* store Params pass it to WDI */
7922 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7923 pWdaParams->pWdaContext = pWDA;
7924 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007925 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007927 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007928 {
7929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7930 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007931 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007932 vos_mem_free(pWdaParams->wdaMsgParam) ;
7933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7934 vos_mem_free(pWdaParams) ;
7935 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007936 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007937
7938}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007939/*
7940 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7941 *
7942 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007943void WDA_WowlDelBcPtrnReqCallback(
7944 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7945 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007946{
7947 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 if(NULL == pWdaParams)
7951 {
7952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007953 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 VOS_ASSERT(0) ;
7955 return ;
7956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7958 vos_mem_free(pWdaParams->wdaMsgParam);
7959 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007960 return ;
7961}
Jeff Johnson295189b2012-06-20 16:38:30 -07007962/*
7963 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7964 * Request to WDI to delete WOWL Bcast pattern
7965 */
7966VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7967 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7968{
7969 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007970 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7972 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7973 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7974 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007976 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007977 if(NULL == wdiWowlDelBcPtrnInfo)
7978 {
7979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007980 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 VOS_ASSERT(0);
7982 return VOS_STATUS_E_NOMEM;
7983 }
7984 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7985 if(NULL == pWdaParams)
7986 {
7987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007988 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007989 VOS_ASSERT(0);
7990 vos_mem_free(wdiWowlDelBcPtrnInfo);
7991 return VOS_STATUS_E_NOMEM;
7992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
7994 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007995
7996 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
7997 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
7998
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008000 /* Store param pointer as passed in by caller */
8001 /* store Params pass it to WDI */
8002 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8003 pWdaParams->pWdaContext = pWDA;
8004 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008005 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008006 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008007 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8010 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008011 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 vos_mem_free(pWdaParams->wdaMsgParam) ;
8013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8014 vos_mem_free(pWdaParams) ;
8015 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008016 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008017
8018}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008019/*
8020 * FUNCTION: WDA_WowlEnterReqCallback
8021 *
8022 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008023void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008024{
8025 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8026 tWDA_CbContext *pWDA;
8027 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 if(NULL == pWdaParams)
8031 {
8032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008033 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 VOS_ASSERT(0) ;
8035 return ;
8036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8038 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8039
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008040 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8041
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8043 vos_mem_free(pWdaParams) ;
8044
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008045 pWowlEnterParams->status =
8046 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008048 return ;
8049}
Jeff Johnson295189b2012-06-20 16:38:30 -07008050/*
8051 * FUNCTION: WDA_ProcessWowlEnterReq
8052 * Request to WDI to enter WOWL
8053 */
8054VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8055 tSirHalWowlEnterParams *pWowlEnterParams)
8056{
8057 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008058 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8060 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8061 sizeof(WDI_WowlEnterReqParamsType)) ;
8062 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 if(NULL == wdiWowlEnterInfo)
8066 {
8067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008068 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 VOS_ASSERT(0);
8070 return VOS_STATUS_E_NOMEM;
8071 }
8072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8073 if(NULL == pWdaParams)
8074 {
8075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 VOS_ASSERT(0);
8078 vos_mem_free(wdiWowlEnterInfo);
8079 return VOS_STATUS_E_NOMEM;
8080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8082 pWowlEnterParams->magicPtrn,
8083 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8085 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8087 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008088 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8089 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8091 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008092 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8093 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008094 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8095 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008096 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8097 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8099 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008100#ifdef WLAN_WAKEUP_EVENTS
8101 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8102 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8103
8104 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8105 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8106
8107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8108 pWowlEnterParams->ucWowNetScanOffloadMatch;
8109
8110 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8111 pWowlEnterParams->ucWowGTKRekeyError;
8112
8113 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8114 pWowlEnterParams->ucWoWBSSConnLoss;
8115#endif // WLAN_WAKEUP_EVENTS
8116
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008117 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8118 pWowlEnterParams->bssIdx;
8119
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008121 /* Store param pointer as passed in by caller */
8122 /* store Params pass it to WDI */
8123 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8124 pWdaParams->pWdaContext = pWDA;
8125 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008126 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008127 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008128 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008129 {
8130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8131 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008132 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008133 vos_mem_free(pWdaParams->wdaMsgParam) ;
8134 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8135 vos_mem_free(pWdaParams) ;
8136 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008137 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008138
8139}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008140/*
8141 * FUNCTION: WDA_WowlExitReqCallback
8142 *
8143 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008144void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008145{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8147 tWDA_CbContext *pWDA;
8148 tSirHalWowlExitParams *pWowlExitParams;
8149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008150 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008151 if(NULL == pWdaParams)
8152 {
8153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008154 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008155 VOS_ASSERT(0) ;
8156 return ;
8157 }
8158 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8159 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8160
8161 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8162 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8163
8164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8165 vos_mem_free(pWdaParams) ;
8166
Jeff Johnson295189b2012-06-20 16:38:30 -07008167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008168 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008169 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008170 return ;
8171}
Jeff Johnson295189b2012-06-20 16:38:30 -07008172/*
8173 * FUNCTION: WDA_ProcessWowlExitReq
8174 * Request to WDI to add WOWL Bcast pattern
8175 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8177 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008178{
8179 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008180 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008181 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8182 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8183 sizeof(WDI_WowlExitReqParamsType)) ;
8184 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008186 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008187 if(NULL == wdiWowlExitInfo)
8188 {
8189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008190 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008191 VOS_ASSERT(0);
8192 return VOS_STATUS_E_NOMEM;
8193 }
8194 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8195 if(NULL == pWdaParams)
8196 {
8197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008198 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008199 VOS_ASSERT(0);
8200 vos_mem_free(wdiWowlExitInfo);
8201 return VOS_STATUS_E_NOMEM;
8202 }
8203
8204 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8205 pWowlExitParams->bssIdx;
8206
8207 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8208
8209 /* Store param pointer as passed in by caller */
8210 /* store Params pass it to WDI */
8211 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8212 pWdaParams->pWdaContext = pWDA;
8213 pWdaParams->wdaMsgParam = pWowlExitParams;
8214
8215 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8216 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008217
Jeff Johnson43971f52012-07-17 12:26:56 -07008218 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008219 {
8220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8221 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008222 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8224 vos_mem_free(pWdaParams->wdaMsgParam);
8225 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008226 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008227 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008228}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008229/*
8230 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8231 * Request to WDI to determine whether a given station is capable of
8232 * using HW-based frame translation
8233 */
8234v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8235 tANI_U8 staIdx)
8236{
8237 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8238}
Jeff Johnson295189b2012-06-20 16:38:30 -07008239/*
8240 * FUNCTION: WDA_NvDownloadReqCallback
8241 * send NV Download RSP back to PE
8242 */
8243void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8244 void* pUserData)
8245{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008246
8247 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8248 tWDA_CbContext *pWDA;
8249
Jeff Johnson295189b2012-06-20 16:38:30 -07008250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008251 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008252
8253 if(NULL == pWdaParams)
8254 {
8255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008256 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008257 VOS_ASSERT(0) ;
8258 return ;
8259 }
8260
8261 pWDA = pWdaParams->pWdaContext;
8262
Jeff Johnson295189b2012-06-20 16:38:30 -07008263 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8265 vos_mem_free(pWdaParams);
8266
Jeff Johnson295189b2012-06-20 16:38:30 -07008267 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 return ;
8269}
Jeff Johnson295189b2012-06-20 16:38:30 -07008270/*
8271 * FUNCTION: WDA_ProcessNvDownloadReq
8272 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8273 */
8274VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8275{
8276 /* Initialize the local Variables*/
8277 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8278 v_VOID_t *pNvBuffer=NULL;
8279 v_SIZE_t bufferSize = 0;
8280 WDI_Status status = WDI_STATUS_E_FAILURE;
8281 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008282 tWDA_ReqParams *pWdaParams ;
8283
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008285 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 if(NULL == pWDA)
8287 {
8288 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008289 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008290 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 return VOS_STATUS_E_FAILURE;
8292 }
8293
8294 /* Get the NV structure base address and size from VOS */
8295 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008296 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8297 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008298 if(NULL == wdiNvDownloadReqParam)
8299 {
8300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008301 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008302 VOS_ASSERT(0);
8303 return VOS_STATUS_E_NOMEM;
8304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 /* Copy Params to wdiNvDownloadReqParam*/
8306 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8307 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008308
8309 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8310 if(NULL == pWdaParams)
8311 {
8312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008313 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008314 VOS_ASSERT(0);
8315 vos_mem_free(wdiNvDownloadReqParam);
8316 return VOS_STATUS_E_NOMEM;
8317 }
8318
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008320 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8321 pWdaParams->wdaMsgParam = NULL;
8322 pWdaParams->pWdaContext = pWDA;
8323
8324
Jeff Johnson295189b2012-06-20 16:38:30 -07008325 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008326
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008328 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 if(IS_WDI_STATUS_FAILURE(status))
8331 {
8332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8333 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8335 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008337 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008338}
8339/*
8340 * FUNCTION: WDA_FlushAcReqCallback
8341 * send Flush AC RSP back to TL
8342 */
8343void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8344{
8345 vos_msg_t wdaMsg = {0} ;
8346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8347 tFlushACReq *pFlushACReqParams;
8348 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008350 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 if(NULL == pWdaParams)
8352 {
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008354 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008355 VOS_ASSERT(0) ;
8356 return ;
8357 }
8358
8359 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8360 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8361 if(NULL == pFlushACRspParams)
8362 {
8363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008365 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008366 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008367 return ;
8368 }
8369 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8370 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8371 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8372 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8373 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8374 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008375 vos_mem_free(pWdaParams->wdaMsgParam) ;
8376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8377 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8379 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8380 // POST message to TL
8381 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8382
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 return ;
8384}
Jeff Johnson295189b2012-06-20 16:38:30 -07008385/*
8386 * FUNCTION: WDA_ProcessFlushAcReq
8387 * Request to WDI to Update the DELBA REQ params.
8388 */
8389VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8390 tFlushACReq *pFlushAcReqParams)
8391{
8392 WDI_Status status = WDI_STATUS_SUCCESS ;
8393 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8394 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8395 sizeof(WDI_FlushAcReqParamsType)) ;
8396 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 if(NULL == wdiFlushAcReqParam)
8398 {
8399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008400 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008401 VOS_ASSERT(0);
8402 return VOS_STATUS_E_NOMEM;
8403 }
8404 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8405 if(NULL == pWdaParams)
8406 {
8407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008409 VOS_ASSERT(0);
8410 vos_mem_free(wdiFlushAcReqParam);
8411 return VOS_STATUS_E_NOMEM;
8412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008414 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008415 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8416 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8417 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8418 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 /* Store Flush AC pointer, as this will be used for response */
8420 /* store Params pass it to WDI */
8421 pWdaParams->pWdaContext = pWDA;
8422 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8423 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8425 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008426 if(IS_WDI_STATUS_FAILURE(status))
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8429 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8430 vos_mem_free(pWdaParams->wdaMsgParam) ;
8431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8432 vos_mem_free(pWdaParams) ;
8433 //TODO: respond to TL with failure
8434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008436}
Jeff Johnson295189b2012-06-20 16:38:30 -07008437/*
8438 * FUNCTION: WDA_BtAmpEventReqCallback
8439 *
8440 */
8441void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8442{
8443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8444 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008445 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008446
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008448 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008449 if(NULL == pWdaParams)
8450 {
8451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008452 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 VOS_ASSERT(0) ;
8454 return ;
8455 }
8456 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8457 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8458 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8459 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8460 {
8461 pWDA->wdaAmpSessionOn = VOS_FALSE;
8462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 vos_mem_free(pWdaParams->wdaMsgParam) ;
8464 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8465 vos_mem_free(pWdaParams) ;
8466 /*
8467 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8468 * param here
8469 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 return ;
8471}
8472
Jeff Johnson295189b2012-06-20 16:38:30 -07008473/*
8474 * FUNCTION: WDA_ProcessBtAmpEventReq
8475 * Request to WDI to Update with BT AMP events.
8476 */
8477VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8478 tSmeBtAmpEvent *pBtAmpEventParams)
8479{
8480 WDI_Status status = WDI_STATUS_SUCCESS ;
8481 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8482 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8483 sizeof(WDI_BtAmpEventParamsType)) ;
8484 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008486 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008487 if(NULL == wdiBtAmpEventParam)
8488 {
8489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 VOS_ASSERT(0);
8492 return VOS_STATUS_E_NOMEM;
8493 }
8494 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8495 if(NULL == pWdaParams)
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008498 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008499 VOS_ASSERT(0);
8500 vos_mem_free(wdiBtAmpEventParam);
8501 return VOS_STATUS_E_NOMEM;
8502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008503 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8504 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 /* Store BT AMP event pointer, as this will be used for response */
8507 /* store Params pass it to WDI */
8508 pWdaParams->pWdaContext = pWDA;
8509 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8510 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8512 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 if(IS_WDI_STATUS_FAILURE(status))
8514 {
8515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8516 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8517 vos_mem_free(pWdaParams->wdaMsgParam) ;
8518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8519 vos_mem_free(pWdaParams) ;
8520 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8522 {
8523 pWDA->wdaAmpSessionOn = VOS_TRUE;
8524 }
8525 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008526}
8527
Jeff Johnson295189b2012-06-20 16:38:30 -07008528#ifdef ANI_MANF_DIAG
8529/*
8530 * FUNCTION: WDA_FTMCommandReqCallback
8531 * Handle FTM CMD response came from HAL
8532 * Route responce to HDD FTM
8533 */
8534void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8535 void *usrData)
8536{
8537 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008538 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8539 {
8540 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008541 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008542 return;
8543 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 /* Release Current FTM Command Request */
8545 vos_mem_free(pWDA->wdaFTMCmdReq);
8546 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008547#ifndef WLAN_FTM_STUB
8548 /* Post FTM Responce to HDD FTM */
8549 wlan_sys_ftm(ftmCmdRspData);
8550#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008551 return;
8552}
Jeff Johnson295189b2012-06-20 16:38:30 -07008553/*
8554 * FUNCTION: WDA_ProcessFTMCommand
8555 * Send FTM command to WDI
8556 */
8557VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8558 tPttMsgbuffer *pPTTFtmCmd)
8559{
8560 WDI_Status status = WDI_STATUS_SUCCESS;
8561 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008562 ftmCMDReq = (WDI_FTMCommandReqType *)
8563 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8564 if(NULL == ftmCMDReq)
8565 {
8566 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "WDA FTM Command buffer alloc fail");
8568 return VOS_STATUS_E_NOMEM;
8569 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008570 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8571 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 /* Send command to WDI */
8574 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 return status;
8576}
8577#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008578#ifdef FEATURE_OEM_DATA_SUPPORT
8579/*
8580 * FUNCTION: WDA_StartOemDataReqCallback
8581 *
8582 */
8583void WDA_StartOemDataReqCallback(
8584 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8585 void* pUserData)
8586{
8587 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008588 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8589 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008590 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008591
Jeff Johnsone7245742012-09-05 17:12:55 -07008592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008593 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008594
8595 if(NULL == pWdaParams)
8596 {
8597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008598 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008599 VOS_ASSERT(0) ;
8600 return ;
8601 }
8602 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8603
Jeff Johnsone7245742012-09-05 17:12:55 -07008604 if(NULL == pWDA)
8605 {
8606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008607 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008608 VOS_ASSERT(0);
8609 return ;
8610 }
8611
8612 /*
8613 * Allocate memory for response params sent to PE
8614 */
8615 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8616
8617 // Check if memory is allocated for OemdataMeasRsp Params.
8618 if(NULL == pOemDataRspParams)
8619 {
8620 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8621 "OEM DATA WDA callback alloc fail");
8622 VOS_ASSERT(0) ;
8623 return;
8624 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008625
Jeff Johnsone7245742012-09-05 17:12:55 -07008626 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008627 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8628 vos_mem_free(pWdaParams->wdaMsgParam);
8629 vos_mem_free(pWdaParams) ;
8630
Jeff Johnsone7245742012-09-05 17:12:55 -07008631 /*
8632 * Now go ahead and copy other stuff for PE in incase of sucess only
8633 * Also, here success always means that we have atleast one BSSID.
8634 */
8635 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8636
8637 //enable Tx
8638 status = WDA_ResumeDataTx(pWDA);
8639 if(status != VOS_STATUS_SUCCESS)
8640 {
8641 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8642 }
8643 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8644 return ;
8645}
8646/*
8647 * FUNCTION: WDA_ProcessStartOemDataReq
8648 * Send Start Oem Data Req to WDI
8649 */
8650VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8651 tStartOemDataReq *pOemDataReqParams)
8652{
8653 WDI_Status status = WDI_STATUS_SUCCESS;
8654 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008655 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008656
8657 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8658
8659 if(NULL == wdiOemDataReqParams)
8660 {
8661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008663 VOS_ASSERT(0);
8664 return VOS_STATUS_E_NOMEM;
8665 }
8666
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008667 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8668 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8669 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8670 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008671
8672 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8673
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008674 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8675 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008676 {
8677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008678 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008679 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008680 vos_mem_free(pOemDataReqParams);
8681 VOS_ASSERT(0);
8682 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008683 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008684
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8686 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8687
8688 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8689 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008690
8691 if(IS_WDI_STATUS_FAILURE(status))
8692 {
8693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8694 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8696 vos_mem_free(pWdaParams->wdaMsgParam);
8697 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008698 }
8699 return CONVERT_WDI2VOS_STATUS(status) ;
8700}
8701#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008702/*
8703 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8704 *
8705 */
8706void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8707{
8708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008710 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008711 if(NULL == pWdaParams)
8712 {
8713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008714 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008715 VOS_ASSERT(0) ;
8716 return ;
8717 }
8718
8719 if(NULL != pWdaParams->wdaMsgParam)
8720 {
8721 vos_mem_free(pWdaParams->wdaMsgParam);
8722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008723 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8724 {
8725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8726 }
8727
8728 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008729 return ;
8730}
Jeff Johnson295189b2012-06-20 16:38:30 -07008731#ifdef WLAN_FEATURE_GTK_OFFLOAD
8732/*
8733 * FUNCTION: WDA_HostOffloadReqCallback
8734 *
8735 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008736void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8737 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008738{
8739 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8740
8741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008742 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008743
8744 VOS_ASSERT(NULL != pWdaParams);
8745
8746 vos_mem_free(pWdaParams->wdaMsgParam) ;
8747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8748 vos_mem_free(pWdaParams) ;
8749
8750 //print a msg, nothing else to do
8751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8752 "WDA_GTKOffloadReqCallback invoked " );
8753
8754 return ;
8755}
8756
8757/*
8758 * FUNCTION: WDA_ProcessGTKOffloadReq
8759 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8760 * to broadcast traffic (sta mode).
8761 */
8762VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8763 tpSirGtkOffloadParams pGtkOffloadParams)
8764{
8765 VOS_STATUS status = VOS_STATUS_SUCCESS;
8766 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8767 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8768 sizeof(WDI_GtkOffloadReqMsg)) ;
8769 tWDA_ReqParams *pWdaParams ;
8770
8771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008772 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008773
8774 if(NULL == wdiGtkOffloadReqMsg)
8775 {
8776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008777 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008778 VOS_ASSERT(0);
8779 return VOS_STATUS_E_NOMEM;
8780 }
8781
8782 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8783 if(NULL == pWdaParams)
8784 {
8785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008786 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008787 VOS_ASSERT(0);
8788 vos_mem_free(wdiGtkOffloadReqMsg);
8789 return VOS_STATUS_E_NOMEM;
8790 }
8791
8792 //
8793 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8794 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008795
8796 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8797 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8798
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8800 // Copy KCK
8801 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8802 // Copy KEK
8803 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8804 // Copy KeyReplayCounter
8805 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8806 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8807
8808 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8809
8810 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8811 (NULL == pWDA->wdaWdiApiMsgParam));
8812
8813 /* Store Params pass it to WDI */
8814 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8815 pWdaParams->pWdaContext = pWDA;
8816 /* Store param pointer as passed in by caller */
8817 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8818
8819 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8820
8821 if(IS_WDI_STATUS_FAILURE(status))
8822 {
8823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8824 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8826 vos_mem_free(pWdaParams->wdaMsgParam);
8827 vos_mem_free(pWdaParams);
8828 }
8829
8830 return CONVERT_WDI2VOS_STATUS(status) ;
8831}
8832
8833/*
8834 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8835 *
8836 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008837void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8838 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008839{
8840 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8841 tWDA_CbContext *pWDA;
8842 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8843 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8844 tANI_U8 i;
8845 vos_msg_t vosMsg;
8846
8847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008848 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008849
8850 VOS_ASSERT(NULL != pWdaParams);
8851
8852 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8853 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8854
8855 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8856 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8857
8858 /* Message Header */
8859 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8860 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8861
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008862 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8863 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8864 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8865 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8866 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8867 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008868
8869 /* VOS message wrapper */
8870 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8871 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8872 vosMsg.bodyval = 0;
8873
8874 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8875 {
8876 /* free the mem and return */
8877 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8878 }
8879
8880 vos_mem_free(pWdaParams->wdaMsgParam) ;
8881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8882 vos_mem_free(pWdaParams) ;
8883}
8884#endif
8885
8886/*
8887 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8888 * Request to WDI to set Tx Per Tracking configurations
8889 */
8890VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8891{
8892 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008893 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8895 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8896 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 if(NULL == pwdiSetTxPerTrackingReqParams)
8901 {
8902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008904 vos_mem_free(pTxPerTrackingParams);
8905 VOS_ASSERT(0);
8906 return VOS_STATUS_E_NOMEM;
8907 }
8908 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8909 if(NULL == pWdaParams)
8910 {
8911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008913 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8914 vos_mem_free(pTxPerTrackingParams);
8915 VOS_ASSERT(0);
8916 return VOS_STATUS_E_NOMEM;
8917 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8919 pTxPerTrackingParams->ucTxPerTrackingEnable;
8920 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8921 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8922 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8923 pTxPerTrackingParams->ucTxPerTrackingRatio;
8924 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8925 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 /* Store param pointer as passed in by caller */
8928 /* store Params pass it to WDI
8929 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8930 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8931 pWdaParams->pWdaContext = pWDA;
8932 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008933 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008935 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008936 {
8937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8938 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008939 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 vos_mem_free(pWdaParams->wdaMsgParam) ;
8941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8942 vos_mem_free(pWdaParams) ;
8943 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008944 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008945
8946}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008947/*
8948 * FUNCTION: WDA_HALDumpCmdCallback
8949 * Send the VOS complete .
8950 */
8951void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8952 void* pUserData)
8953{
8954 tANI_U8 *buffer = NULL;
8955 tWDA_CbContext *pWDA = NULL;
8956 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 if(NULL == pWdaParams)
8958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008960 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 VOS_ASSERT(0) ;
8962 return ;
8963 }
8964
8965 pWDA = pWdaParams->pWdaContext;
8966 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967 if(wdiRspParams->usBufferLen > 0)
8968 {
8969 /*Copy the Resp data to UMAC supplied buffer*/
8970 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8973 vos_mem_free(pWdaParams);
8974
8975 /* Indicate VOSS about the start complete */
8976 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 return ;
8978}
8979
Jeff Johnson295189b2012-06-20 16:38:30 -07008980/*
8981 * FUNCTION: WDA_ProcessHALDumpCmdReq
8982 * Send Dump command to WDI
8983 */
8984VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
8985 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
8986 tANI_U32 arg4, tANI_U8 *pBuffer)
8987{
8988 WDI_Status status = WDI_STATUS_SUCCESS;
8989 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
8990 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
8991 tWDA_ReqParams *pWdaParams ;
8992 pVosContextType pVosContext = NULL;
8993 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
8995 (void *)pMac);
8996
8997 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8998 if(NULL == pWdaParams)
8999 {
9000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009002 return VOS_STATUS_E_NOMEM;
9003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 /* Allocate memory WDI request structure*/
9005 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9006 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9007 if(NULL == wdiHALDumpCmdReqParam)
9008 {
9009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9010 "WDA HAL DUMP Command buffer alloc fail");
9011 vos_mem_free(pWdaParams);
9012 return WDI_STATUS_E_FAILURE;
9013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009014 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 /* Extract the arguments */
9016 wdiHalDumpCmdInfo->command = cmd;
9017 wdiHalDumpCmdInfo->argument1 = arg1;
9018 wdiHalDumpCmdInfo->argument2 = arg2;
9019 wdiHalDumpCmdInfo->argument3 = arg3;
9020 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009021 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9023
9024 /* Response message will be passed through the buffer */
9025 pWdaParams->wdaMsgParam = (void *)pBuffer;
9026
9027 /* store Params pass it to WDI */
9028 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009029 /* Send command to WDI */
9030 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009032 if ( vStatus != VOS_STATUS_SUCCESS )
9033 {
9034 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9035 {
9036 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009037 "%s: Timeout occured before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009038 }
9039 else
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 }
9044 VOS_ASSERT(0);
9045 }
9046 return status;
9047}
Jeff Johnson295189b2012-06-20 16:38:30 -07009048#ifdef WLAN_FEATURE_GTK_OFFLOAD
9049/*
9050 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9051 * Request to WDI to get GTK Offload Information
9052 */
9053VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9054 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9055{
9056 VOS_STATUS status = VOS_STATUS_SUCCESS;
9057 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9058 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9059 tWDA_ReqParams *pWdaParams ;
9060
9061 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 VOS_ASSERT(0);
9066 return VOS_STATUS_E_NOMEM;
9067 }
9068
9069 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9070 if(NULL == pWdaParams)
9071 {
9072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_ASSERT(0);
9075 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9076 return VOS_STATUS_E_NOMEM;
9077 }
9078
9079 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9080
9081 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9082 (NULL == pWDA->wdaWdiApiMsgParam));
9083
9084 /* Store Params pass it to WDI */
9085 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9086 pWdaParams->pWdaContext = pWDA;
9087 /* Store param pointer as passed in by caller */
9088 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9089
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009090 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9091 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9092
Jeff Johnson295189b2012-06-20 16:38:30 -07009093 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9094
9095 if(IS_WDI_STATUS_FAILURE(status))
9096 {
9097 /* failure returned by WDI API */
9098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9099 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9100 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9101 vos_mem_free(pWdaParams) ;
9102 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9103 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9104 }
9105
9106 return CONVERT_WDI2VOS_STATUS(status) ;
9107}
9108#endif // WLAN_FEATURE_GTK_OFFLOAD
9109
9110/*
9111 * -------------------------------------------------------------------------
9112 * DATA interface with WDI for Mgmt Frames
9113 * -------------------------------------------------------------------------
9114 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009115/*
9116 * FUNCTION: WDA_TxComplete
9117 * Callback function for the WDA_TxPacket
9118 */
9119VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9120 VOS_STATUS status )
9121{
9122
9123 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9124 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009125 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009126
9127 if(NULL == wdaContext)
9128 {
9129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9130 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009131 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009132 VOS_ASSERT(0);
9133 return VOS_STATUS_E_FAILURE;
9134 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009135
9136 /*Check if frame was timed out or not*/
9137 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9138 (v_PVOID_t)&uUserData);
9139
9140 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9141 {
9142 /*Discard frame - no further processing is needed*/
9143 vos_pkt_return_packet(pData);
9144 return VOS_STATUS_SUCCESS;
9145 }
9146
Jeff Johnson295189b2012-06-20 16:38:30 -07009147 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9148 if( NULL!=wdaContext->pTxCbFunc)
9149 {
9150 /*check if packet is freed already*/
9151 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9152 {
9153 wdaContext->pTxCbFunc(pMac, pData);
9154 }
9155 else
9156 {
9157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9158 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009159 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009160 //Return from here since we reaching here because the packet already timeout
9161 return status;
9162 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 }
9164
9165 /*
9166 * Trigger the event to bring the HAL TL Tx complete function to come
9167 * out of wait
9168 * Let the coe above to complete the packet first. When this event is set,
9169 * the thread waiting for the event may run and set Vospacket_freed causing the original
9170 * packet not being freed.
9171 */
9172 status = vos_event_set(&wdaContext->txFrameEvent);
9173 if(!VOS_IS_STATUS_SUCCESS(status))
9174 {
9175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9176 "NEW VOS Event Set failed - status = %d \n", status);
9177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009178 return status;
9179}
Jeff Johnson295189b2012-06-20 16:38:30 -07009180/*
9181 * FUNCTION: WDA_TxPacket
9182 * Forward TX management frame to WDI
9183 */
9184VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9185 void *pFrmBuf,
9186 tANI_U16 frmLen,
9187 eFrameType frmType,
9188 eFrameTxDir txDir,
9189 tANI_U8 tid,
9190 pWDATxRxCompFunc pCompFunc,
9191 void *pData,
9192 pWDAAckFnTxComp pAckTxComp,
9193 tANI_U8 txFlag)
9194{
9195 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9196 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9197 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9198 tANI_U8 eventIdx = 0;
9199 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9200 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009201 if((NULL == pWDA)||(NULL == pFrmBuf))
9202 {
9203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9204 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009205 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 VOS_ASSERT(0);
9207 return VOS_STATUS_E_FAILURE;
9208 }
9209
9210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9211 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009212 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9213 if(NULL == pMac)
9214 {
9215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009216 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 VOS_ASSERT(0);
9218 return VOS_STATUS_E_FAILURE;
9219 }
9220
9221
9222
9223 /* store the call back function in WDA context */
9224 pWDA->pTxCbFunc = pCompFunc;
9225 /* store the call back for the function of ackTxComplete */
9226 if( pAckTxComp )
9227 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009228 if( NULL != pWDA->pAckTxCbFunc )
9229 {
9230 /* Already TxComp is active no need to active again */
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9232 "There is already one request pending for tx complete\n");
9233 pWDA->pAckTxCbFunc( pMac, 0);
9234 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009235
Jeff Johnsone7245742012-09-05 17:12:55 -07009236 if( VOS_STATUS_SUCCESS !=
9237 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9238 {
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9240 "Tx Complete timeout Timer Stop Failed ");
9241 }
9242 else
9243 {
9244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9245 "Tx Complete timeout Timer Stop Sucess ");
9246 }
9247 }
9248
9249 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9250 pWDA->pAckTxCbFunc = pAckTxComp;
9251 if( VOS_STATUS_SUCCESS !=
9252 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9253 {
9254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9255 "Tx Complete Timer Start Failed ");
9256 pWDA->pAckTxCbFunc = NULL;
9257 return eHAL_STATUS_FAILURE;
9258 }
9259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 /* Reset the event to be not signalled */
9261 status = vos_event_reset(&pWDA->txFrameEvent);
9262 if(!VOS_IS_STATUS_SUCCESS(status))
9263 {
9264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9265 "VOS Event reset failed - status = %d\n",status);
9266 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9267 if( pAckTxComp )
9268 {
9269 pWDA->pAckTxCbFunc = NULL;
9270 if( VOS_STATUS_SUCCESS !=
9271 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9272 {
9273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9274 "Tx Complete timeout Timer Stop Failed ");
9275 }
9276 }
9277 return VOS_STATUS_E_FAILURE;
9278 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009279
9280 /* If Peer Sta mask is set don't overwrite to self sta */
9281 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009283 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009284 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009285 else
9286 {
9287 /* Get system role, use the self station if in unknown role or STA role */
9288 systemRole = wdaGetGlobalSystemRole(pMac);
9289 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9290 (( eSYSTEM_STA_ROLE == systemRole )
9291#ifdef FEATURE_WLAN_CCX
9292 && frmType == HAL_TXRX_FRM_802_11_MGMT
9293#endif
9294 ))
9295 {
9296 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9297 }
9298 }
9299
Jeff Johnson295189b2012-06-20 16:38:30 -07009300
Jeff Johnsone7245742012-09-05 17:12:55 -07009301 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9302 disassoc frame reaches the HW, HAL has already deleted the peer station */
9303 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009305 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009306 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009307 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009308 /*Send Probe request frames on self sta idx*/
9309 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009310 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009311 /* Since we donot want probe responses to be retried, send probe responses
9312 through the NO_ACK queues */
9313 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9314 {
9315 //probe response is sent out using self station and no retries options.
9316 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9317 }
9318 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9319 {
9320 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9321 }
9322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009323 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9324
9325 /*Set frame tag to 0
9326 We will use the WDA user data in order to tag a frame as expired*/
9327 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9328 (v_PVOID_t)0);
9329
9330
9331 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9332 frmLen, ucTypeSubType, tid,
9333 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9334 {
9335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9336 "Sending Mgmt Frame failed - status = %d\n", status);
9337 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9338 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9339 if( pAckTxComp )
9340 {
9341 pWDA->pAckTxCbFunc = NULL;
9342 if( VOS_STATUS_SUCCESS !=
9343 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9344 {
9345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9346 "Tx Complete timeout Timer Stop Failed ");
9347 }
9348 }
9349 return VOS_STATUS_E_FAILURE;
9350 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009351 /*
9352 * Wait for the event to be set by the TL, to get the response of TX
9353 * complete, this event should be set by the Callback function called by TL
9354 */
9355 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9356 &eventIdx);
9357 if(!VOS_IS_STATUS_SUCCESS(status))
9358 {
9359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9360 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009361 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009362 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9363 after the packet gets completed(packet freed once)*/
9364
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009365 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9366 WDA_TransportChannelDebug(0, 1);
9367
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009368 /*Tag Frame as timed out for later deletion*/
9369 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9370 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9371
Jeff Johnson295189b2012-06-20 16:38:30 -07009372 /* check whether the packet was freed already,so need not free again when
9373 * TL calls the WDA_Txcomplete routine
9374 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009375 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9376 /*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 -07009377 {
9378 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009379 } */
9380
Jeff Johnson295189b2012-06-20 16:38:30 -07009381 if( pAckTxComp )
9382 {
9383 pWDA->pAckTxCbFunc = NULL;
9384 if( VOS_STATUS_SUCCESS !=
9385 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9386 {
9387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9388 "Tx Complete timeout Timer Stop Failed ");
9389 }
9390 }
9391 status = VOS_STATUS_E_FAILURE;
9392 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009393 return status;
9394}
Jeff Johnson295189b2012-06-20 16:38:30 -07009395/*
9396 * FUNCTION: WDA_McProcessMsg
9397 * Trigger DAL-AL to start CFG download
9398 */
9399VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9400{
9401 VOS_STATUS status = VOS_STATUS_SUCCESS;
9402 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 if(NULL == pMsg)
9404 {
9405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009406 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009407 VOS_ASSERT(0);
9408 return VOS_STATUS_E_FAILURE;
9409 }
9410
9411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009412 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009413
9414 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9415 if(NULL == pWDA )
9416 {
9417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009418 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009419 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009420 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009421 return VOS_STATUS_E_FAILURE;
9422 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 /* Process all the WDA messages.. */
9424 switch( pMsg->type )
9425 {
9426 case WNI_CFG_DNLD_REQ:
9427 {
9428 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 /* call WDA complete event if config download success */
9430 if( VOS_IS_STATUS_SUCCESS(status) )
9431 {
9432 vos_WDAComplete_cback(pVosContext);
9433 }
9434 else
9435 {
9436 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9437 "WDA Config Download failure" );
9438 }
9439 break ;
9440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 /*
9442 * Init SCAN request from PE, convert it into DAL format
9443 * and send it to DAL
9444 */
9445 case WDA_INIT_SCAN_REQ:
9446 {
9447 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9448 break ;
9449 }
9450 /* start SCAN request from PE */
9451 case WDA_START_SCAN_REQ:
9452 {
9453 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9454 break ;
9455 }
9456 /* end SCAN request from PE */
9457 case WDA_END_SCAN_REQ:
9458 {
9459 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9460 break ;
9461 }
9462 /* end SCAN request from PE */
9463 case WDA_FINISH_SCAN_REQ:
9464 {
9465 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9466 break ;
9467 }
9468 /* join request from PE */
9469 case WDA_CHNL_SWITCH_REQ:
9470 {
9471 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9472 {
9473 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9474 }
9475 else
9476 {
9477 WDA_ProcessChannelSwitchReq(pWDA,
9478 (tSwitchChannelParams*)pMsg->bodyptr) ;
9479 }
9480 break ;
9481 }
9482 /* ADD BSS request from PE */
9483 case WDA_ADD_BSS_REQ:
9484 {
9485 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9486 break ;
9487 }
9488 case WDA_ADD_STA_REQ:
9489 {
9490 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9491 break ;
9492 }
9493 case WDA_DELETE_BSS_REQ:
9494 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009495 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9496 break ;
9497 }
9498 case WDA_DELETE_STA_REQ:
9499 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9501 break ;
9502 }
9503 case WDA_CONFIG_PARAM_UPDATE_REQ:
9504 {
9505 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9506 break ;
9507 }
9508 case WDA_SET_BSSKEY_REQ:
9509 {
9510 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9511 break ;
9512 }
9513 case WDA_SET_STAKEY_REQ:
9514 {
9515 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9516 break ;
9517 }
9518 case WDA_SET_STA_BCASTKEY_REQ:
9519 {
9520 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9521 break ;
9522 }
9523 case WDA_REMOVE_BSSKEY_REQ:
9524 {
9525 WDA_ProcessRemoveBssKeyReq(pWDA,
9526 (tRemoveBssKeyParams *)pMsg->bodyptr);
9527 break ;
9528 }
9529 case WDA_REMOVE_STAKEY_REQ:
9530 {
9531 WDA_ProcessRemoveStaKeyReq(pWDA,
9532 (tRemoveStaKeyParams *)pMsg->bodyptr);
9533 break ;
9534 }
9535 case WDA_REMOVE_STA_BCASTKEY_REQ:
9536 {
9537 /* TODO: currently UMAC is not sending this request, Add the code for
9538 handling this request when UMAC supports */
9539 break;
9540 }
9541#ifdef FEATURE_WLAN_CCX
9542 case WDA_TSM_STATS_REQ:
9543 {
9544 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9545 break;
9546 }
9547#endif
9548 case WDA_UPDATE_EDCA_PROFILE_IND:
9549 {
9550 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9551 break;
9552 }
9553 case WDA_ADD_TS_REQ:
9554 {
9555 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9556 break;
9557 }
9558 case WDA_DEL_TS_REQ:
9559 {
9560 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9561 break;
9562 }
9563 case WDA_ADDBA_REQ:
9564 {
9565 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9566 break;
9567 }
9568 case WDA_DELBA_IND:
9569 {
9570 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9571 break;
9572 }
9573 case WDA_SET_LINK_STATE:
9574 {
9575 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9576 break;
9577 }
9578 case WDA_GET_STATISTICS_REQ:
9579 {
9580 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9581 break;
9582 }
9583 case WDA_PWR_SAVE_CFG:
9584 {
9585 if(pWDA->wdaState == WDA_READY_STATE)
9586 {
9587 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9588 }
9589 else
9590 {
9591 if(NULL != pMsg->bodyptr)
9592 {
9593 vos_mem_free(pMsg->bodyptr);
9594 }
9595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9596 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9597 }
9598 break;
9599 }
9600 case WDA_ENTER_IMPS_REQ:
9601 {
9602 if(pWDA->wdaState == WDA_READY_STATE)
9603 {
9604 WDA_ProcessEnterImpsReq(pWDA);
9605 }
9606 else
9607 {
9608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9609 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9610 }
9611 break;
9612 }
9613 case WDA_EXIT_IMPS_REQ:
9614 {
9615 if(pWDA->wdaState == WDA_READY_STATE)
9616 {
9617 WDA_ProcessExitImpsReq(pWDA);
9618 }
9619 else
9620 {
9621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9622 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9623 }
9624 break;
9625 }
9626 case WDA_ENTER_BMPS_REQ:
9627 {
9628 if(pWDA->wdaState == WDA_READY_STATE)
9629 {
9630 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9631 }
9632 else
9633 {
9634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9635 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9636 }
9637 break;
9638 }
9639 case WDA_EXIT_BMPS_REQ:
9640 {
9641 if(pWDA->wdaState == WDA_READY_STATE)
9642 {
9643 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9644 }
9645 else
9646 {
9647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9648 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9649 }
9650 break;
9651 }
9652 case WDA_ENTER_UAPSD_REQ:
9653 {
9654 if(pWDA->wdaState == WDA_READY_STATE)
9655 {
9656 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9657 }
9658 else
9659 {
9660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9661 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9662 }
9663 break;
9664 }
9665 case WDA_EXIT_UAPSD_REQ:
9666 {
9667 if(pWDA->wdaState == WDA_READY_STATE)
9668 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009669 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 }
9671 else
9672 {
9673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9674 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9675 }
9676 break;
9677 }
9678 case WDA_UPDATE_UAPSD_IND:
9679 {
9680 if(pWDA->wdaState == WDA_READY_STATE)
9681 {
9682 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9683 }
9684 else
9685 {
9686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9687 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9688 }
9689 break;
9690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009691 case WDA_REGISTER_PE_CALLBACK :
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9694 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9695 /*TODO: store the PE callback */
9696 /* Do Nothing? MSG Body should be freed at here */
9697 if(NULL != pMsg->bodyptr)
9698 {
9699 vos_mem_free(pMsg->bodyptr);
9700 }
9701 break;
9702 }
9703 case WDA_SYS_READY_IND :
9704 {
9705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9706 "Handling msg type WDA_SYS_READY_IND " );
9707 pWDA->wdaState = WDA_READY_STATE;
9708 if(NULL != pMsg->bodyptr)
9709 {
9710 vos_mem_free(pMsg->bodyptr);
9711 }
9712 break;
9713 }
9714 case WDA_BEACON_FILTER_IND :
9715 {
9716 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9717 break;
9718 }
9719 case WDA_BTC_SET_CFG:
9720 {
9721 /*TODO: handle this while dealing with BTC */
9722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9723 "Handling msg type WDA_BTC_SET_CFG " );
9724 /* Do Nothing? MSG Body should be freed at here */
9725 if(NULL != pMsg->bodyptr)
9726 {
9727 vos_mem_free(pMsg->bodyptr);
9728 }
9729 break;
9730 }
9731 case WDA_SIGNAL_BT_EVENT:
9732 {
9733 /*TODO: handle this while dealing with BTC */
9734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9735 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9736 /* Do Nothing? MSG Body should be freed at here */
9737 if(NULL != pMsg->bodyptr)
9738 {
9739 vos_mem_free(pMsg->bodyptr);
9740 }
9741 break;
9742 }
9743 case WDA_CFG_RXP_FILTER_REQ:
9744 {
9745 WDA_ProcessConfigureRxpFilterReq(pWDA,
9746 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9747 break;
9748 }
9749 case WDA_SET_HOST_OFFLOAD:
9750 {
9751 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9752 break;
9753 }
9754 case WDA_SET_KEEP_ALIVE:
9755 {
9756 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9757 break;
9758 }
9759#ifdef WLAN_NS_OFFLOAD
9760 case WDA_SET_NS_OFFLOAD:
9761 {
9762 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9763 break;
9764 }
9765#endif //WLAN_NS_OFFLOAD
9766 case WDA_ADD_STA_SELF_REQ:
9767 {
9768 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9769 break;
9770 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 case WDA_DEL_STA_SELF_REQ:
9772 {
9773 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9774 break;
9775 }
9776 case WDA_WOWL_ADD_BCAST_PTRN:
9777 {
9778 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9779 break;
9780 }
9781 case WDA_WOWL_DEL_BCAST_PTRN:
9782 {
9783 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9784 break;
9785 }
9786 case WDA_WOWL_ENTER_REQ:
9787 {
9788 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9789 break;
9790 }
9791 case WDA_WOWL_EXIT_REQ:
9792 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009793 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 break;
9795 }
9796 case WDA_TL_FLUSH_AC_REQ:
9797 {
9798 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9799 break;
9800 }
9801 case WDA_SIGNAL_BTAMP_EVENT:
9802 {
9803 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9804 break;
9805 }
9806#ifdef WDA_UT
9807 case WDA_WDI_EVENT_MSG:
9808 {
9809 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9810 break ;
9811 }
9812#endif
9813 case WDA_UPDATE_BEACON_IND:
9814 {
9815 WDA_ProcessUpdateBeaconParams(pWDA,
9816 (tUpdateBeaconParams *)pMsg->bodyptr);
9817 break;
9818 }
9819 case WDA_SEND_BEACON_REQ:
9820 {
9821 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9822 break;
9823 }
9824 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9825 {
9826 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9827 (tSendProbeRespParams *)pMsg->bodyptr);
9828 break;
9829 }
9830#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9831 case WDA_SET_MAX_TX_POWER_REQ:
9832 {
9833 WDA_ProcessSetMaxTxPowerReq(pWDA,
9834 (tMaxTxPowerParams *)pMsg->bodyptr);
9835 break;
9836 }
9837#endif
9838#ifdef WLAN_FEATURE_P2P
9839 case WDA_SET_P2P_GO_NOA_REQ:
9840 {
9841 WDA_ProcessSetP2PGONOAReq(pWDA,
9842 (tP2pPsParams *)pMsg->bodyptr);
9843 break;
9844 }
9845#endif
9846 /* timer related messages */
9847 case WDA_TIMER_BA_ACTIVITY_REQ:
9848 {
9849 WDA_BaCheckActivity(pWDA) ;
9850 break ;
9851 }
9852#ifdef WLAN_FEATURE_VOWIFI_11R
9853 case WDA_AGGR_QOS_REQ:
9854 {
9855 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9856 break;
9857 }
9858#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009859#ifdef ANI_MANF_DIAG
9860 case WDA_FTM_CMD_REQ:
9861 {
9862 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9863 break ;
9864 }
9865#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009866#ifdef FEATURE_OEM_DATA_SUPPORT
9867 case WDA_START_OEM_DATA_REQ:
9868 {
9869 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9870 break;
9871 }
9872#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009873 /* Tx Complete Time out Indication */
9874 case WDA_TX_COMPLETE_TIMEOUT_IND:
9875 {
9876 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9877 break;
9878 }
9879 case WDA_WLAN_SUSPEND_IND:
9880 {
9881 WDA_ProcessWlanSuspendInd(pWDA,
9882 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9883 break;
9884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009885 case WDA_WLAN_RESUME_REQ:
9886 {
9887 WDA_ProcessWlanResumeReq(pWDA,
9888 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9889 break;
9890 }
9891
9892 case WDA_UPDATE_CF_IND:
9893 {
9894 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9895 pMsg->bodyptr = NULL;
9896 break;
9897 }
9898#ifdef FEATURE_WLAN_SCAN_PNO
9899 case WDA_SET_PNO_REQ:
9900 {
9901 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9902 break;
9903 }
9904 case WDA_UPDATE_SCAN_PARAMS_REQ:
9905 {
9906 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9907 break;
9908 }
9909 case WDA_SET_RSSI_FILTER_REQ:
9910 {
9911 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9912 break;
9913 }
9914#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009915 case WDA_SET_TX_PER_TRACKING_REQ:
9916 {
9917 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9918 break;
9919 }
9920
9921#ifdef WLAN_FEATURE_PACKET_FILTERING
9922 case WDA_8023_MULTICAST_LIST_REQ:
9923 {
9924 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9925 break;
9926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9928 {
9929 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9930 break;
9931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9933 {
9934 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9935 break;
9936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9938 {
9939 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9940 break;
9941 }
9942#endif // WLAN_FEATURE_PACKET_FILTERING
9943
9944
9945 case WDA_TRANSMISSION_CONTROL_IND:
9946 {
9947 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9948 break;
9949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009950 case WDA_SET_POWER_PARAMS_REQ:
9951 {
9952 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9953 break;
9954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009955#ifdef WLAN_FEATURE_GTK_OFFLOAD
9956 case WDA_GTK_OFFLOAD_REQ:
9957 {
9958 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9959 break;
9960 }
9961
9962 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9963 {
9964 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9965 break;
9966 }
9967#endif //WLAN_FEATURE_GTK_OFFLOAD
9968
9969 case WDA_SET_TM_LEVEL_REQ:
9970 {
9971 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9972 break;
9973 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009974#ifdef WLAN_FEATURE_11AC
9975 case WDA_UPDATE_OP_MODE:
9976 {
9977 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9978 {
9979 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
9980 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
9981 else
9982 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9983 " VHT OpMode Feature is Not Supported \n");
9984 }
9985 else
9986 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9987 " 11AC Feature is Not Supported \n");
9988 break;
9989 }
9990#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009991 default:
9992 {
9993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9994 "No Handling for msg type %x in WDA "
9995 ,pMsg->type);
9996 /* Do Nothing? MSG Body should be freed at here */
9997 if(NULL != pMsg->bodyptr)
9998 {
9999 vos_mem_free(pMsg->bodyptr);
10000 }
10001 //WDA_VOS_ASSERT(0) ;
10002 }
10003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 return status ;
10005}
10006
Jeff Johnson295189b2012-06-20 16:38:30 -070010007/*
10008 * FUNCTION: WDA_LowLevelIndCallback
10009 * IND API callback from WDI, send Ind to PE
10010 */
10011void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10012 void* pUserData )
10013{
10014 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10015#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10016 tSirRSSINotification rssiNotification;
10017#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 if(NULL == pWDA)
10019 {
10020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010021 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 VOS_ASSERT(0);
10023 return ;
10024 }
10025
10026 switch(wdiLowLevelInd->wdiIndicationType)
10027 {
10028 case WDI_RSSI_NOTIFICATION_IND:
10029 {
10030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10031 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010032#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10033 rssiNotification.bReserved =
10034 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10035 rssiNotification.bRssiThres1NegCross =
10036 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10037 rssiNotification.bRssiThres1PosCross =
10038 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10039 rssiNotification.bRssiThres2NegCross =
10040 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10041 rssiNotification.bRssiThres2PosCross =
10042 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10043 rssiNotification.bRssiThres3NegCross =
10044 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10045 rssiNotification.bRssiThres3PosCross =
10046 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Jeff Johnson295189b2012-06-20 16:38:30 -070010047 WLANTL_BMPSRSSIRegionChangedNotification(
10048 pWDA->pVosContext,
10049 &rssiNotification);
10050#endif
10051 break ;
10052 }
10053 case WDI_MISSED_BEACON_IND:
10054 {
10055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10056 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010057 /* send IND to PE */
10058 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10059 break ;
10060 }
10061 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10062 {
10063 /* TODO: Decode Ind and send Ind to PE */
10064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10065 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10066 break ;
10067 }
10068
10069 case WDI_MIC_FAILURE_IND:
10070 {
10071 tpSirSmeMicFailureInd pMicInd =
10072 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10073
10074 if(NULL == pMicInd)
10075 {
10076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010077 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010078 break;
10079 }
10080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10081 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010082 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10083 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10084 vos_mem_copy(pMicInd->bssId,
10085 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10086 sizeof(tSirMacAddr));
10087 vos_mem_copy(pMicInd->info.srcMacAddr,
10088 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10089 sizeof(tSirMacAddr));
10090 vos_mem_copy(pMicInd->info.taMacAddr,
10091 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10092 sizeof(tSirMacAddr));
10093 vos_mem_copy(pMicInd->info.dstMacAddr,
10094 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10095 sizeof(tSirMacAddr));
10096 vos_mem_copy(pMicInd->info.rxMacAddr,
10097 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10098 sizeof(tSirMacAddr));
10099 pMicInd->info.multicast =
10100 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10101 pMicInd->info.keyId=
10102 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10103 pMicInd->info.IV1=
10104 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10105 vos_mem_copy(pMicInd->info.TSC,
10106 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010107 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10108 (void *)pMicInd , 0) ;
10109 break ;
10110 }
10111 case WDI_FATAL_ERROR_IND:
10112 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010113 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010114 /* TODO: Decode Ind and send Ind to PE */
10115 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10116 "Received WDI_FATAL_ERROR_IND from WDI ");
10117 break ;
10118 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 case WDI_DEL_STA_IND:
10120 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010121 tpDeleteStaContext pDelSTACtx =
10122 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10123
10124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10125 "Received WDI_DEL_STA_IND from WDI ");
10126 if(NULL == pDelSTACtx)
10127 {
10128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010130 break;
10131 }
10132 vos_mem_copy(pDelSTACtx->addr2,
10133 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10134 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 vos_mem_copy(pDelSTACtx->bssId,
10136 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10137 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010138 pDelSTACtx->assocId =
10139 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10140 pDelSTACtx->reasonCode =
10141 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10142 pDelSTACtx->staId =
10143 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010144 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10145 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010146 break ;
10147 }
10148 case WDI_COEX_IND:
10149 {
10150 tANI_U32 index;
10151 vos_msg_t vosMsg;
10152 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10153 if(NULL == pSmeCoexInd)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 break;
10158 }
10159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10160 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 /* Message Header */
10162 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10163 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010164 /* Info from WDI Indication */
10165 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10166 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10167 {
10168 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10169 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010170 /* VOS message wrapper */
10171 vosMsg.type = eWNI_SME_COEX_IND;
10172 vosMsg.bodyptr = (void *)pSmeCoexInd;
10173 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010174 /* Send message to SME */
10175 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10176 {
10177 /* free the mem and return */
10178 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10179 }
10180 else
10181 {
10182 /* DEBUG */
10183 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10184 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10185 pSmeCoexInd->coexIndType,
10186 pSmeCoexInd->coexIndData[0],
10187 pSmeCoexInd->coexIndData[1],
10188 pSmeCoexInd->coexIndData[2],
10189 pSmeCoexInd->coexIndData[3]);
10190 }
10191 break;
10192 }
10193 case WDI_TX_COMPLETE_IND:
10194 {
10195 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10196 /* Calling TxCompleteAck Indication from wda context*/
10197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10198 "Complete Indication received from HAL");
10199 if( pWDA->pAckTxCbFunc )
10200 {
10201 if( VOS_STATUS_SUCCESS !=
10202 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10205 "Tx Complete timeout Timer Stop Failed ");
10206 }
10207 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10208 pWDA->pAckTxCbFunc = NULL;
10209 }
10210 else
10211 {
10212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10213 "Tx Complete Indication is received after timeout ");
10214 }
10215 break;
10216 }
10217#ifdef WLAN_FEATURE_P2P
10218 case WDI_P2P_NOA_ATTR_IND :
10219 {
10220 tSirP2PNoaAttr *pP2pNoaAttr =
10221 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10223 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010224 if (NULL == pP2pNoaAttr)
10225 {
10226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10227 "Memory allocation failure, "
10228 "WDI_P2P_NOA_ATTR_IND not forwarded");
10229 break;
10230 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010231 pP2pNoaAttr->index =
10232 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10233 pP2pNoaAttr->oppPsFlag =
10234 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10235 pP2pNoaAttr->ctWin =
10236 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10237
10238 pP2pNoaAttr->uNoa1IntervalCnt =
10239 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10240 pP2pNoaAttr->uNoa1Duration =
10241 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10242 pP2pNoaAttr->uNoa1Interval =
10243 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10244 pP2pNoaAttr->uNoa1StartTime =
10245 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010246 pP2pNoaAttr->uNoa2IntervalCnt =
10247 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10248 pP2pNoaAttr->uNoa2Duration =
10249 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10250 pP2pNoaAttr->uNoa2Interval =
10251 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10252 pP2pNoaAttr->uNoa2StartTime =
10253 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010254 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10255 (void *)pP2pNoaAttr , 0) ;
10256 break;
10257 }
10258#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010259#ifdef FEATURE_WLAN_SCAN_PNO
10260 case WDI_PREF_NETWORK_FOUND_IND:
10261 {
10262 vos_msg_t vosMsg;
10263 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10265 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 if (NULL == pPrefNetworkFoundInd)
10267 {
10268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10269 "Memory allocation failure, "
10270 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10271 break;
10272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 /* Message Header */
10274 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10275 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10276
10277 /* Info from WDI Indication */
10278 pPrefNetworkFoundInd->ssId.length =
10279 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010280 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10282 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10283 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010284 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 /* VOS message wrapper */
10286 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10287 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10288 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 /* Send message to SME */
10290 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10291 {
10292 /* free the mem and return */
10293 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10294 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 break;
10296 }
10297#endif // FEATURE_WLAN_SCAN_PNO
10298
10299#ifdef WLAN_WAKEUP_EVENTS
10300 case WDI_WAKE_REASON_IND:
10301 {
10302 vos_msg_t vosMsg;
10303 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10304 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10305 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10306
10307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10308 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10309 wdiLowLevelInd->wdiIndicationType,
10310 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10311 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10312 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10313
10314 if (NULL == pWakeReasonInd)
10315 {
10316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10317 "Memory allocation failure, "
10318 "WDI_WAKE_REASON_IND not forwarded");
10319 break;
10320 }
10321
10322 vos_mem_zero(pWakeReasonInd, allocSize);
10323
10324 /* Message Header */
10325 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10326 pWakeReasonInd->mesgLen = allocSize;
10327
10328 /* Info from WDI Indication */
10329 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10330 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10331 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10332 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10333 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10334 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10335 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10336 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10337
10338 /* VOS message wrapper */
10339 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10340 vosMsg.bodyptr = (void *) pWakeReasonInd;
10341 vosMsg.bodyval = 0;
10342
10343 /* Send message to SME */
10344 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10345 {
10346 /* free the mem and return */
10347 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10348 }
10349
10350 break;
10351 }
10352#endif // WLAN_WAKEUP_EVENTS
10353
10354 case WDI_TX_PER_HIT_IND:
10355 {
10356 vos_msg_t vosMsg;
10357 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10358 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10359 /* VOS message wrapper */
10360 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10361 vosMsg.bodyptr = NULL;
10362 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010363 /* Send message to SME */
10364 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10365 {
10366 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10367 }
10368 break;
10369 }
10370
10371 default:
10372 {
10373 /* TODO error */
10374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10375 "Received UNKNOWN Indication from WDI ");
10376 }
10377 }
10378 return ;
10379}
10380
Jeff Johnson295189b2012-06-20 16:38:30 -070010381/*
10382 * BA related processing in WDA.
10383 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010384void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10385 void* pUserData)
10386{
10387 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10388 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010389 if(NULL == pWdaParams)
10390 {
10391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010392 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010393 VOS_ASSERT(0) ;
10394 return ;
10395 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010396 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010397 vos_mem_free(pWdaParams->wdaMsgParam) ;
10398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10399 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010401 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010402 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10403 {
10404 tANI_U8 i = 0 ;
10405 tBaActivityInd *baActivityInd = NULL ;
10406 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10407 tANI_U8 allocSize = sizeof(tBaActivityInd)
10408 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10409 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10410 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010411 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010412 if(NULL == baActivityInd)
10413 {
10414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010415 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 VOS_ASSERT(0) ;
10417 return;
10418 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010419 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10420 sizeof(tSirMacAddr)) ;
10421 baActivityInd->baCandidateCnt = baCandidateCount ;
10422
10423 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10424 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10425
10426 for(i = 0 ; i < baCandidateCount ; i++)
10427 {
10428 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010429 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10430 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10432 {
10433 baCandidate->baInfo[tid].fBaEnable =
10434 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10435 baCandidate->baInfo[tid].startingSeqNum =
10436 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10437 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010438 wdiBaCandidate++ ;
10439 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010440 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010441 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10442 }
10443 else
10444 {
10445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10446 "BA Trigger RSP with Failure received ");
10447 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010448 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010449}
Jeff Johnson295189b2012-06-20 16:38:30 -070010450/*
10451 * BA Activity check timer handler
10452 */
10453void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10454{
10455 tANI_U8 curSta = 0 ;
10456 tANI_U8 tid = 0 ;
10457 tANI_U8 size = 0 ;
10458 tANI_U8 baCandidateCount = 0 ;
10459 tANI_U8 newBaCandidate = 0 ;
10460 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10461
10462 if(NULL == pWDA)
10463 {
10464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010465 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010466 VOS_ASSERT(0);
10467 return ;
10468 }
10469 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10470 {
10471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10472 "Inconsistent STA entries in WDA");
10473 VOS_ASSERT(0) ;
10474 }
10475 /* walk through all STA entries and find out TX packet count */
10476 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10477 {
10478 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10479 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010480 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010481 tANI_U32 txPktCount = 0 ;
10482 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010484 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10485 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10487 curSta, tid, &txPktCount)))
10488 {
10489#if 0
10490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10491 "************* %d:%d, %d ",curSta, txPktCount,
10492 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10493#endif
10494 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010495 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010496 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10497 curSta, tid)))
10498 {
10499 /* get prepare for sending message to HAL */
10500 //baCandidate[baCandidateCount].staIdx = curSta ;
10501 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10502 newBaCandidate = WDA_ENABLE_BA ;
10503 }
10504 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10505 }
10506 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010507 /* fill the entry for all the sta with given TID's */
10508 if(WDA_ENABLE_BA == newBaCandidate)
10509 {
10510 /* move to next BA candidate */
10511 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10512 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10513 baCandidateCount++ ;
10514 newBaCandidate = WDA_DISABLE_BA ;
10515 }
10516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010517 /* prepare and send message to hal */
10518 if( 0 < baCandidateCount)
10519 {
10520 WDI_Status status = WDI_STATUS_SUCCESS ;
10521 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10522 tWDA_ReqParams *pWdaParams =
10523 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 if(NULL == pWdaParams)
10525 {
10526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010528 VOS_ASSERT(0) ;
10529 return;
10530 }
10531 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10532 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10533 if(NULL == wdiTriggerBaReq)
10534 {
10535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010536 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010537 VOS_ASSERT(0) ;
10538 vos_mem_free(pWdaParams);
10539 return;
10540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010541 do
10542 {
10543 WDI_TriggerBAReqinfoType *triggerBaInfo =
10544 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10545 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10546 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10547 * for each request */
10548 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10549 triggerBaInfo->ucBASessionID = 0;
10550 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10551 } while(0) ;
10552 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010554 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010555 pWdaParams->pWdaContext = pWDA;
10556 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10557 pWdaParams->wdaMsgParam = NULL;
10558 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10559 WDA_TriggerBaReqCallback, pWdaParams) ;
10560 if(IS_WDI_STATUS_FAILURE(status))
10561 {
10562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10563 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10564 vos_mem_free(pWdaParams->wdaMsgParam) ;
10565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10566 vos_mem_free(pWdaParams) ;
10567 }
10568 }
10569 else
10570 {
10571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10572 "There is no TID for initiating BA");
10573 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010574 if( VOS_STATUS_SUCCESS !=
10575 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10576 {
10577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10578 "BA Activity Timer Stop Failed ");
10579 return ;
10580 }
10581 if( VOS_STATUS_SUCCESS !=
10582 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10583 {
10584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10585 "BA Activity Timer Start Failed ");
10586 return;
10587 }
10588 return ;
10589}
Jeff Johnson295189b2012-06-20 16:38:30 -070010590/*
10591 * WDA common routine to create timer used by WDA.
10592 */
10593static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10594{
Jeff Johnson295189b2012-06-20 16:38:30 -070010595 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10596 tANI_U32 val = 0 ;
10597 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10598
10599 if(NULL == pMac)
10600 {
10601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010602 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010603 VOS_ASSERT(0);
10604 return VOS_STATUS_E_FAILURE;
10605 }
10606 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10607 != eSIR_SUCCESS)
10608 {
10609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10610 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10611 return VOS_STATUS_E_FAILURE;
10612 }
10613 val = SYS_MS_TO_TICKS(val) ;
10614
10615 /* BA activity check timer */
10616 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10617 "BA Activity Check timer", WDA_TimerHandler,
10618 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10619 if(status != TX_SUCCESS)
10620 {
10621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10622 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010623 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010624 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010625 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010626 /* Tx Complete Timeout timer */
10627 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10628 "Tx Complete Check timer", WDA_TimerHandler,
10629 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 if(status != TX_SUCCESS)
10631 {
10632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10633 "Unable to create Tx Complete Timeout timer");
10634 /* Destroy timer of BA activity check timer */
10635 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10636 if(status != TX_SUCCESS)
10637 {
10638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10639 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010640 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010641 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010642 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010643 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010644 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010645}
Jeff Johnson295189b2012-06-20 16:38:30 -070010646/*
10647 * WDA common routine to destroy timer used by WDA.
10648 */
10649static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10650{
10651 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010652 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10653 if(status != TX_SUCCESS)
10654 {
10655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10656 "Unable to Destroy Tx Complete Timeout timer");
10657 return eSIR_FAILURE ;
10658 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010659 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10660 if(status != TX_SUCCESS)
10661 {
10662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10663 "Unable to Destroy BA activity timer");
10664 return eSIR_FAILURE ;
10665 }
10666
10667 return eSIR_SUCCESS ;
10668}
Jeff Johnson295189b2012-06-20 16:38:30 -070010669/*
10670 * WDA timer handler.
10671 */
10672void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10673{
10674 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10675 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010676 /*
10677 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10678 */
10679 wdaMsg.type = timerInfo ;
10680 wdaMsg.bodyptr = NULL;
10681 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010682 /* post the message.. */
10683 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10684 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10685 {
10686 vosStatus = VOS_STATUS_E_BADMSG;
10687 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010688}
Jeff Johnson295189b2012-06-20 16:38:30 -070010689/*
10690 * WDA Tx Complete timeout Indication.
10691 */
10692void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10693{
10694 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 if( pWDA->pAckTxCbFunc )
10696 {
10697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10698 "TxComplete timer expired\n");
10699 pWDA->pAckTxCbFunc( pMac, 0);
10700 pWDA->pAckTxCbFunc = NULL;
10701 }
10702 else
10703 {
10704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10705 "There is no request pending for TxComplete and wait timer expired\n");
10706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010707}
Jeff Johnson295189b2012-06-20 16:38:30 -070010708/*
10709 * WDA Set REG Domain to VOS NV
10710 */
10711eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10712{
10713 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10714 {
10715 return eHAL_STATUS_INVALID_PARAMETER;
10716 }
10717 return eHAL_STATUS_SUCCESS;
10718}
10719#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10720
Jeff Johnson295189b2012-06-20 16:38:30 -070010721#ifdef FEATURE_WLAN_SCAN_PNO
10722/*
10723 * FUNCTION: WDA_PNOScanReqCallback
10724 *
10725 */
10726void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10727{
10728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010730 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010731 if(NULL == pWdaParams)
10732 {
10733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010734 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010735 VOS_ASSERT(0) ;
10736 return ;
10737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 if( pWdaParams != NULL )
10739 {
10740 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10741 {
10742 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010744 if( pWdaParams->wdaMsgParam != NULL)
10745 {
10746 vos_mem_free(pWdaParams->wdaMsgParam);
10747 }
10748
10749 vos_mem_free(pWdaParams) ;
10750 }
10751
10752 return ;
10753}
Jeff Johnson295189b2012-06-20 16:38:30 -070010754/*
10755 * FUNCTION: WDA_UpdateScanParamsCallback
10756 *
10757 */
10758void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10759{
10760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010762 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010763 if(NULL == pWdaParams)
10764 {
10765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010766 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010767 VOS_ASSERT(0) ;
10768 return ;
10769 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010770 if( pWdaParams != NULL )
10771 {
10772 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10773 {
10774 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010776 if( pWdaParams->wdaMsgParam != NULL)
10777 {
10778 vos_mem_free(pWdaParams->wdaMsgParam);
10779 }
10780 vos_mem_free(pWdaParams) ;
10781 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010782 return ;
10783}
Jeff Johnson295189b2012-06-20 16:38:30 -070010784/*
10785 * FUNCTION: WDA_SetPowerParamsCallback
10786 *
10787 */
10788void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
10789{
Jeff Johnsone7245742012-09-05 17:12:55 -070010790 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010791
10792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010793 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010794 if(NULL == pWdaParams)
10795 {
10796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010797 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010798 VOS_ASSERT(0) ;
10799 return ;
10800 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010801 if( pWdaParams != NULL )
10802 {
10803 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10804 {
10805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10806 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010807 if( pWdaParams->wdaMsgParam != NULL)
10808 {
10809 vos_mem_free(pWdaParams->wdaMsgParam);
10810 }
10811 vos_mem_free(pWdaParams) ;
10812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 return ;
10814}
Jeff Johnson295189b2012-06-20 16:38:30 -070010815/*
10816 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10817 * Request to WDI to set Preferred Network List.Offload
10818 */
10819VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
10820 tSirPNOScanReq *pPNOScanReqParams)
10821{
Jeff Johnson43971f52012-07-17 12:26:56 -070010822 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010823 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
10824 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
10825 tWDA_ReqParams *pWdaParams ;
10826 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010828 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010829 if(NULL == pwdiPNOScanReqInfo)
10830 {
10831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010832 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010833 VOS_ASSERT(0);
10834 return VOS_STATUS_E_NOMEM;
10835 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010836 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10837 if(NULL == pWdaParams)
10838 {
10839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010840 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_ASSERT(0);
10842 vos_mem_free(pwdiPNOScanReqInfo);
10843 return VOS_STATUS_E_NOMEM;
10844 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010845 //
10846 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
10847 //
10848 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
10849 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
10851 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
10852 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010853 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
10854 {
10855 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
10856 &pPNOScanReqParams->aNetworks[i],
10857 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
10858 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010859 /*Scan timer intervals*/
10860 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
10861 &pPNOScanReqParams->scanTimers,
10862 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070010863 /*Probe template for 2.4GHz band*/
10864 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
10865 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10866 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010867 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
10868 pPNOScanReqParams->p24GProbeTemplate,
10869 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 /*Probe template for 5GHz band*/
10871 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
10872 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10873 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010874 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
10875 pPNOScanReqParams->p5GProbeTemplate,
10876 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010877 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010878
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 /* Store Params pass it to WDI */
10880 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
10881 pWdaParams->pWdaContext = pWDA;
10882 /* Store param pointer as passed in by caller */
10883 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
10885 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010886 if(IS_WDI_STATUS_FAILURE(status))
10887 {
10888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10889 "Failure in Set PNO REQ WDI API, free all the memory " );
10890 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10891 vos_mem_free(pWdaParams->wdaMsgParam);
10892 pWdaParams->wdaWdiApiMsgParam = NULL;
10893 pWdaParams->wdaMsgParam = NULL;
10894 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 return CONVERT_WDI2VOS_STATUS(status) ;
10896}
Jeff Johnson295189b2012-06-20 16:38:30 -070010897/*
10898 * FUNCTION: WDA_RssiFilterCallback
10899 *
10900 */
10901void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
10902{
10903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10904
10905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010906 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010907
10908 VOS_ASSERT(NULL != pWdaParams);
10909
10910 vos_mem_free(pWdaParams->wdaMsgParam) ;
10911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10912 vos_mem_free(pWdaParams) ;
10913
10914 return ;
10915}
10916/*
10917 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10918 * Request to WDI to set Preferred Network List.Offload
10919 */
10920VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
10921 tSirSetRSSIFilterReq* pRssiFilterParams)
10922{
Jeff Johnson43971f52012-07-17 12:26:56 -070010923 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010924 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
10925 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
10926 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010928 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 if(NULL == pwdiSetRssiFilterReqInfo)
10930 {
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010932 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010933 VOS_ASSERT(0);
10934 return VOS_STATUS_E_NOMEM;
10935 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010936 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10937 if(NULL == pWdaParams)
10938 {
10939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010940 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 VOS_ASSERT(0);
10942 vos_mem_free(pwdiSetRssiFilterReqInfo);
10943 return VOS_STATUS_E_NOMEM;
10944 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
10946 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010947
Jeff Johnson295189b2012-06-20 16:38:30 -070010948 /* Store Params pass it to WDI */
10949 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
10950 pWdaParams->pWdaContext = pWDA;
10951 /* Store param pointer as passed in by caller */
10952 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
10954 (WDI_PNOScanCb)WDA_RssiFilterCallback,
10955 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010956 if(IS_WDI_STATUS_FAILURE(status))
10957 {
10958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10959 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
10960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10961 vos_mem_free(pWdaParams->wdaMsgParam);
10962 pWdaParams->wdaWdiApiMsgParam = NULL;
10963 pWdaParams->wdaMsgParam = NULL;
10964 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010965 return CONVERT_WDI2VOS_STATUS(status) ;
10966}
10967
Jeff Johnson295189b2012-06-20 16:38:30 -070010968/*
10969 * FUNCTION: WDA_ProcessUpdateScanParams
10970 * Request to WDI to update Scan Parameters
10971 */
10972VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
10973 tSirUpdateScanParams *pUpdateScanParams)
10974{
Jeff Johnson43971f52012-07-17 12:26:56 -070010975 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
10977 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
10978 sizeof(WDI_UpdateScanParamsInfoType)) ;
10979 tWDA_ReqParams *pWdaParams ;
10980 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010982 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010983 if(NULL == wdiUpdateScanParamsInfoType)
10984 {
10985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010986 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010987 VOS_ASSERT(0);
10988 return VOS_STATUS_E_NOMEM;
10989 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010990 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10991 if ( NULL == pWdaParams )
10992 {
10993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010994 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 VOS_ASSERT(0);
10996 vos_mem_free(wdiUpdateScanParamsInfoType);
10997 return VOS_STATUS_E_NOMEM;
10998 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 //
11000 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11001 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11003 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11004 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11005 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11006 "sir struct %d wdi struct %d",
11007 pUpdateScanParams->b11dEnabled,
11008 pUpdateScanParams->b11dResolved,
11009 pUpdateScanParams->ucChannelCount,
11010 pUpdateScanParams->usPassiveMinChTime,
11011 pUpdateScanParams->usPassiveMaxChTime,
11012 pUpdateScanParams->usActiveMinChTime,
11013 pUpdateScanParams->usActiveMaxChTime,
11014 sizeof(tSirUpdateScanParams),
11015 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11016
Jeff Johnson295189b2012-06-20 16:38:30 -070011017 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11018 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11020 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11022 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011023 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11024 pUpdateScanParams->usActiveMaxChTime;
11025 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11026 pUpdateScanParams->usActiveMinChTime;
11027 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11028 pUpdateScanParams->usPassiveMaxChTime;
11029 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11030 pUpdateScanParams->usPassiveMinChTime;
11031
Jeff Johnson295189b2012-06-20 16:38:30 -070011032 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011033 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11034 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011035
Jeff Johnson295189b2012-06-20 16:38:30 -070011036 for ( i = 0; i <
11037 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11038 i++)
11039 {
11040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11041 "Update Scan Parameters channel: %d",
11042 pUpdateScanParams->aChannels[i]);
11043
11044 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11045 pUpdateScanParams->aChannels[i];
11046 }
11047
Jeff Johnson295189b2012-06-20 16:38:30 -070011048 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011049
Jeff Johnson295189b2012-06-20 16:38:30 -070011050 /* Store Params pass it to WDI */
11051 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11052 pWdaParams->pWdaContext = pWDA;
11053 /* Store param pointer as passed in by caller */
11054 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011055
Jeff Johnson295189b2012-06-20 16:38:30 -070011056
11057
11058 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11059 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11060 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011061 if(IS_WDI_STATUS_FAILURE(status))
11062 {
11063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11064 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11066 vos_mem_free(pWdaParams->wdaMsgParam);
11067 vos_mem_free(pWdaParams);
11068 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011069 return CONVERT_WDI2VOS_STATUS(status) ;
11070}
11071#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011072#ifdef WLAN_FEATURE_PACKET_FILTERING
11073/*
11074 * FUNCTION: WDA_8023MulticastListReqCallback
11075 *
11076 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011077void WDA_8023MulticastListReqCallback(
11078 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11079 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011080{
11081 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011083 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011084 if(NULL == pWdaParams)
11085 {
11086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011087 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011088 VOS_ASSERT(0) ;
11089 return ;
11090 }
11091
11092 vos_mem_free(pWdaParams->wdaMsgParam) ;
11093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11094 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011095 //print a msg, nothing else to do
11096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11097 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011098 return ;
11099}
Jeff Johnson295189b2012-06-20 16:38:30 -070011100/*
11101 * FUNCTION: WDA_Process8023MulticastListReq
11102 * Request to WDI to add 8023 Multicast List
11103 */
11104VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11105 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11106{
Jeff Johnson43971f52012-07-17 12:26:56 -070011107 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011108 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11109 tWDA_ReqParams *pWdaParams ;
11110 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011112 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 pwdiFltPktSetMcListReqParamsType =
11114 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11115 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11116 ) ;
11117 if(NULL == pwdiFltPktSetMcListReqParamsType)
11118 {
11119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011120 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011121 return VOS_STATUS_E_NOMEM;
11122 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011123 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11124 if(NULL == pWdaParams)
11125 {
11126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011127 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11129 return VOS_STATUS_E_NOMEM;
11130 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011131
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 //
11133 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11134 //
11135 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011136 pRcvFltMcAddrList->ulMulticastAddrCnt;
11137
11138 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11139 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11140 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11141 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11142
Jeff Johnson295189b2012-06-20 16:38:30 -070011143 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11144 {
11145 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11146 &(pRcvFltMcAddrList->multicastAddr[i]),
11147 sizeof(tSirMacAddr));
11148 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011149 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011150
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 /* Store Params pass it to WDI */
11152 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11153 pWdaParams->pWdaContext = pWDA;
11154 /* Store param pointer as passed in by caller */
11155 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 status = WDI_8023MulticastListReq(
11157 pwdiFltPktSetMcListReqParamsType,
11158 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11159 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011160 if(IS_WDI_STATUS_FAILURE(status))
11161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11163 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11164 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11165 vos_mem_free(pWdaParams->wdaMsgParam);
11166 vos_mem_free(pWdaParams);
11167 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 return CONVERT_WDI2VOS_STATUS(status) ;
11169}
Jeff Johnson295189b2012-06-20 16:38:30 -070011170/*
11171 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11172 *
11173 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011174void WDA_ReceiveFilterSetFilterReqCallback(
11175 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11176 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011177{
11178 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011180 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011181 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011182 if(NULL == pWdaParams)
11183 {
11184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011186 VOS_ASSERT(0) ;
11187 return ;
11188 }
11189
11190 vos_mem_free(pWdaParams->wdaMsgParam) ;
11191 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11192 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011193 //print a msg, nothing else to do
11194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11195 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 return ;
11197}
Jeff Johnson295189b2012-06-20 16:38:30 -070011198/*
11199 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11200 * Request to WDI to set Receive Filters
11201 */
11202VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11203 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11204{
Jeff Johnson43971f52012-07-17 12:26:56 -070011205 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011206 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11207 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11208 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11209 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11210 tWDA_ReqParams *pWdaParams ;
11211 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011213 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011214 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11215 {
11216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011217 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011218 VOS_ASSERT(0);
11219 return VOS_STATUS_E_NOMEM;
11220 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011221 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11222 if(NULL == pWdaParams)
11223 {
11224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 VOS_ASSERT(0);
11227 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11228 return VOS_STATUS_E_NOMEM;
11229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011230 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11231 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11232 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11233 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011234 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11235 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11236
11237 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11238 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011239
11240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11241 "FID %d FT %d NParams %d CT %d",
11242 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11243 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11244 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11245 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011246 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11247 {
11248 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11249 &pRcvPktFilterCfg->paramsData[i],
11250 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11252 "Proto %d Comp Flag %d \n",
11253 pwdiSetRcvPktFilterReqParamsType->
11254 wdiPktFilterCfg.paramsData[i].protocolLayer,
11255 pwdiSetRcvPktFilterReqParamsType->
11256 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11258 "Data Offset %d Data Len %d\n",
11259 pwdiSetRcvPktFilterReqParamsType->
11260 wdiPktFilterCfg.paramsData[i].dataOffset,
11261 pwdiSetRcvPktFilterReqParamsType->
11262 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11264 "CData: %d:%d:%d:%d:%d:%d\n",
11265 pwdiSetRcvPktFilterReqParamsType->
11266 wdiPktFilterCfg.paramsData[i].compareData[0],
11267 pwdiSetRcvPktFilterReqParamsType->
11268 wdiPktFilterCfg.paramsData[i].compareData[1],
11269 pwdiSetRcvPktFilterReqParamsType->
11270 wdiPktFilterCfg.paramsData[i].compareData[2],
11271 pwdiSetRcvPktFilterReqParamsType->
11272 wdiPktFilterCfg.paramsData[i].compareData[3],
11273 pwdiSetRcvPktFilterReqParamsType->
11274 wdiPktFilterCfg.paramsData[i].compareData[4],
11275 pwdiSetRcvPktFilterReqParamsType->
11276 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11278 "MData: %d:%d:%d:%d:%d:%d\n",
11279 pwdiSetRcvPktFilterReqParamsType->
11280 wdiPktFilterCfg.paramsData[i].dataMask[0],
11281 pwdiSetRcvPktFilterReqParamsType->
11282 wdiPktFilterCfg.paramsData[i].dataMask[1],
11283 pwdiSetRcvPktFilterReqParamsType->
11284 wdiPktFilterCfg.paramsData[i].dataMask[2],
11285 pwdiSetRcvPktFilterReqParamsType->
11286 wdiPktFilterCfg.paramsData[i].dataMask[3],
11287 pwdiSetRcvPktFilterReqParamsType->
11288 wdiPktFilterCfg.paramsData[i].dataMask[4],
11289 pwdiSetRcvPktFilterReqParamsType->
11290 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011291 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011292 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011293 /* Store Params pass it to WDI */
11294 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11295 pWdaParams->pWdaContext = pWDA;
11296 /* Store param pointer as passed in by caller */
11297 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11299 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11300 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011301 if(IS_WDI_STATUS_FAILURE(status))
11302 {
11303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11304 "Failure in SetFilter(),free all the memory,status %d ",status);
11305 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11306 vos_mem_free(pWdaParams->wdaMsgParam);
11307 vos_mem_free(pWdaParams);
11308 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011309 return CONVERT_WDI2VOS_STATUS(status) ;
11310}
Jeff Johnson295189b2012-06-20 16:38:30 -070011311/*
11312 * FUNCTION: WDA_FilterMatchCountReqCallback
11313 *
11314 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011315void WDA_FilterMatchCountReqCallback(
11316 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11317 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011318{
11319 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11320 tWDA_CbContext *pWDA;
11321 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11322 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11323 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11324 tANI_U8 i;
11325 vos_msg_t vosMsg;
11326
11327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011329 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11330
Jeff Johnsone7245742012-09-05 17:12:55 -070011331 if(NULL == pRcvFltPktMatchCntRsp)
11332 {
11333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011334 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011335 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011336 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011337 return ;
11338 }
11339
Jeff Johnson295189b2012-06-20 16:38:30 -070011340 if(NULL == pWdaParams)
11341 {
11342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011345 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011346 return ;
11347 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011348 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11349 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11351 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11352
11353 /* Message Header */
11354 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11355 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11356
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011357 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011358
11359 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11360 {
11361 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11362 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011364 /* VOS message wrapper */
11365 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11366 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11367 vosMsg.bodyval = 0;
11368 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11369 {
11370 /* free the mem and return */
11371 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11372 }
11373
11374 vos_mem_free(pWdaParams->wdaMsgParam) ;
11375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11376 vos_mem_free(pWdaParams) ;
11377}
Jeff Johnson295189b2012-06-20 16:38:30 -070011378/*
11379 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11380 * Request to WDI to get PC Filter Match Count
11381 */
11382VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11383{
Jeff Johnson43971f52012-07-17 12:26:56 -070011384 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011385 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11386 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11387 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011389 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11391 {
11392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011393 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011394 VOS_ASSERT(0);
11395 return VOS_STATUS_E_NOMEM;
11396 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011397 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11398 if(NULL == pWdaParams)
11399 {
11400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 VOS_ASSERT(0);
11403 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11404 return VOS_STATUS_E_NOMEM;
11405 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011406
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11408
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011409 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11410 pRcvFltPktMatchRsp->bssId,
11411 sizeof(wpt_macAddr));
11412
Jeff Johnson295189b2012-06-20 16:38:30 -070011413 /* Store Params pass it to WDI */
11414 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11415 pWdaParams->pWdaContext = pWDA;
11416 /* Store param pointer as passed in by caller */
11417 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11419 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11420 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011421 if(IS_WDI_STATUS_FAILURE(status))
11422 {
11423 /* failure returned by WDI API */
11424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11425 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11427 vos_mem_free(pWdaParams) ;
11428 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11429 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 return CONVERT_WDI2VOS_STATUS(status) ;
11432}
Jeff Johnson295189b2012-06-20 16:38:30 -070011433/*
11434 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11435 *
11436 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011437void WDA_ReceiveFilterClearFilterReqCallback(
11438 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11439 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011440{
11441 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011443 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011444/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11445 if(NULL == pWdaParams)
11446 {
11447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011448 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011449 VOS_ASSERT(0) ;
11450 return ;
11451 }
11452
11453 vos_mem_free(pWdaParams->wdaMsgParam) ;
11454 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11455 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 //print a msg, nothing else to do
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11458 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011459 return ;
11460}
Jeff Johnson295189b2012-06-20 16:38:30 -070011461/*
11462 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11463 * Request to WDI to clear Receive Filters
11464 */
11465VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11466 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11467{
Jeff Johnson43971f52012-07-17 12:26:56 -070011468 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011469 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11470 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11471 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011473 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 if(NULL == pwdiRcvFltPktClearReqParamsType)
11475 {
11476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011477 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011478 VOS_ASSERT(0);
11479 return VOS_STATUS_E_NOMEM;
11480 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011481 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11482 if(NULL == pWdaParams)
11483 {
11484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 VOS_ASSERT(0);
11487 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11488 return VOS_STATUS_E_NOMEM;
11489 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011490 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11491 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011492 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11493 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11494 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11495 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011496
11497 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011498 /* Store Params pass it to WDI */
11499 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11500 pWdaParams->pWdaContext = pWDA;
11501 /* Store param pointer as passed in by caller */
11502 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11504 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11505 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011506 if(IS_WDI_STATUS_FAILURE(status))
11507 {
11508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11509 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 return CONVERT_WDI2VOS_STATUS(status) ;
11513}
11514#endif // WLAN_FEATURE_PACKET_FILTERING
11515
Jeff Johnson295189b2012-06-20 16:38:30 -070011516/*
11517 * FUNCTION: WDA_ProcessSetPowerParamsReq
11518 * Request to WDI to set power params
11519 */
11520VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11521 tSirSetPowerParamsReq *pPowerParams)
11522{
Jeff Johnson43971f52012-07-17 12:26:56 -070011523 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11525 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011526 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 if(NULL == pwdiSetPowerParamsReqInfo)
11530 {
11531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 VOS_ASSERT(0);
11534 return VOS_STATUS_E_NOMEM;
11535 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11537 if(NULL == pWdaParams)
11538 {
11539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 VOS_ASSERT(0);
11542 vos_mem_free(pwdiSetPowerParamsReqInfo);
11543 return VOS_STATUS_E_NOMEM;
11544 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011545
Jeff Johnson295189b2012-06-20 16:38:30 -070011546
11547 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11548 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11550 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011551 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11552 pPowerParams->uListenInterval;
11553 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11554 pPowerParams->uBcastMcastFilter;
11555 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11556 pPowerParams->uEnableBET;
11557 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11558 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011559 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011560
Jeff Johnson295189b2012-06-20 16:38:30 -070011561 /* Store Params pass it to WDI */
11562 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11563 pWdaParams->pWdaContext = pWDA;
11564 /* Store param pointer as passed in by caller */
11565 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11567 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11568 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 if(IS_WDI_STATUS_FAILURE(status))
11570 {
11571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11572 "Failure in Set power params REQ WDI API, free all the memory " );
11573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11574 vos_mem_free(pWdaParams->wdaMsgParam);
11575 pWdaParams->wdaWdiApiMsgParam = NULL;
11576 pWdaParams->wdaMsgParam = NULL;
11577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011578 return CONVERT_WDI2VOS_STATUS(status) ;
11579}
11580
11581/*
11582 * FUNCTION: WDA_SetTmLevelRspCallback
11583 * Set TM Level response
11584 */
11585void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11586{
11587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11588
11589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011590 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011591
11592 if(NULL == pWdaParams)
11593 {
11594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011595 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011596 VOS_ASSERT(0) ;
11597 return ;
11598 }
11599
11600 /* Dose not need to send notification to upper layer
11601 * Just free allocated resources */
11602 if( pWdaParams != NULL )
11603 {
11604 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11605 {
11606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11607 }
11608 vos_mem_free(pWdaParams->wdaMsgParam) ;
11609 vos_mem_free(pWdaParams) ;
11610 }
11611}
11612
11613/*
11614 * FUNCTION: WDA_ProcessSetTmLevelReq
11615 * Set TM Level request
11616 */
11617VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11618 tAniSetTmLevelReq *setTmLevelReq)
11619{
11620 WDI_Status status = WDI_STATUS_SUCCESS ;
11621 tWDA_ReqParams *pWdaParams ;
11622 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11623 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11624 sizeof(WDI_SetTmLevelReqType)) ;
11625 if(NULL == wdiSetTmLevelReq)
11626 {
11627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011628 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011629 VOS_ASSERT(0);
11630 return VOS_STATUS_E_NOMEM;
11631 }
11632
11633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11634 if(NULL == pWdaParams)
11635 {
11636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011638 VOS_ASSERT(0);
11639 vos_mem_free(wdiSetTmLevelReq);
11640 return VOS_STATUS_E_NOMEM;
11641 }
11642
11643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011644 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011645
11646 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11647 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11648
11649 pWdaParams->pWdaContext = pWDA;
11650 pWdaParams->wdaMsgParam = setTmLevelReq;
11651 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11652
11653 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11654 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11655
11656 if(IS_WDI_STATUS_FAILURE(status))
11657 {
11658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11659 "Failure set thernal mitigation level free all the memory " );
11660 vos_mem_free(pWdaParams->wdaMsgParam) ;
11661 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11662 vos_mem_free(pWdaParams) ;
11663 }
11664
11665 return CONVERT_WDI2VOS_STATUS(status) ;
11666}
11667
11668VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11669 tpTxControlParams pTxCtrlParam)
11670{
11671 VOS_STATUS wdaStatus;
11672
11673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011675 if( pTxCtrlParam == NULL )
11676 {
11677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011678 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011679 return VOS_STATUS_E_FAILURE;
11680 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011681 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11682 {
11683 wdaStatus = WDA_SuspendDataTx(pWDA);
11684 }
11685 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11686 {
11687 wdaStatus = WDA_ResumeDataTx(pWDA);
11688 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011689 return wdaStatus;
11690}
11691
11692 /* FUNCTION WDA_featureCapsExchange
11693 * WDA API to invoke capability exchange between host and FW.
11694 */
11695void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11696{
11697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011698 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011699 WDI_featureCapsExchangeReq( NULL, pVosContext);
11700}
11701
11702 /* FUNCTION WDA_getHostWlanFeatCaps
11703 * Wrapper for WDI API, that will return if the feature (enum value).passed
11704 * to this API is supported or not in Host
11705 * return value
11706 * 0 - implies feature is NOT Supported
11707 * any non zero value - implies feature is SUPPORTED
11708 */
11709tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11710{
11711 return WDI_getHostWlanFeatCaps(featEnumValue);
11712}
11713
11714 /* FUNCTION WDA_getFwWlanFeatCaps
11715 * Wrapper for WDI API, that will return if the feature (enum value).passed
11716 * to this API is supported or not in FW
11717 * return value
11718 * 0 - implies feature is NOT Supported
11719 * any non zero value - implies feature is SUPPORTED
11720 */
11721tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11722{
11723 return WDI_getFwWlanFeatCaps(featEnumValue);
11724}
11725
11726/*
11727 * FUNCTION: WDA_shutdown
11728 * Shutdown WDA/WDI without handshaking with Riva.
11729 * Synchronous function.
11730 */
11731VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11732{
11733 WDI_Status wdiStatus;
11734 //tANI_U8 eventIdx = 0;
11735 VOS_STATUS status = VOS_STATUS_SUCCESS;
11736 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011737 if (NULL == pWDA)
11738 {
11739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011740 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011741 VOS_ASSERT(0);
11742 return VOS_STATUS_E_FAILURE;
11743 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011744 /* FTM mode stay START_STATE */
11745 if( (WDA_READY_STATE != pWDA->wdaState) &&
11746 (WDA_INIT_STATE != pWDA->wdaState) &&
11747 (WDA_START_STATE != pWDA->wdaState) )
11748 {
11749 VOS_ASSERT(0);
11750 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011751
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011752 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
11753 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070011754 {
11755 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011756 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011757 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011758
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 /* call WDI shutdown */
11760 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11762 {
11763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11764 "error in WDA Stop" );
11765 status = VOS_STATUS_E_FAILURE;
11766 }
11767 /* WDI stop is synchrnous, shutdown is complete when it returns */
11768 pWDA->wdaState = WDA_STOP_STATE;
11769
Jeff Johnson295189b2012-06-20 16:38:30 -070011770 /* shutdown should perform the stop & close actions. */
11771 /* Destroy the event */
11772 status = vos_event_destroy(&pWDA->txFrameEvent);
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 }
11779 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
11780 if(!VOS_IS_STATUS_SUCCESS(status))
11781 {
11782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11783 "VOS Event destroy failed - status = %d\n", status);
11784 status = VOS_STATUS_E_FAILURE;
11785 }
11786 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
11787 if(!VOS_IS_STATUS_SUCCESS(status))
11788 {
11789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11790 "VOS Event destroy failed - status = %d\n", status);
11791 status = VOS_STATUS_E_FAILURE;
11792 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011793 /* free WDA context */
11794 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
11795 if ( !VOS_IS_STATUS_SUCCESS(status) )
11796 {
11797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11798 "error in WDA close " );
11799 status = VOS_STATUS_E_FAILURE;
11800 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011801 return status;
11802}
Jeff Johnsone7245742012-09-05 17:12:55 -070011803/*
11804 * FUNCTION: WDA_stopFailed
11805 * WDA stop failed
11806 */
11807
11808void WDA_stopFailed(v_PVOID_t pVosContext)
11809{
11810 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011811 if(pWDA == NULL)
11812 {
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11814 "Could not get the WDA Context pointer" );
11815 return;
11816 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011817 pWDA->needShutdown = TRUE;
11818}
11819/*
11820 * FUNCTION: WDA_needShutdown
11821 * WDA needs a shutdown
11822 */
11823
11824v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
11825{
11826 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011827 if(pWDA == NULL)
11828 {
11829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11830 "Could not get the WDA Context pointer" );
11831 return 0;
11832 }
11833 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070011834}
11835
Mohit Khanna4a70d262012-09-11 16:30:12 -070011836#ifdef WLAN_FEATURE_11AC
11837/*
11838 * FUNCTION: WDA_SetBeaconFilterReqCallback
11839 *
11840 */
11841void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
11842{
11843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011845 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011846 if(NULL == pWdaParams)
11847 {
11848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011849 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011850 VOS_ASSERT(0) ;
11851 return ;
11852 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011853
Mohit Khanna4a70d262012-09-11 16:30:12 -070011854 vos_mem_free(pWdaParams->wdaMsgParam) ;
11855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11856 vos_mem_free(pWdaParams) ;
11857 /*
11858 * No respone required for SetBeaconFilter req so just free the request
11859 * param here
11860 */
11861
11862 return ;
11863}
11864
11865VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
11866 tUpdateVHTOpMode *pData)
11867{
11868 WDI_Status status = WDI_STATUS_SUCCESS ;
11869 tWDA_ReqParams *pWdaParams ;
11870 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
11871 sizeof(WDI_UpdateVHTOpMode)) ;
11872 if(NULL == wdiTemp)
11873 {
11874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011875 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011876 VOS_ASSERT(0);
11877 return VOS_STATUS_E_NOMEM;
11878 }
11879 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11880 if(NULL == pWdaParams)
11881 {
11882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011883 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011884 VOS_ASSERT(0);
11885 vos_mem_free(wdiTemp);
11886 return VOS_STATUS_E_NOMEM;
11887 }
11888
11889 wdiTemp->opMode = pData->opMode;
11890 wdiTemp->staId = pData->staId;
11891
11892 pWdaParams->pWdaContext = pWDA;
11893 /* Store Req pointer, as this will be used for response */
11894 pWdaParams->wdaMsgParam = (void *)pData;
11895 /* store Params pass it to WDI */
11896 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
11897
11898 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
11899
11900 if(IS_WDI_STATUS_FAILURE(status))
11901 {
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11903 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
11904 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11905 vos_mem_free(pWdaParams->wdaMsgParam);
11906 vos_mem_free(pWdaParams);
11907 }
11908 return CONVERT_WDI2VOS_STATUS(status) ;
11909}
11910#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011911
11912/*==========================================================================
11913 FUNCTION WDA_TransportChannelDebug
11914
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070011915 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011916 Display Transport Channel debugging information
11917 User may request to display DXE channel snapshot
11918 Or if host driver detects any abnormal stcuk may display
11919
11920 PARAMETERS
11921 displaySnapshot : Dispaly DXE snapshot option
11922 enableStallDetect : Enable stall detect feature
11923 This feature will take effect to data performance
11924 Not integrate till fully verification
11925
11926 RETURN VALUE
11927 NONE
11928
11929===========================================================================*/
11930void WDA_TransportChannelDebug
11931(
11932 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011933 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011934)
11935{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011936 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011937 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011938}