blob: 62bf11f67278766a39d4513692391eaa30a55db3 [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
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001392 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1393 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1397 != eSIR_SUCCESS)
1398 {
1399 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1400 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1401 goto handle_failure;
1402 }
1403
1404 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1405 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001406 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001407#ifdef WLAN_DEBUG
1408 {
1409 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001410 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1411 "****** Dumping CFG TLV ***** ");
1412 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1413 {
1414 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1415 "%02x %02x %02x %02x %02x %02x %02x %02x",
1416 tlvStructStart[i],
1417 tlvStructStart[i+1],
1418 tlvStructStart[i+2],
1419 tlvStructStart[i+3],
1420 tlvStructStart[i+4],
1421 tlvStructStart[i+5],
1422 tlvStructStart[i+6],
1423 tlvStructStart[i+7]);
1424 }
1425 /* Dump the bytes in the last line*/
1426 for (; i < wdiStartParams->usConfigBufferLen; i++)
1427 {
1428 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1429 "%02x ",tlvStructStart[i]);
1430 }
1431 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1432 "**************************** ");
1433 }
1434#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001435 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001436handle_failure:
1437 vos_mem_free(configParam);
1438 return VOS_STATUS_E_FAILURE;
1439}
Jeff Johnson295189b2012-06-20 16:38:30 -07001440/*
1441 * FUNCTION: WDA_wdiCompleteCB
1442 * call the voss call back function
1443 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001444void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001445{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1447 tWDA_CbContext *wdaContext;
1448
1449 if(NULL == pWdaParams)
1450 {
1451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001452 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001453 VOS_ASSERT(0) ;
1454 return ;
1455 }
1456
1457 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1458
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 if (NULL == wdaContext)
1460 {
1461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001462 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001463 return ;
1464 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001465
Jeff Johnson295189b2012-06-20 16:38:30 -07001466 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001467 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001468 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001470 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001471 vos_mem_free(pWdaParams);
1472
Jeff Johnson295189b2012-06-20 16:38:30 -07001473 if(WDI_STATUS_SUCCESS != status)
1474 {
1475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1476 "WDI stop callback returned failure" );
1477 VOS_ASSERT(0) ;
1478 }
1479 else
1480 {
1481 wdaContext->wdaState = WDA_STOP_STATE;
1482 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001483
Jeff Johnson295189b2012-06-20 16:38:30 -07001484 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001485 vos_WDAComplete_cback(wdaContext->pVosContext);
1486
Jeff Johnson295189b2012-06-20 16:38:30 -07001487 return ;
1488}
Jeff Johnson295189b2012-06-20 16:38:30 -07001489/*
1490 * FUNCTION: WDA_stop
1491 * call WDI_stop
1492 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001493VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1494{
1495 WDI_Status wdiStatus;
1496 VOS_STATUS status = VOS_STATUS_SUCCESS;
1497 WDI_StopReqParamsType *wdiStopReq;
1498 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001499 tWDA_ReqParams *pWdaParams ;
1500
Jeff Johnson295189b2012-06-20 16:38:30 -07001501 if (NULL == pWDA)
1502 {
1503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001504 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001505 VOS_ASSERT(0);
1506 return VOS_STATUS_E_FAILURE;
1507 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001508 if (pWDA->wdiFailed == true)
1509 {
1510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001511 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001512 return VOS_STATUS_E_ALREADY;
1513 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001514
Jeff Johnson295189b2012-06-20 16:38:30 -07001515 /* FTM mode stay START_STATE */
1516 if( (WDA_READY_STATE != pWDA->wdaState) &&
1517 (WDA_INIT_STATE != pWDA->wdaState) &&
1518 (WDA_START_STATE != pWDA->wdaState) )
1519 {
1520 VOS_ASSERT(0);
1521 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001522 wdiStopReq = (WDI_StopReqParamsType *)
1523 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1524 if(NULL == wdiStopReq)
1525 {
1526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001528 VOS_ASSERT(0);
1529 return VOS_STATUS_E_NOMEM;
1530 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001531
Jeff Johnson295189b2012-06-20 16:38:30 -07001532 wdiStopReq->wdiStopReason = reason;
1533 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001534
1535 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1536 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001537 {
1538 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001539 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001540 VOS_ASSERT(0);
1541 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001542 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001543 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001544
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001545 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1546 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001547 {
1548 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001549 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001550 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001551
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001552 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1553 pWdaParams->wdaMsgParam = NULL;
1554 pWdaParams->pWdaContext = pWDA;
1555
Jeff Johnson295189b2012-06-20 16:38:30 -07001556 /* call WDI stop */
1557 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001558 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1559
Jeff Johnson295189b2012-06-20 16:38:30 -07001560 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001564 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1565 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 status = VOS_STATUS_E_FAILURE;
1567 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001568 return status;
1569}
Jeff Johnson295189b2012-06-20 16:38:30 -07001570/*
1571 * FUNCTION: WDA_close
1572 * call WDI_close and free the WDA context
1573 */
1574VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1575{
Jeff Johnson43971f52012-07-17 12:26:56 -07001576 VOS_STATUS status = VOS_STATUS_SUCCESS;
1577 WDI_Status wstatus;
1578 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001579 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 if (NULL == wdaContext)
1581 {
1582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001583 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 return VOS_STATUS_E_FAILURE;
1585 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001586 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1587 (WDA_STOP_STATE != wdaContext->wdaState))
1588 {
1589 VOS_ASSERT(0);
1590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001591 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001592 wstatus = WDI_Close();
1593 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001594 {
1595 status = VOS_STATUS_E_FAILURE;
1596 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001597 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001598 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001599 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1600 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "WDI Sync Event destroy failed - status = %d\n", status);
1604 status = VOS_STATUS_E_FAILURE;
1605 }
1606
Jeff Johnson43971f52012-07-17 12:26:56 -07001607 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
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 Johnson43971f52012-07-17 12:26:56 -07001614 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001615 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "VOS Event destroy failed - status = %d\n", status);
1619 status = VOS_STATUS_E_FAILURE;
1620 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001621 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001622 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001623 {
1624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1625 "VOS Event destroy failed - status = %d\n", status);
1626 status = VOS_STATUS_E_FAILURE;
1627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001628 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001629 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001630 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001631 {
1632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "error in WDA close " );
1634 status = VOS_STATUS_E_FAILURE;
1635 }
1636 return status;
1637}
Jeff Johnson295189b2012-06-20 16:38:30 -07001638/*
1639 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1640 * returns 1 if the compiled version is greater than or equal to the input version
1641 */
1642
1643uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1644{
1645 VOS_STATUS status = VOS_STATUS_SUCCESS;
1646 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1647 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001648 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001649 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1650 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1651 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1652 (compiledVersion.revision >= revision)))
1653 return 1;
1654 else
1655 return 0;
1656}
Jeff Johnson295189b2012-06-20 16:38:30 -07001657/*
1658 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1659 * returns 1 if the compiled version is greater than or equal to the input version
1660 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001661uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1662{
1663 VOS_STATUS status = VOS_STATUS_SUCCESS;
1664 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1665 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001666 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1668 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1669 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1670 (reportedVersion.revision >= revision)))
1671 return 1;
1672 else
1673 return 0;
1674}
Jeff Johnson295189b2012-06-20 16:38:30 -07001675/*
1676 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1677 * Returns the version of the WCNSS WLAN API with which the HOST
1678 * device driver was compiled
1679 */
1680VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1681 tSirVersionType *pVersion)
1682{
1683 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001684 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001685 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001686 if ((NULL == pvosGCtx) || (NULL == pVersion))
1687 {
1688 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001689 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001690 VOS_ASSERT(0);
1691 return VOS_STATUS_E_FAILURE;
1692 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001693 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1694 if (NULL == pWDA )
1695 {
1696 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001697 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001698 VOS_ASSERT(0);
1699 return VOS_STATUS_E_FAILURE;
1700 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 *pVersion = pWDA->wcnssWlanCompiledVersion;
1702 return VOS_STATUS_SUCCESS;
1703}
Jeff Johnson295189b2012-06-20 16:38:30 -07001704/*
1705 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1706 * Returns the version of the WCNSS WLAN API with which the WCNSS
1707 * device driver was compiled
1708 */
1709VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1710 tSirVersionType *pVersion)
1711{
1712 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001713 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001714 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001715 if ((NULL == pvosGCtx) || (NULL == pVersion))
1716 {
1717 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001718 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001719 VOS_ASSERT(0);
1720 return VOS_STATUS_E_FAILURE;
1721 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001722 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1723 if (NULL == pWDA )
1724 {
1725 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001726 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001727 VOS_ASSERT(0);
1728 return VOS_STATUS_E_FAILURE;
1729 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 *pVersion = pWDA->wcnssWlanReportedVersion;
1731 return VOS_STATUS_SUCCESS;
1732}
Jeff Johnson295189b2012-06-20 16:38:30 -07001733/*
1734 * FUNCTION: WDA_GetWcnssSoftwareVersion
1735 * Returns the WCNSS Software version string
1736 */
1737VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1738 tANI_U8 *pVersion,
1739 tANI_U32 versionBufferSize)
1740{
1741 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001743 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001744 if ((NULL == pvosGCtx) || (NULL == pVersion))
1745 {
1746 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001747 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001748 VOS_ASSERT(0);
1749 return VOS_STATUS_E_FAILURE;
1750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001751 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1752 if (NULL == pWDA )
1753 {
1754 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001755 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001756 VOS_ASSERT(0);
1757 return VOS_STATUS_E_FAILURE;
1758 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1760 return VOS_STATUS_SUCCESS;
1761}
Jeff Johnson295189b2012-06-20 16:38:30 -07001762/*
1763 * FUNCTION: WDA_GetWcnssHardwareVersion
1764 * Returns the WCNSS Hardware version string
1765 */
1766VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1767 tANI_U8 *pVersion,
1768 tANI_U32 versionBufferSize)
1769{
1770 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001772 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001773 if ((NULL == pvosGCtx) || (NULL == pVersion))
1774 {
1775 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001776 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001777 VOS_ASSERT(0);
1778 return VOS_STATUS_E_FAILURE;
1779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001780 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1781 if (NULL == pWDA )
1782 {
1783 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001784 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001785 VOS_ASSERT(0);
1786 return VOS_STATUS_E_FAILURE;
1787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001788 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1789 return VOS_STATUS_SUCCESS;
1790}
Jeff Johnson295189b2012-06-20 16:38:30 -07001791/*
1792 * FUNCTION: WDA_WniCfgDnld
1793 * Trigger CFG Download
1794 */
1795VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1796{
1797 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001799 v_VOID_t *pFileImage = NULL;
1800 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001801 v_VOID_t *pCfgBinary = NULL;
1802 v_SIZE_t cbCfgBinarySize = 0;
1803
1804 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001805 if (NULL == pMac )
1806 {
1807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001808 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 VOS_ASSERT(0);
1810 return VOS_STATUS_E_FAILURE;
1811 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001812 /* get the number of bytes in the CFG Binary... */
1813 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1814 &cbFileImageSize );
1815 if ( VOS_STATUS_E_NOMEM != vosStatus )
1816 {
1817 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1818 "Error obtaining binary size" );
1819 goto fail;
1820 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001821 // malloc a buffer to read in the Configuration binary file.
1822 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001823 if ( NULL == pFileImage )
1824 {
1825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1826 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1827 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 vosStatus = VOS_STATUS_E_NOMEM;
1829 goto fail;
1830 }
1831
1832 /* Get the entire CFG file image... */
1833 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1834 &cbFileImageSize );
1835 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1836 {
1837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1838 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1839 cbFileImageSize );
1840 goto fail;
1841 }
1842
1843 /*
1844 * Validate the binary image. This function will return a pointer
1845 * and length where the CFG binary is located within the binary image file.
1846 */
1847 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1848 &pCfgBinary, &cbCfgBinarySize );
1849 if ( VOS_FALSE == bStatus )
1850 {
1851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1852 "Error: Cannot find STA CFG in binary image file" );
1853 vosStatus = VOS_STATUS_E_FAILURE;
1854 goto fail;
1855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001856 /*
1857 * TODO: call the config download function
1858 * for now calling the existing cfg download API
1859 */
1860 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001861 if( pFileImage != NULL )
1862 {
1863 vos_mem_free( pFileImage );
1864 }
1865 return vosStatus;
1866
1867fail:
1868 if(pCfgBinary != NULL)
1869 vos_mem_free( pFileImage );
1870
1871 return vosStatus;
1872}
Jeff Johnson295189b2012-06-20 16:38:30 -07001873/* -----------------------------------------------------------------
1874 * WDI interface
1875 * -----------------------------------------------------------------
1876 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001877/*
1878 * FUNCTION: WDA_suspendDataTxCallback
1879 * call back function called from TL after suspend Transmission
1880 */
1881VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1882 v_U8_t* ucSTAId,
1883 VOS_STATUS vosStatus)
1884{
1885 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001887 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 if (NULL == pWDA )
1889 {
1890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001891 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001892 VOS_ASSERT(0);
1893 return VOS_STATUS_E_FAILURE;
1894 }
1895 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1896 {
1897 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1898 }
1899 else
1900 {
1901 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001903 /* Trigger the event to bring the WDA TL suspend function to come
1904 * out of wait*/
1905 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1906 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1907 {
1908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1909 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1910 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001911 /* If TL suspended had timedout before this callback was called, resume back
1912 * TL.*/
1913 if (pWDA->txSuspendTimedOut)
1914 {
1915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1916 "Late TLSuspendCallback, resuming TL back again\n");
1917 WDA_ResumeDataTx(pWDA);
1918 pWDA->txSuspendTimedOut = FALSE;
1919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 return VOS_STATUS_SUCCESS;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_suspendDataTx
1924 * Update TL to suspend the data Transmission
1925 */
1926VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1927{
1928 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1929 tANI_U8 eventIdx = 0;
1930 tANI_U8 ucSTAId = 0;
1931
1932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001933 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 if (pWDA->txSuspendTimedOut)
1936 {
1937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1938 "TL suspend timedout previously, CB not called yet\n");
1939 return status;
1940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 /* Reset the event to be not signalled */
1942 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1943 if(!VOS_IS_STATUS_SUCCESS(status))
1944 {
1945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1946 "VOS Event reset failed - status = %d\n",status);
1947 return VOS_STATUS_E_FAILURE;
1948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001949 /*Indicate TL to suspend transmission for all Sta Id */
1950 ucSTAId = WLAN_ALL_STA;
1951 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1952 WDA_SuspendDataTxCallback);
1953 if(status != VOS_STATUS_SUCCESS)
1954 {
1955 return status;
1956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001957 /* Wait for the event to be set by the TL, to get the response of
1958 * suspending the TX queues, this event should be set by the Callback
1959 * function called by TL*/
1960 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1961 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1962 if(!VOS_IS_STATUS_SUCCESS(status))
1963 {
1964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1965 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001966 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001967 /* Set this flag to true when TL suspend times out, so that when TL
1968 * suspend eventually happens and calls the callback, TL can be resumed
1969 * right away by looking at this flag when true.*/
1970 pWDA->txSuspendTimedOut = TRUE;
1971 }
1972 else
1973 {
1974 pWDA->txSuspendTimedOut = FALSE;
1975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001976 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1977 {
1978 status = VOS_STATUS_SUCCESS;
1979 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001980 return status;
1981}
Jeff Johnson295189b2012-06-20 16:38:30 -07001982/*
1983 * FUNCTION: WDA_resumeDataTx
1984 * Update TL to resume the data Transmission
1985 */
1986VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1987{
1988 VOS_STATUS status = VOS_STATUS_SUCCESS;
1989 tANI_U8 ucSTAId = 0;
1990
1991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001992 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 ucSTAId = WLAN_ALL_STA;
1994 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1995 return status;
1996}
Jeff Johnson295189b2012-06-20 16:38:30 -07001997/*
1998 * FUNCTION: WDA_InitScanReqCallback
1999 * Trigger Init SCAN callback
2000 */
2001void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2002{
2003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2004 tWDA_CbContext *pWDA;
2005 tInitScanParams *pWDA_ScanParam ;
2006 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 if(NULL == pWdaParams)
2010 {
2011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 VOS_ASSERT(0) ;
2014 return ;
2015 }
2016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2017 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002018 if(NULL == pWDA_ScanParam)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002021 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002022 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2024 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 return ;
2026 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002027 if(WDI_STATUS_SUCCESS != wdiStatus)
2028 {
2029 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 if(VOS_STATUS_SUCCESS != status)
2031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002033 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 }
2035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002036 /* free WDI command buffer */
2037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002038 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002039
Jeff Johnson295189b2012-06-20 16:38:30 -07002040
2041 /* assign status to scan params */
2042 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002043 /* send SCAN RSP message back to PE */
2044 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 return ;
2046}
2047
2048/*
2049 * FUNCTION: WDA_ProcessInitScanReq
2050 * Trigger Init SCAN in DAL
2051 */
2052VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2053 tInitScanParams *initScanParams)
2054{
2055 WDI_Status status = WDI_STATUS_SUCCESS ;
2056 WDI_InitScanReqParamsType *wdiInitScanParam =
2057 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2058 sizeof(WDI_InitScanReqParamsType)) ;
2059 tWDA_ReqParams *pWdaParams;
2060 tANI_U8 i = 0;
2061
2062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002063 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002064 if(NULL == wdiInitScanParam)
2065 {
2066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002067 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002068 VOS_ASSERT(0);
2069 return VOS_STATUS_E_NOMEM;
2070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002071 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2072 if(NULL == pWdaParams)
2073 {
2074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002075 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 VOS_ASSERT(0);
2077 vos_mem_free(wdiInitScanParam);
2078 return VOS_STATUS_E_NOMEM;
2079 }
2080
2081 /* Copy init Scan params to WDI structure */
2082 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2083 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2084 sizeof(tSirMacAddr)) ;
2085 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2086 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2087 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2088#ifdef WLAN_FEATURE_P2P
2089 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2090 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2091#else
2092 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2093 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2094#endif
2095 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2096 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2098 {
2099 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2100 initScanParams->scanEntry.bssIdx[i] ;
2101 }
2102
2103 /* if Frame length, copy macMgmtHdr or WDI structure */
2104 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2105 {
2106 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2107 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2108 }
2109 wdiInitScanParam->wdiReqStatusCB = NULL ;
2110
Jeff Johnson295189b2012-06-20 16:38:30 -07002111 /* Store Init Req pointer, as this will be used for response */
2112 pWdaParams->pWdaContext = pWDA;
2113 pWdaParams->wdaMsgParam = initScanParams;
2114 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 /* first try to suspend TX */
2116 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002117 if(WDI_STATUS_SUCCESS != status)
2118 {
2119 goto handleWdiFailure;
2120 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 /* call DAL API to pass init scan request to DAL */
2122 status = WDI_InitScanReq(wdiInitScanParam,
2123 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 if(IS_WDI_STATUS_FAILURE(status))
2125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2127 "error in WDA Init Scan, Resume Tx " );
2128 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 VOS_ASSERT(0) ;
2130
2131 goto handleWdiFailure;
2132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002133 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002134handleWdiFailure:
2135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2136 "Failure in WDI Api, free all the memory " );
2137 /* free WDI command buffer */
2138 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2139 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 /* send Failure to PE */
2141 initScanParams->status = eSIR_FAILURE ;
2142 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002143 return CONVERT_WDI2VOS_STATUS(status) ;
2144}
2145
Jeff Johnson295189b2012-06-20 16:38:30 -07002146/*
2147 * FUNCTION: WDA_StartScanReqCallback
2148 * send Start SCAN RSP back to PE
2149 */
2150void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2151 void* pUserData)
2152{
2153 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2154 tWDA_CbContext *pWDA;
2155 tStartScanParams *pWDA_ScanParam;
2156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002157 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 if(NULL == pWdaParams)
2159 {
2160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002161 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002162 VOS_ASSERT(0) ;
2163 return ;
2164 }
2165 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2166 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 if(NULL == pWDA_ScanParam)
2168 {
2169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002170 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002171 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002172 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002173 return ;
2174 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2176 {
2177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002178 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002179 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002180 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002181 return ;
2182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2184 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002185
Jeff Johnson295189b2012-06-20 16:38:30 -07002186
2187 /* assign status to scan params */
2188 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002189 /* send SCAN RSP message back to PE */
2190 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 return ;
2192}
2193
Jeff Johnson295189b2012-06-20 16:38:30 -07002194/*
2195 * FUNCTION: WDA_ProcessStartScanReq
2196 * Trigger start SCAN in WDI
2197 */
2198VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2199 tStartScanParams *startScanParams)
2200{
2201 WDI_Status status = WDI_STATUS_SUCCESS;
2202 WDI_StartScanReqParamsType *wdiStartScanParams =
2203 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2204 sizeof(WDI_StartScanReqParamsType)) ;
2205 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002207 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 if(NULL == wdiStartScanParams)
2209 {
2210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002212 VOS_ASSERT(0);
2213 return VOS_STATUS_E_NOMEM;
2214 }
2215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2216 if(NULL == pWdaParams)
2217 {
2218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 VOS_ASSERT(0);
2221 vos_mem_free(wdiStartScanParams);
2222 return VOS_STATUS_E_NOMEM;
2223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 /* Copy init Scan params to WDI structure */
2225 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2226 wdiStartScanParams->wdiReqStatusCB = NULL ;
2227
Jeff Johnson295189b2012-06-20 16:38:30 -07002228 /* Store Init Req pointer, as this will be used for response */
2229 /* store Params pass it to WDI */
2230 pWdaParams->pWdaContext = pWDA;
2231 pWdaParams->wdaMsgParam = startScanParams;
2232 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 /* call DAL API to pass init scan request to DAL */
2234 status = WDI_StartScanReq(wdiStartScanParams,
2235 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002236 /* failure returned by WDI API */
2237 if(IS_WDI_STATUS_FAILURE(status))
2238 {
2239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2240 "Failure in Start Scan WDI API, free all the memory "
2241 "It should be due to previous abort scan." );
2242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2243 vos_mem_free(pWdaParams) ;
2244 startScanParams->status = eSIR_FAILURE ;
2245 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 return CONVERT_WDI2VOS_STATUS(status) ;
2248}
Jeff Johnson295189b2012-06-20 16:38:30 -07002249/*
2250 * FUNCTION: WDA_EndScanReqCallback
2251 * END SCAN callback
2252 */
2253void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2254{
2255 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2256 tWDA_CbContext *pWDA;
2257 tEndScanParams *endScanParam;
2258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002259 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002260 if(NULL == pWdaParams)
2261 {
2262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002263 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 VOS_ASSERT(0) ;
2265 return ;
2266 }
2267 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2268 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002269 if(NULL == endScanParam)
2270 {
2271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002272 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002274 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2275 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 return ;
2277 }
2278
2279 /* Free WDI command buffer */
2280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2281 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 /* assign status to scan params */
2283 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002284 /* send response back to PE */
2285 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2286 return ;
2287}
2288
Jeff Johnson295189b2012-06-20 16:38:30 -07002289/*
2290 * FUNCTION: WDA_ProcessEndScanReq
2291 * Trigger END SCAN in WDI
2292 */
2293VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2294 tEndScanParams *endScanParams)
2295{
2296 WDI_Status status = WDI_STATUS_SUCCESS;
2297 WDI_EndScanReqParamsType *wdiEndScanParams =
2298 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2299 sizeof(WDI_EndScanReqParamsType)) ;
2300 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 if(NULL == wdiEndScanParams)
2304 {
2305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002307 VOS_ASSERT(0);
2308 return VOS_STATUS_E_NOMEM;
2309 }
2310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2311 if(NULL == pWdaParams)
2312 {
2313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002315 VOS_ASSERT(0);
2316 vos_mem_free(wdiEndScanParams);
2317 return VOS_STATUS_E_NOMEM;
2318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002319 /* Copy init Scan params to WDI structure */
2320 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2321 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002322 /* Store Init Req pointer, as this will be used for response */
2323 /* store Params pass it to WDI */
2324 pWdaParams->pWdaContext = pWDA;
2325 pWdaParams->wdaMsgParam = endScanParams;
2326 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002327 /* call DAL API to pass init scan request to DAL */
2328 status = WDI_EndScanReq(wdiEndScanParams,
2329 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 if(IS_WDI_STATUS_FAILURE(status))
2331 {
2332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2333 "Failure in End Scan WDI API, free all the memory "
2334 "It should be due to previous abort scan." );
2335 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2336 vos_mem_free(pWdaParams) ;
2337 endScanParams->status = eSIR_FAILURE ;
2338 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 return CONVERT_WDI2VOS_STATUS(status) ;
2341}
Jeff Johnson295189b2012-06-20 16:38:30 -07002342/*
2343 * FUNCTION: WDA_FinishScanReqCallback
2344 * Trigger Finish SCAN callback
2345 */
2346void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2347{
2348 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2349 tWDA_CbContext *pWDA;
2350 tFinishScanParams *finishScanParam;
2351 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002353 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 if(NULL == pWdaParams)
2355 {
2356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002357 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002358 VOS_ASSERT(0) ;
2359 return ;
2360 }
2361
2362 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2363 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002364 if(NULL == finishScanParam)
2365 {
2366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002367 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002368 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002369 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2370 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 return ;
2372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2374 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002375 /*
2376 * Now Resume TX, if we reached here means, TX is already suspended, we
2377 * have to resume it unconditionaly
2378 */
2379 status = WDA_ResumeDataTx(pWDA) ;
2380
2381 if(VOS_STATUS_SUCCESS != status)
2382 {
2383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002384 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002385 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2388 return ;
2389}
Jeff Johnson295189b2012-06-20 16:38:30 -07002390/*
2391 * FUNCTION: WDA_ProcessFinshScanReq
2392 * Trigger Finish SCAN in WDI
2393 */
2394VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2395 tFinishScanParams *finishScanParams)
2396{
2397 WDI_Status status = WDI_STATUS_SUCCESS;
2398 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2399 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2400 sizeof(WDI_FinishScanReqParamsType)) ;
2401 tWDA_ReqParams *pWdaParams ;
2402 tANI_U8 i = 0;
2403 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002404 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002405 if(NULL == wdiFinishScanParams)
2406 {
2407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002408 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002409 VOS_ASSERT(0);
2410 return VOS_STATUS_E_NOMEM;
2411 }
2412 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2413 if(NULL == pWdaParams)
2414 {
2415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002416 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 VOS_ASSERT(0);
2418 vos_mem_free(wdiFinishScanParams);
2419 return VOS_STATUS_E_NOMEM;
2420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 /* Copy init Scan params to WDI structure */
2422 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2423 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2424 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002425 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2426 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2427 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2428 finishScanParams->frameLength ;
2429 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2430 finishScanParams->currentOperChannel ;
2431 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2432 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2433 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2435 {
2436 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2437 finishScanParams->scanEntry.bssIdx[i] ;
2438 }
2439
2440
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 /* if Frame length, copy macMgmtHdr ro WDI structure */
2442 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2443 {
2444 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2445 &finishScanParams->macMgmtHdr,
2446 sizeof(WDI_MacMgmtHdr)) ;
2447 }
2448 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 /* Store Init Req pointer, as this will be used for response */
2450 /* store Params pass it to WDI */
2451 pWdaParams->pWdaContext = pWDA;
2452 pWdaParams->wdaMsgParam = finishScanParams;
2453 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 /* call DAL API to pass init scan request to DAL */
2455 status = WDI_FinishScanReq(wdiFinishScanParams,
2456 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002457
Jeff Johnson295189b2012-06-20 16:38:30 -07002458
2459 /*
2460 * WDI API returns failure..
2461 */
2462 if(IS_WDI_STATUS_FAILURE( status))
2463 {
2464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2465 "Failure in Finish Scan WDI API, free all the memory " );
2466 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2467 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 finishScanParams->status = eSIR_FAILURE ;
2469 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2470 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002471 return CONVERT_WDI2VOS_STATUS(status) ;
2472}
Jeff Johnson295189b2012-06-20 16:38:30 -07002473/*---------------------------------------------------------------------
2474 * ASSOC API's
2475 *---------------------------------------------------------------------
2476 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002477/*
2478 * FUNCTION: WDA_JoinReqCallback
2479 * Trigger Init SCAN callback
2480 */
2481void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2482{
2483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2484 tWDA_CbContext *pWDA;
2485 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002487 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002488 if(NULL == pWdaParams)
2489 {
2490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002491 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002492 VOS_ASSERT(0) ;
2493 return ;
2494 }
2495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2496 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2498 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 /* reset macBSSID */
2500 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 /* reset macSTASelf */
2502 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002503 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 return ;
2506}
Jeff Johnson295189b2012-06-20 16:38:30 -07002507/*
2508 * FUNCTION: WDA_ProcessJoinReq
2509 * Trigger Join REQ in WDI
2510 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002511VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2512 tSwitchChannelParams* joinReqParam)
2513{
2514 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002515 WDI_JoinReqParamsType *wdiJoinReqParam =
2516 (WDI_JoinReqParamsType *)vos_mem_malloc(
2517 sizeof(WDI_JoinReqParamsType)) ;
2518 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 if(NULL == wdiJoinReqParam)
2522 {
2523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002526 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002527 return VOS_STATUS_E_NOMEM;
2528 }
2529 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2530 if(NULL == pWdaParams)
2531 {
2532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002533 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 VOS_ASSERT(0);
2535 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002536 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002537 return VOS_STATUS_E_NOMEM;
2538 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002539
2540 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2541 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2542 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2543 {
2544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2545 "%s: received join request when BSSID or self-STA is NULL "
2546 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002547 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002548 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2549 VOS_ASSERT(0);
2550 vos_mem_free(wdiJoinReqParam);
2551 vos_mem_free(pWdaParams);
2552 joinReqParam->status = eSIR_FAILURE ;
2553 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2554 return VOS_STATUS_E_INVAL;
2555 }
2556
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 /* copy the BSSID for pWDA */
2558 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2559 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002560 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2561 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2563 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002564#ifdef WLAN_FEATURE_VOWIFI
2565 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2566 joinReqParam->maxTxPower ;
2567#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2569 joinReqParam->localPowerConstraint ;
2570#endif
2571 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2572 joinReqParam->secondaryChannelOffset ;
2573 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2574
2575 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 /* Store Init Req pointer, as this will be used for response */
2577 /* store Params pass it to WDI */
2578 pWdaParams->pWdaContext = pWDA;
2579 pWdaParams->wdaMsgParam = joinReqParam;
2580 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002581 status = WDI_JoinReq(wdiJoinReqParam,
2582 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002583 if(IS_WDI_STATUS_FAILURE(status))
2584 {
2585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2586 "Failure in Join WDI API, free all the memory " );
2587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2588 vos_mem_free(pWdaParams) ;
2589 joinReqParam->status = eSIR_FAILURE ;
2590 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 return CONVERT_WDI2VOS_STATUS(status) ;
2593}
Jeff Johnson295189b2012-06-20 16:38:30 -07002594/*
2595 * FUNCTION: WDA_SwitchChannelReqCallback
2596 * send Switch channel RSP back to PE
2597 */
2598void WDA_SwitchChannelReqCallback(
2599 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2600{
2601 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2602 tWDA_CbContext *pWDA;
2603 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002605 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 if(NULL == pWdaParams)
2607 {
2608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002609 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 VOS_ASSERT(0) ;
2611 return ;
2612 }
2613 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2614 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2615
2616#ifdef WLAN_FEATURE_VOWIFI
2617 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2618#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2620 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002621 pSwitchChanParams->status =
2622 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 return ;
2625}
Jeff Johnson295189b2012-06-20 16:38:30 -07002626/*
2627 * FUNCTION: WDA_ProcessChannelSwitchReq
2628 * Request to WDI to switch channel REQ params.
2629 */
2630VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2631 tSwitchChannelParams *pSwitchChanParams)
2632{
2633 WDI_Status status = WDI_STATUS_SUCCESS ;
2634 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2635 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2636 sizeof(WDI_SwitchChReqParamsType)) ;
2637 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002639 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002640 if(NULL == wdiSwitchChanParam)
2641 {
2642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002643 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002644 VOS_ASSERT(0);
2645 return VOS_STATUS_E_NOMEM;
2646 }
2647 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2648 if(NULL == pWdaParams)
2649 {
2650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002651 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002652 VOS_ASSERT(0);
2653 vos_mem_free(wdiSwitchChanParam);
2654 return VOS_STATUS_E_NOMEM;
2655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002656 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2657#ifndef WLAN_FEATURE_VOWIFI
2658 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2659 pSwitchChanParams->localPowerConstraint;
2660#endif
2661 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2662 pSwitchChanParams->secondaryChannelOffset;
2663 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 /* Store req pointer, as this will be used for response */
2665 /* store Params pass it to WDI */
2666 pWdaParams->pWdaContext = pWDA;
2667 pWdaParams->wdaMsgParam = pSwitchChanParams;
2668 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002669#ifdef WLAN_FEATURE_VOWIFI
2670 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2671 = pSwitchChanParams->maxTxPower;
2672 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2673 pSwitchChanParams ->selfStaMacAddr,
2674 sizeof(tSirMacAddr));
2675#endif
2676 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2677 pSwitchChanParams->bssId,
2678 sizeof(tSirMacAddr));
2679
2680 status = WDI_SwitchChReq(wdiSwitchChanParam,
2681 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002682 if(IS_WDI_STATUS_FAILURE(status))
2683 {
2684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2685 "Failure in process channel switch Req WDI API, free all the memory " );
2686 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2687 vos_mem_free(pWdaParams) ;
2688 pSwitchChanParams->status = eSIR_FAILURE ;
2689 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002691 return CONVERT_WDI2VOS_STATUS(status) ;
2692}
Jeff Johnson295189b2012-06-20 16:38:30 -07002693/*
2694 * FUNCTION: WDA_ConfigBssReqCallback
2695 * config BSS Req Callback, called by WDI
2696 */
2697void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2698 ,void* pUserData)
2699{
2700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2701 tWDA_CbContext *pWDA;
2702 tAddBssParams *configBssReqParam;
2703 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002705 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002706 if(NULL == pWdaParams)
2707 {
2708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002709 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 VOS_ASSERT(0) ;
2711 return ;
2712 }
2713 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2714 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2715 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002716 configBssReqParam->status =
2717 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2719 {
2720 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2721 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002722 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2723 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2724 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2725
2726 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2727 {
2728 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2729 {
2730 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2731 staConfigBssParam->staType = STA_ENTRY_BSSID;
2732 }
2733 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2734 (staConfigBssParam->staType == STA_ENTRY_SELF))
2735 {
2736 /* This is the 1st add BSS Req for the BTAMP STA */
2737 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2738 staConfigBssParam->staType = STA_ENTRY_BSSID;
2739 }
2740 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2741 (staConfigBssParam->staType == STA_ENTRY_PEER))
2742 {
2743 /* This is the 2nd ADD BSS Request that is sent
2744 * on the BTAMP STA side. The Sta type is
2745 * set to STA_ENTRY_PEER here.*/
2746 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2747 }
2748 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2749 (staConfigBssParam->staType == STA_ENTRY_SELF))
2750 {
2751 /* statype is already set by PE.
2752 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2753 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2754 staConfigBssParam->staType = STA_ENTRY_BSSID;
2755 }
2756 else
2757 {
2758 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2759 staConfigBssParam->staType = STA_ENTRY_PEER;
2760 }
2761 }
2762 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2763 {
2764 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2765 staConfigBssParam->staType = STA_ENTRY_SELF;
2766 }
2767 else
2768 {
2769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2770 "Invalid operation mode specified");
2771 VOS_ASSERT(0);
2772 }
2773
2774 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002775 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2779 sizeof(tSirMacAddr));
2780 staConfigBssParam->txChannelWidthSet =
2781 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2783 staConfigBssParam->htCapable)
2784 {
2785 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2786 wdiConfigBssRsp->ucBSSIdx;
2787 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2788 WDA_VALID_STA_INDEX ;
2789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2791 wdiConfigBssRsp->ucBSSIdx,
2792 wdiConfigBssRsp->ucSTAIdx))
2793 {
2794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002795 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_ASSERT(0) ;
2797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0) ;
2803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002804#ifdef WLAN_FEATURE_VOWIFI
2805 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2806#endif
2807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2809 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 return ;
2812}
Jeff Johnson295189b2012-06-20 16:38:30 -07002813/*
2814 * FUNCTION: WDA_UpdateEdcaParamsForAC
2815 * Update WDI EDCA params with PE edca params
2816 */
2817void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2818 WDI_EdcaParamRecord *wdiEdcaParam,
2819 tSirMacEdcaParamRecord *macEdcaParam)
2820{
2821 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2822 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2823 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2824 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2825 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2826 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2827}
Jeff Johnson295189b2012-06-20 16:38:30 -07002828/*
2829 * FUNCTION: WDA_ProcessConfigBssReq
2830 * Configure BSS before starting Assoc with AP
2831 */
2832VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2833 tAddBssParams* configBssReqParam)
2834{
2835 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002836 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2837 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2838 sizeof(WDI_ConfigBSSReqParamsType)) ;
2839 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002841 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002842 if(NULL == wdiConfigBssReqParam)
2843 {
2844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002846 VOS_ASSERT(0);
2847 return VOS_STATUS_E_NOMEM;
2848 }
2849 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2850 if(NULL == pWdaParams)
2851 {
2852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002853 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 VOS_ASSERT(0);
2855 vos_mem_free(wdiConfigBssReqParam);
2856 return VOS_STATUS_E_NOMEM;
2857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002858 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2860 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 /* Store Init Req pointer, as this will be used for response */
2862 /* store Params pass it to WDI */
2863 pWdaParams->pWdaContext = pWDA;
2864 pWdaParams->wdaMsgParam = configBssReqParam;
2865 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2867 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 if(IS_WDI_STATUS_FAILURE(status))
2869 {
2870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2871 "Failure in Config BSS WDI API, free all the memory " );
2872 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2873 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002877 return CONVERT_WDI2VOS_STATUS(status) ;
2878}
Jeff Johnson295189b2012-06-20 16:38:30 -07002879#ifdef ENABLE_HAL_COMBINED_MESSAGES
2880/*
2881 * FUNCTION: WDA_PostAssocReqCallback
2882 * Post ASSOC req callback, send RSP back to PE
2883 */
2884void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2885 void* pUserData)
2886{
2887 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2888 tPostAssocParams *postAssocReqParam =
2889 (tPostAssocParams *)pWDA->wdaMsgParam ;
2890 /*STA context within the BSS Params*/
2891 tAddStaParams *staPostAssocParam =
2892 &postAssocReqParam->addBssParams.staContext ;
2893 /*STA Params for self STA*/
2894 tAddStaParams *selfStaPostAssocParam =
2895 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002897 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002898 postAssocReqParam->status =
2899 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2901 {
2902 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2903 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2904 sizeof(tSirMacAddr)) ;
2905 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2906 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2907 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002908 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2909 }
2910 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2911 pWDA->wdaWdiApiMsgParam = NULL;
2912 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002913 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 return ;
2915}
Jeff Johnson295189b2012-06-20 16:38:30 -07002916/*
2917 * FUNCTION: WDA_ProcessPostAssocReq
2918 * Trigger POST ASSOC processing in WDI
2919 */
2920VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2921 tPostAssocParams *postAssocReqParam)
2922{
Jeff Johnson295189b2012-06-20 16:38:30 -07002923 WDI_Status status = WDI_STATUS_SUCCESS ;
2924
2925 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2926 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2927 sizeof(WDI_PostAssocReqParamsType)) ;
2928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002929 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002930
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 if(NULL == wdiPostAssocReqParam)
2932 {
2933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002935 VOS_ASSERT(0);
2936 return VOS_STATUS_E_NOMEM;
2937 }
2938
2939 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2940 {
2941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002942 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002943 VOS_ASSERT(0);
2944 return VOS_STATUS_E_FAILURE;
2945 }
2946
Jeff Johnson295189b2012-06-20 16:38:30 -07002947 /* update BSS params into WDI structure */
2948 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2949 &postAssocReqParam->addBssParams) ;
2950 /* update STA params into WDI structure */
2951 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2952 &postAssocReqParam->addStaParams) ;
2953
2954 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2955 postAssocReqParam->addBssParams.highPerformance;
2956 WDA_UpdateEdcaParamsForAC(pWDA,
2957 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2958 &postAssocReqParam->addBssParams.acbe);
2959 WDA_UpdateEdcaParamsForAC(pWDA,
2960 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2961 &postAssocReqParam->addBssParams.acbk);
2962 WDA_UpdateEdcaParamsForAC(pWDA,
2963 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2964 &postAssocReqParam->addBssParams.acvi);
2965 WDA_UpdateEdcaParamsForAC(pWDA,
2966 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2967 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 /* Store Init Req pointer, as this will be used for response */
2969 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 /* store Params pass it to WDI */
2971 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002972 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2973 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002974 if(IS_WDI_STATUS_FAILURE(status))
2975 {
2976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2977 "Failure in Post Assoc WDI API, free all the memory " );
2978 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2979 pWDA->wdaWdiApiMsgParam = NULL;
2980 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 return CONVERT_WDI2VOS_STATUS(status) ;
2985}
2986#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002987/*
2988 * FUNCTION: WDA_AddStaReqCallback
2989 * ADD STA req callback, send RSP back to PE
2990 */
2991void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2992 void* pUserData)
2993{
2994 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2995 tWDA_CbContext *pWDA;
2996 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 if(NULL == pWdaParams)
3000 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003002 VOS_ASSERT(0) ;
3003 return ;
3004 }
3005 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3006 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003007 addStaReqParam->status =
3008 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3010 {
3011 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3012 /*TODO: UMAC structure doesn't have these fields*/
3013 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3014 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3015 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3016 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3017 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3018 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003019#ifdef FEATURE_WLAN_TDLS
3020 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3021 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3022#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003023 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003024#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 {
3026 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3027 wdiConfigStaRsp->ucBssIdx;
3028 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3029 WDA_VALID_STA_INDEX ;
3030 }
3031 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3032 {
3033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003034 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003035 VOS_ASSERT(0) ;
3036 return ;
3037 }
3038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003039 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3040 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003041 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 return ;
3043}
Jeff Johnson295189b2012-06-20 16:38:30 -07003044/*
3045 * FUNCTION: WDA_ConfigStaReq
3046 * Trigger Config STA processing in WDI
3047 */
3048VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3049 tAddStaParams *addStaReqParam)
3050{
Jeff Johnson295189b2012-06-20 16:38:30 -07003051 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3053 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3054 sizeof(WDI_ConfigSTAReqParamsType)) ;
3055 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003057 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003058 if(NULL == wdiConfigStaReqParam)
3059 {
3060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003062 VOS_ASSERT(0);
3063 return VOS_STATUS_E_NOMEM;
3064 }
3065 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3066 if(NULL == pWdaParams)
3067 {
3068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 VOS_ASSERT(0);
3071 vos_mem_free(wdiConfigStaReqParam);
3072 return VOS_STATUS_E_NOMEM;
3073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003074 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 /* update STA params into WDI structure */
3076 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3077 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 /* Store Init Req pointer, as this will be used for response */
3079 /* store Params pass it to WDI */
3080 pWdaParams->pWdaContext = pWDA;
3081 pWdaParams->wdaMsgParam = addStaReqParam;
3082 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3084 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003085 if(IS_WDI_STATUS_FAILURE(status))
3086 {
3087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3088 "Failure in Config STA WDI API, free all the memory " );
3089 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3090 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3093 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003094 return CONVERT_WDI2VOS_STATUS(status) ;
3095}
Jeff Johnson295189b2012-06-20 16:38:30 -07003096/*
3097 * FUNCTION: WDA_DelBSSReqCallback
3098 * Dens DEL BSS RSP back to PE
3099 */
3100void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3101 void* pUserData)
3102{
3103 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3104 tWDA_CbContext *pWDA;
3105 tDeleteBssParams *delBssReqParam;
3106 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003108 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003109 if(NULL == pWdaParams)
3110 {
3111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003112 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003113 VOS_ASSERT(0) ;
3114 return ;
3115 }
3116 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3117 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3120 {
3121 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3122 sizeof(tSirMacAddr)) ;
3123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003124 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3125 {
3126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003127 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 VOS_ASSERT(0) ;
3129 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3131 {
3132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003133 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003134 VOS_ASSERT(0) ;
3135 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003136 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3137 {
3138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003139 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003140 VOS_ASSERT(0) ;
3141 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003142 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3143 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003144 /* reset the the system role*/
3145 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3146
3147 /* Reset the BA related information */
3148 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3149 {
3150 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3151 {
3152 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3153 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3154 /* Reset framesTxed counters here */
3155 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3156 {
3157 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3158 }
3159 }
3160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 return ;
3163}
3164
Jeff Johnson295189b2012-06-20 16:38:30 -07003165/*
3166 * FUNCTION: WDA_ProcessDelBssReq
3167 * Init DEL BSS req with WDI
3168 */
3169VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3170 tDeleteBssParams *delBssParam)
3171{
3172 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003173 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3174 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3175 sizeof(WDI_DelBSSReqParamsType)) ;
3176 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003178 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003179 if(NULL == wdiDelBssReqParam)
3180 {
3181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003183 VOS_ASSERT(0);
3184 return VOS_STATUS_E_NOMEM;
3185 }
3186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3187 if(NULL == pWdaParams)
3188 {
3189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 VOS_ASSERT(0);
3192 vos_mem_free(wdiDelBssReqParam);
3193 return VOS_STATUS_E_NOMEM;
3194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003195 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3196 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3197
3198 /* Store Init Req pointer, as this will be used for response */
3199 /* store Params pass it to WDI */
3200 pWdaParams->pWdaContext = pWDA;
3201 pWdaParams->wdaMsgParam = delBssParam;
3202 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 status = WDI_DelBSSReq(wdiDelBssReqParam,
3204 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003205 if(IS_WDI_STATUS_FAILURE(status))
3206 {
3207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3208 "Failure in Del BSS WDI API, free all the memory " );
3209 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3210 vos_mem_free(pWdaParams) ;
3211 delBssParam->status = eSIR_FAILURE ;
3212 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3213 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 return CONVERT_WDI2VOS_STATUS(status) ;
3215}
Jeff Johnson295189b2012-06-20 16:38:30 -07003216/*
3217 * FUNCTION: WDA_DelSTAReqCallback
3218 * Dens DEL STA RSP back to PE
3219 */
3220void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3221 void* pUserData)
3222{
3223 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3224 tWDA_CbContext *pWDA;
3225 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003227 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003228 if(NULL == pWdaParams)
3229 {
3230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003231 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003232 VOS_ASSERT(0) ;
3233 return ;
3234 }
3235 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3236 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003237 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3239 {
3240 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3241 {
3242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003243 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003244 VOS_ASSERT(0) ;
3245 }
3246 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3247 }
3248 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3249 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 /*Reset the BA information corresponding to this STAIdx */
3251 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3252 WDA_INVALID_STA_INDEX;
3253 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3254
3255 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 return ;
3257}
Jeff Johnson295189b2012-06-20 16:38:30 -07003258/*
3259 * FUNCTION: WDA_ProcessDelStaReq
3260 * Init DEL STA req with WDI
3261 */
3262VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3263 tDeleteStaParams *delStaParam)
3264{
3265 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003266 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3267 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3268 sizeof(WDI_DelSTAReqParamsType)) ;
3269 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003271 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003272 if(NULL == wdiDelStaReqParam)
3273 {
3274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003275 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 VOS_ASSERT(0);
3277 return VOS_STATUS_E_NOMEM;
3278 }
3279 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3280 if(NULL == pWdaParams)
3281 {
3282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003283 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 VOS_ASSERT(0);
3285 vos_mem_free(wdiDelStaReqParam);
3286 return VOS_STATUS_E_NOMEM;
3287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003288 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3289 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003290 /* Store Init Req pointer, as this will be used for response */
3291 /* store Params pass it to WDI */
3292 pWdaParams->pWdaContext = pWDA;
3293 pWdaParams->wdaMsgParam = delStaParam;
3294 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003295 status = WDI_DelSTAReq(wdiDelStaReqParam,
3296 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003297 if(IS_WDI_STATUS_FAILURE(status))
3298 {
3299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3300 "Failure in Del STA WDI API, free all the memory status = %d",
3301 status );
3302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3303 vos_mem_free(pWdaParams) ;
3304 delStaParam->status = eSIR_FAILURE ;
3305 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3306 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003307 return CONVERT_WDI2VOS_STATUS(status) ;
3308}
Jeff Johnson295189b2012-06-20 16:38:30 -07003309void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3310{
3311 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3312 tWDA_CbContext *pWDA;
3313 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0) ;
3321 return ;
3322 }
3323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3324 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003325 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3326 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003327 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3328 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3329 pwdiAddSTASelfRsp->macSelfSta,
3330 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003331 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 return ;
3333}
Jeff Johnson295189b2012-06-20 16:38:30 -07003334/*
3335 * FUNCTION: WDA_ProcessAddStaSelfReq
3336 *
3337 */
3338VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3339{
3340 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003341 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3343 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3344 sizeof(WDI_AddSTASelfReqParamsType)) ;
3345 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003347 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003348 if( NULL == wdiAddStaSelfReq )
3349 {
3350 VOS_ASSERT( 0 );
3351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003352 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003353 return( VOS_STATUS_E_NOMEM );
3354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 if( NULL == pWdaParams )
3357 {
3358 VOS_ASSERT( 0 );
3359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003360 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 vos_mem_free(wdiAddStaSelfReq) ;
3362 return( VOS_STATUS_E_NOMEM );
3363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003364 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3366 /* Store Init Req pointer, as this will be used for response */
3367 /* store Params pass it to WDI */
3368 pWdaParams->pWdaContext = pWDA;
3369 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3370 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003371 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003372
Jeff Johnson43971f52012-07-17 12:26:56 -07003373 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003374 {
3375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3376 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003377 wstatus );
3378 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3380 vos_mem_free(pWdaParams) ;
3381 pAddStaSelfReq->status = eSIR_FAILURE ;
3382 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3383 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003384 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385}
Jeff Johnson295189b2012-06-20 16:38:30 -07003386/*
3387 * FUNCTION: WDA_DelSTASelfRespCallback
3388 *
3389 */
3390void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3391 wdiDelStaSelfRspParams , void* pUserData)
3392{
3393 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3394 tWDA_CbContext *pWDA;
3395 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003397 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003398 if (NULL == pWdaParams)
3399 {
3400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003401 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003402 VOS_ASSERT(0);
3403 return;
3404 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003405 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3406 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003407 delStaSelfParams->status =
3408 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3409
3410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3411 vos_mem_free(pWdaParams) ;
3412
3413 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003414 return ;
3415}
Jeff Johnson295189b2012-06-20 16:38:30 -07003416/*
3417 * FUNCTION: WDA_DelSTASelfReqCallback
3418 *
3419 */
3420void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3421 void* pUserData)
3422{
3423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3424 tWDA_CbContext *pWDA;
3425 tDelStaSelfParams *delStaSelfParams;
3426
3427 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3428 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003429 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003430
3431 if (NULL == pWdaParams)
3432 {
3433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003434 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003435 VOS_ASSERT(0);
3436 return;
3437 }
3438
3439 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3440 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3441
3442 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3443
3444 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3445 {
3446 VOS_ASSERT(0);
3447 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3448 vos_mem_free(pWdaParams) ;
3449 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3450 }
3451
3452 return ;
3453}
3454
3455/*
3456 * FUNCTION: WDA_DelSTASelfReq
3457 * Trigger Config STA processing in WDI
3458 */
3459VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3460 tDelStaSelfParams* pDelStaSelfReqParam)
3461{
3462 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003463 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 tWDA_ReqParams *pWdaParams = NULL;
3465 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3466 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3467 sizeof(WDI_DelSTASelfReqParamsType)) ;
3468
Jeff Johnson295189b2012-06-20 16:38:30 -07003469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003470 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 if( NULL == wdiDelStaSelfReq )
3472 {
3473 VOS_ASSERT( 0 );
3474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003475 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 return( VOS_STATUS_E_NOMEM );
3477 }
3478
3479 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3480 if( NULL == pWdaParams )
3481 {
3482 VOS_ASSERT( 0 );
3483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003484 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003485 vos_mem_free(wdiDelStaSelfReq) ;
3486 return( VOS_STATUS_E_NOMEM );
3487 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 pWdaParams->pWdaContext = pWDA;
3489 /* Store param pointer as passed in by caller */
3490 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3491 /* store Params pass it to WDI */
3492 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003493 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3494 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3495
3496 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3497 wdiDelStaSelfReq->pUserData = pWdaParams;
3498
Jeff Johnson43971f52012-07-17 12:26:56 -07003499 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003500 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3501
Jeff Johnson43971f52012-07-17 12:26:56 -07003502 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003503 {
3504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3505 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3506 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003507 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3509 vos_mem_free(pWdaParams) ;
3510 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3511 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3512 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003513 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003514}
3515
Jeff Johnson295189b2012-06-20 16:38:30 -07003516/*
3517 * FUNCTION: WDA_SendMsg
3518 * Send Message back to PE
3519 */
3520void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3521 void *pBodyptr, tANI_U32 bodyVal)
3522{
3523 tSirMsgQ msg = {0} ;
3524 tANI_U32 status = VOS_STATUS_SUCCESS ;
3525 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 msg.type = msgType;
3527 msg.bodyval = bodyVal;
3528 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 if (VOS_STATUS_SUCCESS != status)
3531 {
3532 if(NULL != pBodyptr)
3533 {
3534 vos_mem_free(pBodyptr);
3535 }
3536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003537 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003538 VOS_ASSERT(0) ;
3539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003540 return ;
3541}
Jeff Johnson295189b2012-06-20 16:38:30 -07003542/*
3543 * FUNCTION: WDA_UpdateBSSParams
3544 * Translated WDA/PE BSS info into WDI BSS info..
3545 */
3546void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3547 WDI_ConfigBSSReqInfoType *wdiBssParams,
3548 tAddBssParams *wdaBssParams)
3549{
3550 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 /* copy bssReq Params to WDI structure */
3552 vos_mem_copy(wdiBssParams->macBSSID,
3553 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3554 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3555 sizeof(tSirMacAddr)) ;
3556 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3557 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3558 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 wdiBssParams->ucShortSlotTimeSupported =
3560 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003561 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3562 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3563 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3564 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3565 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3566
3567 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3568 wdiBssParams->ucTXOPProtectionFullSupport =
3569 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3571 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003572 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3574 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3575 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3576 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3577
3578 /* copy SSID into WDI structure */
3579 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3580 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3581 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003582 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3583 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003584 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585#ifdef WLAN_FEATURE_VOWIFI
3586 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3587#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590#ifdef WLAN_FEATURE_VOWIFI_11R
3591 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 if(wdiBssParams->bExtSetStaKeyParamValid)
3593 {
3594 /* copy set STA key params to WDI structure */
3595 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3596 wdaBssParams->extSetStaKeyParam.staIdx;
3597 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3598 wdaBssParams->extSetStaKeyParam.encType;
3599 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3600 wdaBssParams->extSetStaKeyParam.wepType;
3601 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3602 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003603 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3604 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003605 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003606 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3607 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3608 {
3609 WDA_GetWepKeysFromCfg( pWDA,
3610 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3611 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3612 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3613 }
3614 else
3615 {
3616#ifdef WLAN_SOFTAP_FEATURE
3617 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3618 keyIndex++)
3619 {
3620 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3621 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3622 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3623 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3624 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3625 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003626 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3627 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3628 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3629 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3630 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3631 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3632 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3633 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3634 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3636 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3637#else
3638 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3639 wdaBssParams->extSetStaKeyParam.key.keyId;
3640 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3641 wdaBssParams->extSetStaKeyParam.key.unicast;
3642 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3643 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3644 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3645 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3646 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3647 wdaBssParams->extSetStaKeyParam.key.paeRole;
3648 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3649 wdaBssParams->extSetStaKeyParam.key.keyLength;
3650 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3651 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3652 SIR_MAC_MAX_KEY_LENGTH);
3653 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3654#endif
3655 }
3656 }
3657 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3658 }
3659 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3660 {
3661 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3662 sizeof(wdaBssParams->extSetStaKeyParam) );
3663 }
3664#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003665#ifdef WLAN_FEATURE_11AC
3666 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3667 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3668#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003669
3670 return ;
3671}
Jeff Johnson295189b2012-06-20 16:38:30 -07003672/*
3673 * FUNCTION: WDA_UpdateSTAParams
3674 * Translated WDA/PE BSS info into WDI BSS info..
3675 */
3676void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3677 WDI_ConfigStaReqInfoType *wdiStaParams,
3678 tAddStaParams *wdaStaParams)
3679{
3680 tANI_U8 i = 0;
3681 /* Update STA params */
3682 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3683 sizeof(tSirMacAddr)) ;
3684 wdiStaParams->usAssocId = wdaStaParams->assocId;
3685 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3686
3687 wdiStaParams->ucShortPreambleSupported =
3688 wdaStaParams->shortPreambleSupported;
3689 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3690 sizeof(tSirMacAddr)) ;
3691 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3692
3693 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3694
3695 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3696 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3697 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3698 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3699 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3700 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3701 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3702
3703 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3704 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 wdiStaParams->wdiSupportedRates.opRateMode =
3706 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003707 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3708 {
3709 wdiStaParams->wdiSupportedRates.llbRates[i] =
3710 wdaStaParams->supportedRates.llbRates[i];
3711 }
3712 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3713 {
3714 wdiStaParams->wdiSupportedRates.llaRates[i] =
3715 wdaStaParams->supportedRates.llaRates[i];
3716 }
3717 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3718 {
3719 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3720 wdaStaParams->supportedRates.aniLegacyRates[i];
3721 }
3722 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3723 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003724#ifdef WLAN_FEATURE_11AC
3725 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3726 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3727 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3728 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3729#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003730 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3731 {
3732 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3733 wdaStaParams->supportedRates.supportedMCSSet[i];
3734 }
3735 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3736 wdaStaParams->supportedRates.rxHighestDataRate;
3737
3738 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3739
3740 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3741
3742 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3743 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3744 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3745
3746 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3747 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3748 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3749 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3750#ifdef WLAN_FEATURE_P2P
3751 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3752#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003753#ifdef WLAN_FEATURE_11AC
3754 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3755 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3756#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003757 return ;
3758}
Jeff Johnson295189b2012-06-20 16:38:30 -07003759/*
3760 * -------------------------------------------------------------------------
3761 * CFG update to WDI
3762 * -------------------------------------------------------------------------
3763 */
3764
3765 /*
3766 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3767 * Convert the WNI CFG ID to HAL CFG ID
3768 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003769static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003770{
3771 switch(wniCfgId)
3772 {
3773 case WNI_CFG_STA_ID:
3774 return QWLAN_HAL_CFG_STA_ID;
3775 case WNI_CFG_CURRENT_TX_ANTENNA:
3776 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3777 case WNI_CFG_CURRENT_RX_ANTENNA:
3778 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3779 case WNI_CFG_LOW_GAIN_OVERRIDE:
3780 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3781 case WNI_CFG_POWER_STATE_PER_CHAIN:
3782 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3783 case WNI_CFG_CAL_PERIOD:
3784 return QWLAN_HAL_CFG_CAL_PERIOD;
3785 case WNI_CFG_CAL_CONTROL:
3786 return QWLAN_HAL_CFG_CAL_CONTROL;
3787 case WNI_CFG_PROXIMITY:
3788 return QWLAN_HAL_CFG_PROXIMITY;
3789 case WNI_CFG_NETWORK_DENSITY:
3790 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3791 case WNI_CFG_MAX_MEDIUM_TIME:
3792 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3793 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3794 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3795 case WNI_CFG_RTS_THRESHOLD:
3796 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3797 case WNI_CFG_SHORT_RETRY_LIMIT:
3798 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3799 case WNI_CFG_LONG_RETRY_LIMIT:
3800 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3801 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3802 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3803 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3804 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3805 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3806 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3807 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3808 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3809 case WNI_CFG_FIXED_RATE:
3810 return QWLAN_HAL_CFG_FIXED_RATE;
3811 case WNI_CFG_RETRYRATE_POLICY:
3812 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3813 case WNI_CFG_RETRYRATE_SECONDARY:
3814 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3815 case WNI_CFG_RETRYRATE_TERTIARY:
3816 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3817 case WNI_CFG_FORCE_POLICY_PROTECTION:
3818 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3819 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3820 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3821 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3822 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3823 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3824 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3825 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3826 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3827 case WNI_CFG_MAX_BA_SESSIONS:
3828 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3829 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3830 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3831 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3832 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3833 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3834 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3835 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3836 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3837 case WNI_CFG_STATS_PERIOD:
3838 return QWLAN_HAL_CFG_STATS_PERIOD;
3839 case WNI_CFG_CFP_MAX_DURATION:
3840 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3841#if 0 /*This is not part of CFG*/
3842 case WNI_CFG_FRAME_TRANS_ENABLED:
3843 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3844#endif
3845 case WNI_CFG_DTIM_PERIOD:
3846 return QWLAN_HAL_CFG_DTIM_PERIOD;
3847 case WNI_CFG_EDCA_WME_ACBK:
3848 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3849 case WNI_CFG_EDCA_WME_ACBE:
3850 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3851 case WNI_CFG_EDCA_WME_ACVI:
3852 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3853 case WNI_CFG_EDCA_WME_ACVO:
3854 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3855#if 0
3856 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3857 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3858 case WNI_CFG_TELE_BCN_TRANS_LI:
3859 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3860 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3861 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3862 case WNI_CFG_TELE_BCN_MAX_LI:
3863 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3864 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3865 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3866#endif
3867 case WNI_CFG_ENABLE_CLOSE_LOOP:
3868 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003869 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3870 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003871 default:
3872 {
3873 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3874 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3875 wniCfgId);
3876 return VOS_STATUS_E_INVAL;
3877 }
3878 }
3879}
Jeff Johnson295189b2012-06-20 16:38:30 -07003880/*
3881 * FUNCTION: WDA_UpdateCfgCallback
3882 *
3883 */
3884void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3885{
3886 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3887 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3888 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003890 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003891 /*
3892 * currently there is no response message is expected between PE and
3893 * WDA, Failure return from WDI is a ASSERT condition
3894 */
3895 if(WDI_STATUS_SUCCESS != wdiStatus)
3896 {
3897 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003898 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003899 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3900 }
3901
3902 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3903 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3904 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003905 return ;
3906}
Jeff Johnson295189b2012-06-20 16:38:30 -07003907/*
3908 * FUNCTION: WDA_UpdateCfg
3909 *
3910 */
3911VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3912{
3913
3914 WDI_Status status = WDI_STATUS_SUCCESS ;
3915 tANI_U32 val =0;
3916 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3917 tHalCfg *configData;
3918 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3919 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 if (NULL == pMac )
3923 {
3924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003925 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003926 return VOS_STATUS_E_FAILURE;
3927 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003928 if(WDA_START_STATE != pWDA->wdaState)
3929 {
3930 return VOS_STATUS_E_FAILURE;
3931 }
3932
3933 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3934 {
3935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003936 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003937 VOS_ASSERT(0);
3938 return VOS_STATUS_E_FAILURE;
3939 }
3940
3941 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3942 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003943 if(NULL == wdiCfgReqParam)
3944 {
3945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 VOS_ASSERT(0);
3948 return VOS_STATUS_E_NOMEM;
3949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003950 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3951 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 if(NULL == wdiCfgReqParam->pConfigBuffer)
3953 {
3954 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003955 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003956 vos_mem_free(wdiCfgReqParam);
3957 VOS_ASSERT(0);
3958 return VOS_STATUS_E_NOMEM;
3959 }
3960
3961 /*convert the WNI CFG Id to HAL CFG Id*/
3962 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3963 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3964
3965 /*TODO: revisit this for handling string parameters */
3966 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3967 &val) != eSIR_SUCCESS)
3968 {
3969 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3970 "Failed to cfg get id %d\n", cfgParam->bodyval);
3971 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3972 vos_mem_free(wdiCfgReqParam);
3973 return eSIR_FAILURE;
3974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3976 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3977 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3978 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3979 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3980
3981 /* store Params pass it to WDI */
3982 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003983#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3984 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3985 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003986 if(IS_WDI_STATUS_FAILURE(status))
3987 {
3988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3989 "Failure in Update CFG WDI API, free all the memory " );
3990 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3991 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3992 pWDA->wdaWdiCfgApiMsgParam = NULL;
3993 /* Failure is not expected */
3994 VOS_ASSERT(0) ;
3995 }
3996#else
3997 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3998 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3999 pWDA->wdaWdiCfgApiMsgParam = NULL;
4000#endif
4001 return CONVERT_WDI2VOS_STATUS(status) ;
4002}
4003
Jeff Johnson295189b2012-06-20 16:38:30 -07004004VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4005 v_U8_t *pDefaultKeyId,
4006 v_U8_t *pNumKeys,
4007 WDI_KeysType *pWdiKeys )
4008{
4009 v_U32_t i, j, defKeyId = 0;
4010 v_U32_t val = SIR_MAC_KEY_LENGTH;
4011 VOS_STATUS status = WDI_STATUS_SUCCESS;
4012 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004013 if (NULL == pMac )
4014 {
4015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004016 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 return VOS_STATUS_E_FAILURE;
4018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4020 &defKeyId ))
4021 {
4022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4023 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4024 }
4025
4026 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004027 /* Need to extract ALL of the configured WEP Keys */
4028 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4029 {
4030 val = SIR_MAC_KEY_LENGTH;
4031 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4032 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4033 pWdiKeys[j].key,
4034 &val ))
4035 {
4036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4037 "WEP Key index [%d] may not configured in CFG\n",i);
4038 }
4039 else
4040 {
4041 pWdiKeys[j].keyId = (tANI_U8) i;
4042 /*
4043 * Actually, a DC (Don't Care) because
4044 * this is determined (and set) by PE/MLME
4045 */
4046 pWdiKeys[j].unicast = 0;
4047 /*
4048 * Another DC (Don't Care)
4049 */
4050 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4051 /* Another DC (Don't Care). Unused for WEP */
4052 pWdiKeys[j].paeRole = 0;
4053 /* Determined from wlan_cfgGetStr() above.*/
4054 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004055 j++;
4056 *pNumKeys = (tANI_U8) j;
4057 }
4058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004059 return status;
4060}
Jeff Johnson295189b2012-06-20 16:38:30 -07004061/*
4062 * FUNCTION: WDA_SetBssKeyReqCallback
4063 * send SET BSS key RSP back to PE
4064 */
4065void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4066{
4067 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4068 tWDA_CbContext *pWDA;
4069 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004071 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004072 if(NULL == pWdaParams)
4073 {
4074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004075 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004076 VOS_ASSERT(0) ;
4077 return ;
4078 }
4079 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4080 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4082 vos_mem_free(pWdaParams) ;
4083 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004084 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 return ;
4086}
Jeff Johnson295189b2012-06-20 16:38:30 -07004087/*
4088 * FUNCTION: WDA_ProcessSetBssKeyReq
4089 * Request to WDI for programming the BSS key( key for
4090 * broadcast/multicast frames Encryption)
4091 */
4092VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4093 tSetBssKeyParams *setBssKeyParams )
4094{
4095 WDI_Status status = WDI_STATUS_SUCCESS ;
4096 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4097 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4098 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4099 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004100 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004102 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 if(NULL == wdiSetBssKeyParam)
4104 {
4105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004106 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004107 VOS_ASSERT(0);
4108 return VOS_STATUS_E_NOMEM;
4109 }
4110 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4111 if(NULL == pWdaParams)
4112 {
4113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004114 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 VOS_ASSERT(0);
4116 vos_mem_free(wdiSetBssKeyParam);
4117 return VOS_STATUS_E_NOMEM;
4118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004119 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 /* copy set BSS params to WDI structure */
4121 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4122 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4123 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 if(setBssKeyParams->encType != eSIR_ED_NONE)
4125 {
4126 if( setBssKeyParams->numKeys == 0 &&
4127 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4128 setBssKeyParams->encType == eSIR_ED_WEP104))
4129 {
4130 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004131 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4132 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4133 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4134 }
4135 else
4136 {
4137 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4138 {
4139 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4140 setBssKeyParams->key[keyIndex].keyId;
4141 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4142 setBssKeyParams->key[keyIndex].unicast;
4143 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4144 setBssKeyParams->key[keyIndex].keyDirection;
4145 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4146 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4147 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4148 setBssKeyParams->key[keyIndex].paeRole;
4149 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4150 setBssKeyParams->key[keyIndex].keyLength;
4151 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4152 setBssKeyParams->key[keyIndex].key,
4153 SIR_MAC_MAX_KEY_LENGTH);
4154 }
4155 }
4156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004157 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4158 setBssKeyParams->singleTidRc;
4159 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 /* Store set key pointer, as this will be used for response */
4161 /* store Params pass it to WDI */
4162 pWdaParams->pWdaContext = pWDA;
4163 pWdaParams->wdaMsgParam = setBssKeyParams;
4164 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004165 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4166 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4167
4168 if(IS_WDI_STATUS_FAILURE(status))
4169 {
4170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4171 "Failure in Set BSS Key Req WDI API, free all the memory " );
4172 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4173 vos_mem_free(pWdaParams) ;
4174 setBssKeyParams->status = eSIR_FAILURE ;
4175 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4176 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004177 return CONVERT_WDI2VOS_STATUS(status) ;
4178}
Jeff Johnson295189b2012-06-20 16:38:30 -07004179/*
4180 * FUNCTION: WDA_RemoveBssKeyReqCallback
4181 * send SET BSS key RSP back to PE
4182 */
4183void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4184{
4185 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4186 tWDA_CbContext *pWDA;
4187 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004189 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004190 if(NULL == pWdaParams)
4191 {
4192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004193 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 VOS_ASSERT(0) ;
4195 return ;
4196 }
4197 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4198 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004199 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4200 vos_mem_free(pWdaParams) ;
4201
4202 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 return ;
4205}
Jeff Johnson295189b2012-06-20 16:38:30 -07004206/*
4207 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4208 * Request to WDI to remove the BSS key( key for broadcast/multicast
4209 * frames Encryption)
4210 */
4211VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4212 tRemoveBssKeyParams *removeBssKeyParams )
4213{
4214 WDI_Status status = WDI_STATUS_SUCCESS ;
4215 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4216 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4217 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4218 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004220 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 if(NULL == wdiRemoveBssKeyParam)
4222 {
4223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004224 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004225 VOS_ASSERT(0);
4226 return VOS_STATUS_E_NOMEM;
4227 }
4228 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4229 if(NULL == pWdaParams)
4230 {
4231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004232 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004233 VOS_ASSERT(0);
4234 vos_mem_free(wdiRemoveBssKeyParam);
4235 return VOS_STATUS_E_NOMEM;
4236 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004237 /* copy Remove BSS key params to WDI structure*/
4238 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4239 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4240 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4241 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4242 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 /* Store remove key pointer, as this will be used for response */
4244 /* store Params pass it to WDI */
4245 pWdaParams->pWdaContext = pWDA;
4246 pWdaParams->wdaMsgParam = removeBssKeyParams;
4247 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4249 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004250 if(IS_WDI_STATUS_FAILURE(status))
4251 {
4252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4253 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4254 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4255 vos_mem_free(pWdaParams) ;
4256 removeBssKeyParams->status = eSIR_FAILURE ;
4257 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 return CONVERT_WDI2VOS_STATUS(status) ;
4260}
Jeff Johnson295189b2012-06-20 16:38:30 -07004261/*
4262 * FUNCTION: WDA_SetBssKeyReqCallback
4263 * send SET BSS key RSP back to PE
4264 */
4265void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4266{
4267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4268 tWDA_CbContext *pWDA;
4269 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004272 if(NULL == pWdaParams)
4273 {
4274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004275 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004276 VOS_ASSERT(0) ;
4277 return ;
4278 }
4279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4280 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4282 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004283 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 return ;
4286}
Jeff Johnson295189b2012-06-20 16:38:30 -07004287/*
4288 * FUNCTION: WDA_ProcessSetStaKeyReq
4289 * Request to WDI for programming the STA key( key for Unicast frames
4290 * Encryption)
4291 */
4292VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4293 tSetStaKeyParams *setStaKeyParams )
4294{
4295 WDI_Status status = WDI_STATUS_SUCCESS ;
4296 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4297 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4298 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4299 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004300 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004302 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 if(NULL == wdiSetStaKeyParam)
4304 {
4305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004307 VOS_ASSERT(0);
4308 return VOS_STATUS_E_NOMEM;
4309 }
4310 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4311 if(NULL == pWdaParams)
4312 {
4313 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004314 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004315 VOS_ASSERT(0);
4316 vos_mem_free(wdiSetStaKeyParam);
4317 return VOS_STATUS_E_NOMEM;
4318 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004319 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 /* copy set STA key params to WDI structure */
4322 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4323 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4324 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4325 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004326 if(setStaKeyParams->encType != eSIR_ED_NONE)
4327 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004328 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004329 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4330 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4331 {
4332 WDA_GetWepKeysFromCfg( pWDA,
4333 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4334 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4335 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4336 }
4337 else
4338 {
4339#ifdef WLAN_SOFTAP_FEATURE
4340 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4341 keyIndex++)
4342 {
4343 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4344 setStaKeyParams->key[keyIndex].keyId;
4345 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4346 setStaKeyParams->key[keyIndex].unicast;
4347 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4348 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004349 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4350 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4351 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4352 setStaKeyParams->key[keyIndex].paeRole;
4353 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4354 setStaKeyParams->key[keyIndex].keyLength;
4355 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4356 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4357 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4358 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4359 {
4360 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4361 }
4362 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4364 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4365#else
4366 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4367 setStaKeyParams->key.keyId;
4368 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4369 setStaKeyParams->key.unicast;
4370 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4371 setStaKeyParams->key.keyDirection;
4372 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4373 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4374 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4375 setStaKeyParams->key.paeRole;
4376 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4377 setStaKeyParams->key.keyLength;
4378 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4379 setStaKeyParams->key[keyIndex].key,
4380 SIR_MAC_MAX_KEY_LENGTH);
4381 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4382#endif
4383 }
4384 }
4385 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4386 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 /* Store set key pointer, as this will be used for response */
4388 /* store Params pass it to WDI */
4389 pWdaParams->pWdaContext = pWDA;
4390 pWdaParams->wdaMsgParam = setStaKeyParams;
4391 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4393 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004394 if(IS_WDI_STATUS_FAILURE(status))
4395 {
4396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4397 "Failure in set STA Key Req WDI API, free all the memory " );
4398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4399 vos_mem_free(pWdaParams) ;
4400 setStaKeyParams->status = eSIR_FAILURE ;
4401 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004403 return CONVERT_WDI2VOS_STATUS(status) ;
4404}
Jeff Johnson295189b2012-06-20 16:38:30 -07004405/*
4406 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4407 * send SET Bcast STA key RSP back to PE
4408 */
4409void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4410{
4411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4412 tWDA_CbContext *pWDA;
4413 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004415 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004416 if(NULL == pWdaParams)
4417 {
4418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004419 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 VOS_ASSERT(0) ;
4421 return ;
4422 }
4423 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4424 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004425 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4426 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004427 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 return ;
4430}
4431
Jeff Johnson295189b2012-06-20 16:38:30 -07004432/*
4433 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4434 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4435 * Encryption)
4436 */
4437VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4438 tSetStaKeyParams *setStaKeyParams )
4439{
4440 WDI_Status status = WDI_STATUS_SUCCESS ;
4441 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4442 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4443 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4444 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004445 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 if(NULL == wdiSetStaKeyParam)
4449 {
4450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004452 VOS_ASSERT(0);
4453 return VOS_STATUS_E_NOMEM;
4454 }
4455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4456 if(NULL == pWdaParams)
4457 {
4458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004460 VOS_ASSERT(0);
4461 vos_mem_free(wdiSetStaKeyParam);
4462 return VOS_STATUS_E_NOMEM;
4463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004464 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 /* copy set STA key params to WDI structure */
4467 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4468 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4469 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4470 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004471 if(setStaKeyParams->encType != eSIR_ED_NONE)
4472 {
4473#ifdef WLAN_SOFTAP_FEATURE
4474 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4475 keyIndex++)
4476 {
4477 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4478 setStaKeyParams->key[keyIndex].keyId;
4479 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4480 setStaKeyParams->key[keyIndex].unicast;
4481 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4482 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4484 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4485 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4486 setStaKeyParams->key[keyIndex].paeRole;
4487 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4488 setStaKeyParams->key[keyIndex].keyLength;
4489 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4490 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4493 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4494#else
4495 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4496 setStaKeyParams->key.keyId;
4497 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4498 setStaKeyParams->key.unicast;
4499 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4500 setStaKeyParams->key.keyDirection;
4501 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4502 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4503 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4504 setStaKeyParams->key.paeRole;
4505 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4506 setStaKeyParams->key.keyLength;
4507 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4508 setStaKeyParams->key[keyIndex].key,
4509 SIR_MAC_MAX_KEY_LENGTH);
4510 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4511#endif
4512 }
4513 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 /* Store set key pointer, as this will be used for response */
4515 /* store Params pass it to WDI */
4516 pWdaParams->pWdaContext = pWDA;
4517 pWdaParams->wdaMsgParam = setStaKeyParams;
4518 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004519 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4520 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004521 if(IS_WDI_STATUS_FAILURE(status))
4522 {
4523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4524 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4525 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4526 vos_mem_free(pWdaParams) ;
4527 setStaKeyParams->status = eSIR_FAILURE ;
4528 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4529 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004530 return CONVERT_WDI2VOS_STATUS(status) ;
4531}
Jeff Johnson295189b2012-06-20 16:38:30 -07004532/*
4533 * FUNCTION: WDA_RemoveStaKeyReqCallback
4534 * send SET BSS key RSP back to PE
4535 */
4536void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4537{
4538 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4539 tWDA_CbContext *pWDA;
4540 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004542 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 if(NULL == pWdaParams)
4544 {
4545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004546 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004547 VOS_ASSERT(0) ;
4548 return ;
4549 }
4550 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4551 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004552 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4553 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004554 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 return ;
4557}
4558
Jeff Johnson295189b2012-06-20 16:38:30 -07004559/*
4560 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4561 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4562 */
4563VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4564 tRemoveStaKeyParams *removeStaKeyParams )
4565{
4566 WDI_Status status = WDI_STATUS_SUCCESS ;
4567 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4568 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4569 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4570 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004572 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 if(NULL == wdiRemoveStaKeyParam)
4574 {
4575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004576 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 VOS_ASSERT(0);
4578 return VOS_STATUS_E_NOMEM;
4579 }
4580 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4581 if(NULL == pWdaParams)
4582 {
4583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004584 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004585 VOS_ASSERT(0);
4586 vos_mem_free(wdiRemoveStaKeyParam);
4587 return VOS_STATUS_E_NOMEM;
4588 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 /* copy remove STA key params to WDI structure*/
4590 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4591 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4592 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4593 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4594 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 /* Store remove key pointer, as this will be used for response */
4596 /* store Params pass it to WDI */
4597 pWdaParams->pWdaContext = pWDA;
4598 pWdaParams->wdaMsgParam = removeStaKeyParams;
4599 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004600 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4601 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004602 if(IS_WDI_STATUS_FAILURE(status))
4603 {
4604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4605 "Failure in remove STA Key Req WDI API, free all the memory " );
4606 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4607 vos_mem_free(pWdaParams) ;
4608 removeStaKeyParams->status = eSIR_FAILURE ;
4609 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004611 return CONVERT_WDI2VOS_STATUS(status) ;
4612}
Jeff Johnson295189b2012-06-20 16:38:30 -07004613/*
4614 * FUNCTION: WDA_IsHandleSetLinkStateReq
4615 * Update the WDA state and return the status to handle this message or not
4616 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004617WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4618 tWDA_CbContext *pWDA,
4619 tLinkStateParams *linkStateParams)
4620{
4621 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004622 switch(linkStateParams->state)
4623 {
4624 case eSIR_LINK_PREASSOC_STATE:
4625 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4626 /*
4627 * set the WDA state to PRE ASSOC
4628 * copy the BSSID into pWDA to use it in join request and return,
4629 * No need to handle these messages.
4630 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004631 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4632 {
4633 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004634 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004635 }
4636 else
4637 {
4638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004639 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004640 VOS_ASSERT(0);
4641 }
4642
4643 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4644 {
4645 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004646 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004647 }
4648 else
4649 {
4650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004651 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004652 VOS_ASSERT(0);
4653 }
4654
Jeff Johnson295189b2012-06-20 16:38:30 -07004655 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4656 *channel and after ) so reset the WDA state to ready when the second
4657 * time UMAC issue the link state with PREASSOC
4658 */
4659 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4660 {
4661 /* RESET WDA state back to WDA_READY_STATE */
4662 pWDA->wdaState = WDA_READY_STATE;
4663 }
4664 else
4665 {
4666 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4667 }
4668 //populate linkState info in WDACbCtxt
4669 pWDA->linkState = linkStateParams->state;
4670 status = WDA_IGNORE_SET_LINK_STATE;
4671 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004672 default:
4673 if(pWDA->wdaState != WDA_READY_STATE)
4674 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004675 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4676 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4677 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4678 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4679 *the ASSERT in WDA_Stop during module unload.*/
4680 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4681 {
4682 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004683 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004684 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004685 else
4686 {
4687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004688 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004689 status = WDA_IGNORE_SET_LINK_STATE;
4690 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 }
4692 break;
4693 }
4694
4695 return status;
4696}
Jeff Johnson295189b2012-06-20 16:38:30 -07004697/*
4698 * FUNCTION: WDA_SetLinkStateCallback
4699 * call back function for set link state from WDI
4700 */
4701void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4702{
4703 tWDA_CbContext *pWDA;
4704 tLinkStateParams *linkStateParams;
4705 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004707 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004708 if(NULL == pWdaParams)
4709 {
4710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004711 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004712 VOS_ASSERT(0) ;
4713 return ;
4714 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 /*
4718 * In STA mode start the BA activity check timer after association
4719 * and in AP mode start BA activity check timer after BSS start */
4720 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4721 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4722 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4723 {
4724 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 /*
4728 * No respone required for WDA_SET_LINK_STATE so free the request
4729 * param here
4730 */
4731 if( pWdaParams != NULL )
4732 {
4733 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4734 {
4735 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4736 }
4737 vos_mem_free(pWdaParams);
4738 }
4739 return ;
4740}
Jeff Johnson295189b2012-06-20 16:38:30 -07004741/*
4742 * FUNCTION: WDA_ProcessSetLinkState
4743 * Request to WDI to set the link status.
4744 */
4745VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4746 tLinkStateParams *linkStateParams)
4747{
4748 WDI_Status status = WDI_STATUS_SUCCESS ;
4749 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4750 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4751 sizeof(WDI_SetLinkReqParamsType)) ;
4752 tWDA_ReqParams *pWdaParams ;
4753 tpAniSirGlobal pMac;
4754 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4755
4756 if(NULL == pMac)
4757 {
4758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004759 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004760 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004761 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004762 return VOS_STATUS_E_FAILURE;
4763 }
4764
4765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004766 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 if(NULL == wdiSetLinkStateParam)
4768 {
4769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004770 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 VOS_ASSERT(0);
4772 return VOS_STATUS_E_NOMEM;
4773 }
4774 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4775 if(NULL == pWdaParams)
4776 {
4777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004778 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004779 VOS_ASSERT(0);
4780 vos_mem_free(wdiSetLinkStateParam);
4781 return VOS_STATUS_E_NOMEM;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 if(WDA_IGNORE_SET_LINK_STATE ==
4784 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4785 {
4786 status = WDI_STATUS_E_FAILURE;
4787 }
4788 else
4789 {
4790 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4791 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4793 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4795 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 pWdaParams->pWdaContext = pWDA;
4797 /* Store remove key pointer, as this will be used for response */
4798 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004799 /* store Params pass it to WDI */
4800 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4801 /* Stop Timer only other than GO role and concurrent session */
4802 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4803 && !vos_concurrent_sessions_running() &&
4804 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4805 {
4806 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4807 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004808 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4809 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 if(IS_WDI_STATUS_FAILURE(status))
4811 {
4812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4813 "Failure in set link state Req WDI API, free all the memory " );
4814 }
4815 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004816 if(IS_WDI_STATUS_FAILURE(status))
4817 {
4818 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004819 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004820 vos_mem_free(pWdaParams);
4821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 return CONVERT_WDI2VOS_STATUS(status) ;
4823}
Jeff Johnson295189b2012-06-20 16:38:30 -07004824/*
4825 * FUNCTION: WDA_GetStatsReqParamsCallback
4826 * send the response to PE with Stats received from WDI
4827 */
4828void WDA_GetStatsReqParamsCallback(
4829 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4830 void* pUserData)
4831{
4832 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4833 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4834
4835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004837 pGetPEStatsRspParams =
4838 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4839 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4840
4841 if(NULL == pGetPEStatsRspParams)
4842 {
4843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004844 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004845 VOS_ASSERT(0);
4846 return;
4847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004848 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4849 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4850 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4851 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4852 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4853
4854 //Fill the Session Id Properly in PE
4855 pGetPEStatsRspParams->sessionId = 0;
4856 pGetPEStatsRspParams->rc =
4857 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4858 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4859 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004860 vos_mem_copy( pGetPEStatsRspParams + 1,
4861 wdiGetStatsRsp + 1,
4862 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 /* send response to UMAC*/
4864 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4865
4866 return;
4867}
4868
Jeff Johnson295189b2012-06-20 16:38:30 -07004869/*
4870 * FUNCTION: WDA_ProcessGetStatsReq
4871 * Request to WDI to get the statistics
4872 */
4873VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4874 tAniGetPEStatsReq *pGetStatsParams)
4875{
4876 WDI_Status status = WDI_STATUS_SUCCESS ;
4877 WDI_GetStatsReqParamsType wdiGetStatsParam;
4878 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004880 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004881 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4882 pGetStatsParams->staId;
4883 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4884 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 status = WDI_GetStatsReq(&wdiGetStatsParam,
4887 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004888 if(IS_WDI_STATUS_FAILURE(status))
4889 {
4890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4891 "Failure in Get Stats Req WDI API, free all the memory " );
4892 pGetPEStatsRspParams =
4893 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4894 if(NULL == pGetPEStatsRspParams)
4895 {
4896 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004897 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004898 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004899 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004900 return VOS_STATUS_E_NOMEM;
4901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004902 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4903 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4904 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4905 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4906 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4907 (void *)pGetPEStatsRspParams, 0) ;
4908 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 /* Free the request message */
4910 vos_mem_free(pGetStatsParams);
4911 return CONVERT_WDI2VOS_STATUS(status);
4912}
Jeff Johnson295189b2012-06-20 16:38:30 -07004913/*
4914 * FUNCTION: WDA_UpdateEDCAParamCallback
4915 * call back function for Update EDCA params from WDI
4916 */
4917void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4918{
4919 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4920 tEdcaParams *pEdcaParams;
4921
4922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004923 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004924 if(NULL == pWdaParams)
4925 {
4926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004927 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004928 VOS_ASSERT(0) ;
4929 return ;
4930 }
4931 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4933 vos_mem_free(pWdaParams);
4934 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 return ;
4936}
Jeff Johnson295189b2012-06-20 16:38:30 -07004937/*
4938 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4939 * Request to WDI to Update the EDCA params.
4940 */
4941VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4942 tEdcaParams *pEdcaParams)
4943{
4944 WDI_Status status = WDI_STATUS_SUCCESS ;
4945 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4946 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4947 sizeof(WDI_UpdateEDCAParamsType)) ;
4948 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004950 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 if(NULL == wdiEdcaParam)
4952 {
4953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004955 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004956 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004957 return VOS_STATUS_E_NOMEM;
4958 }
4959 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4960 if(NULL == pWdaParams)
4961 {
4962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004963 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 VOS_ASSERT(0);
4965 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004966 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 return VOS_STATUS_E_NOMEM;
4968 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4970 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4971 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4972 &pEdcaParams->acbe);
4973 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4974 &pEdcaParams->acbk);
4975 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4976 &pEdcaParams->acvi);
4977 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4978 &pEdcaParams->acvo);
4979 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004980 pWdaParams->pWdaContext = pWDA;
4981 /* Store remove key pointer, as this will be used for response */
4982 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004983 /* store Params pass it to WDI */
4984 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004985 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4986 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004987 if(IS_WDI_STATUS_FAILURE(status))
4988 {
4989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4990 "Failure in Update EDCA Params WDI API, free all the memory " );
4991 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4992 vos_mem_free(pWdaParams);
4993 vos_mem_free(pEdcaParams);
4994 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004995 return CONVERT_WDI2VOS_STATUS(status) ;
4996}
Jeff Johnson295189b2012-06-20 16:38:30 -07004997/*
4998 * FUNCTION: WDA_AddBAReqCallback
4999 * send ADD BA RSP back to PE
5000 */
5001void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5002 void* pUserData)
5003{
5004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5005 tWDA_CbContext *pWDA;
5006 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005008 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005009 if(NULL == pWdaParams)
5010 {
5011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005012 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005013 VOS_ASSERT(0) ;
5014 return ;
5015 }
5016 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5017 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5019 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005020 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 return ;
5023}
5024
Jeff Johnson295189b2012-06-20 16:38:30 -07005025/*
5026 * FUNCTION: WDA_ProcessAddBAReq
5027 * Request to WDI to Update the ADDBA REQ params.
5028 */
5029VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5030 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5031{
Jeff Johnson43971f52012-07-17 12:26:56 -07005032 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5034 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5035 sizeof(WDI_AddBAReqParamsType)) ;
5036 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005038 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 if(NULL == wdiAddBAReqParam)
5040 {
5041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005042 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005043 VOS_ASSERT(0);
5044 return VOS_STATUS_E_NOMEM;
5045 }
5046 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5047 if(NULL == pWdaParams)
5048 {
5049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005050 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 VOS_ASSERT(0);
5052 vos_mem_free(wdiAddBAReqParam);
5053 return VOS_STATUS_E_NOMEM;
5054 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 do
5056 {
5057 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 wdiAddBaInfo->ucSTAIdx = staIdx ;
5059 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5060 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005061 } while(0) ;
5062 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005063 pWdaParams->pWdaContext = pWDA;
5064 /* store Params pass it to WDI */
5065 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5066 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005067 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5068 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005069
Jeff Johnson43971f52012-07-17 12:26:56 -07005070 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005071 {
5072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005073 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5074 status = CONVERT_WDI2VOS_STATUS(wstatus);
5075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005076 vos_mem_free(pWdaParams);
5077 pAddBAReqParams->status = eSIR_FAILURE;
5078 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5079 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005080 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005081}
Jeff Johnson295189b2012-06-20 16:38:30 -07005082/*
5083 * FUNCTION: WDA_AddBASessionReqCallback
5084 * send ADD BA SESSION RSP back to PE/(or TL)
5085 */
5086void WDA_AddBASessionReqCallback(
5087 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5088{
5089 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5090 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5091 tWDA_CbContext *pWDA;
5092 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005094 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 if(NULL == pWdaParams)
5096 {
5097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005098 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 VOS_ASSERT(0) ;
5100 return ;
5101 }
5102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5103 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005104 if( NULL == pAddBAReqParams )
5105 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005107 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005108 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005109 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5110 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 return ;
5112 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005113 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5114 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 /*
5116 * if WDA in update TL state, update TL with BA session parama and send
5117 * another request to HAL(/WDI) (ADD_BA_REQ)
5118 */
5119
5120 if((VOS_STATUS_SUCCESS ==
5121 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5122 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5123 {
5124 /* Update TL with BA info received from HAL/WDI */
5125 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5126 wdiAddBaSession->usBaSessionID,
5127 wdiAddBaSession->ucSTAIdx,
5128 wdiAddBaSession->ucBaTID,
5129 wdiAddBaSession->ucBaBufferSize,
5130 wdiAddBaSession->ucWinSize,
5131 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5133 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5134 }
5135 else
5136 {
5137 pAddBAReqParams->status =
5138 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5139
5140 /* Setting Flag to indicate that Set BA is success */
5141 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5142 {
5143 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5144 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5145 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005147 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 /*Reset the WDA state to READY */
5150 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 return ;
5152}
5153
Jeff Johnson295189b2012-06-20 16:38:30 -07005154/*
5155 * FUNCTION: WDA_ProcessAddBASessionReq
5156 * Request to WDI to Update the ADDBA REQ params.
5157 */
5158VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5159 tAddBAParams *pAddBAReqParams)
5160{
5161 WDI_Status status = WDI_STATUS_SUCCESS ;
5162 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5163 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5164 sizeof(WDI_AddBASessionReqParamsType)) ;
5165 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005167 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 if(NULL == wdiAddBASessionReqParam)
5169 {
5170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005171 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005172 VOS_ASSERT(0);
5173 return VOS_STATUS_E_NOMEM;
5174 }
5175 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5176 if(NULL == pWdaParams)
5177 {
5178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005179 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005180 VOS_ASSERT(0);
5181 vos_mem_free(wdiAddBASessionReqParam);
5182 return VOS_STATUS_E_NOMEM;
5183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 /*
5185 * Populate ADD BA parameters and pass these paarmeters to WDI.
5186 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5187 * the state to track if these is BA recipient case or BA initiator
5188 * case.
5189 */
5190 do
5191 {
5192 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5193 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5194 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5195 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5196 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5197 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5198 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005199 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5201 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5202 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5203 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5204 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005205 /* check the BA direction and update state accordingly */
5206 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5207 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5208 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5209
5210 }while(0) ;
5211 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005212 pWdaParams->pWdaContext = pWDA;
5213 /* Store ADD BA pointer, as this will be used for response */
5214 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5215 /* store Params pass it to WDI */
5216 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005217 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5218 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005219 if(IS_WDI_STATUS_FAILURE(status))
5220 {
5221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5222 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5223 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5224 vos_mem_free(pWdaParams->wdaMsgParam);
5225 vos_mem_free(pWdaParams);
5226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005227 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005228}
Jeff Johnson295189b2012-06-20 16:38:30 -07005229/*
5230 * FUNCTION: WDA_DelBANotifyTL
5231 * send DEL BA IND to TL
5232 */
5233void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5234 tDelBAParams *pDelBAReqParams)
5235{
5236 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5237 //tSirMsgQ msg;
5238 vos_msg_t vosMsg;
5239 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005240 if(NULL == pDelBAInd)
5241 {
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005243 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005244 VOS_ASSERT(0) ;
5245 return;
5246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005247 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5248 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5249 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5250 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005251
Jeff Johnson295189b2012-06-20 16:38:30 -07005252
5253 vosMsg.type = WDA_DELETEBA_IND;
5254 vosMsg.bodyptr = pDelBAInd;
5255 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5256 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5257 {
5258 vosStatus = VOS_STATUS_E_BADMSG;
5259 }
5260}
Jeff Johnson295189b2012-06-20 16:38:30 -07005261/*
5262 * FUNCTION: WDA_DelBAReqCallback
5263 * send DEL BA RSP back to PE
5264 */
5265void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5266{
5267 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5268 tWDA_CbContext *pWDA;
5269 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005272 if(NULL == pWdaParams)
5273 {
5274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005276 VOS_ASSERT(0) ;
5277 return ;
5278 }
5279 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5280 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005281 /* Notify TL about DEL BA in case of recipinet */
5282 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5283 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5284 {
5285 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005287 /*
5288 * No respone required for WDA_DELBA_IND so just free the request
5289 * param here
5290 */
5291 vos_mem_free(pDelBAReqParams);
5292 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5293 vos_mem_free(pWdaParams);
5294 return ;
5295}
5296
Jeff Johnson295189b2012-06-20 16:38:30 -07005297/*
5298 * FUNCTION: WDA_ProcessDelBAReq
5299 * Request to WDI to Update the DELBA REQ params.
5300 */
5301VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5302 tDelBAParams *pDelBAReqParams)
5303{
5304 WDI_Status status = WDI_STATUS_SUCCESS ;
5305 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5306 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5307 sizeof(WDI_DelBAReqParamsType)) ;
5308 tWDA_ReqParams *pWdaParams ;
5309 tANI_U16 staIdx = 0;
5310 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005312 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 if(NULL == wdiDelBAReqParam)
5314 {
5315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005317 VOS_ASSERT(0);
5318 return VOS_STATUS_E_NOMEM;
5319 }
5320 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5321 if(NULL == pWdaParams)
5322 {
5323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005324 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005325 VOS_ASSERT(0);
5326 vos_mem_free(wdiDelBAReqParam);
5327 return VOS_STATUS_E_NOMEM;
5328 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5330 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5331 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5332 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005333 pWdaParams->pWdaContext = pWDA;
5334 /* Store DEL BA pointer, as this will be used for response */
5335 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 /* store Params pass it to WDI */
5337 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5339 * maintained in WDA, so that WDA can retry for another BA session
5340 */
5341 staIdx = pDelBAReqParams->staIdx;
5342 tid = pDelBAReqParams->baTID;
5343 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005344 status = WDI_DelBAReq(wdiDelBAReqParam,
5345 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005346 if(IS_WDI_STATUS_FAILURE(status))
5347 {
5348 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5349 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5350 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5351 vos_mem_free(pWdaParams->wdaMsgParam);
5352 vos_mem_free(pWdaParams);
5353 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005354 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005355}
Jeff Johnson295189b2012-06-20 16:38:30 -07005356/*
5357 * FUNCTION: WDA_AddTSReqCallback
5358 * send ADD TS RSP back to PE
5359 */
5360void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5361{
5362 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5363 tWDA_CbContext *pWDA;
5364 tAddTsParams *pAddTsReqParams;
5365
5366 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005367 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 if(NULL == pWdaParams)
5369 {
5370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005371 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005372 VOS_ASSERT(0) ;
5373 return ;
5374 }
5375 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5376 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5377 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5378 vos_mem_free(pWdaParams);
5379
5380 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 return ;
5383}
5384
Jeff Johnson295189b2012-06-20 16:38:30 -07005385/*
5386 * FUNCTION: WDA_ProcessAddTSReq
5387 * Request to WDI to Update the ADD TS REQ params.
5388 */
5389VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5390 tAddTsParams *pAddTsReqParams)
5391{
5392 WDI_Status status = WDI_STATUS_SUCCESS ;
5393 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5394 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5395 sizeof(WDI_AddTSReqParamsType)) ;
5396 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005398 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(NULL == wdiAddTSReqParam)
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 VOS_ASSERT(0);
5404 return VOS_STATUS_E_NOMEM;
5405 }
5406 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5407 if(NULL == pWdaParams)
5408 {
5409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005410 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 VOS_ASSERT(0);
5412 vos_mem_free(wdiAddTSReqParam);
5413 return VOS_STATUS_E_NOMEM;
5414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005415 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5416 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 //TS IE
5418 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5419 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5420 pAddTsReqParams->tspec.length;
5421
5422 //TS IE : TS INFO : TRAFFIC
5423 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5424 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5426 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5428 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5429 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5430 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5431 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5432 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5433 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5434 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5435 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5436 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5437 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5438 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5439
5440 //TS IE : TS INFO : SCHEDULE
5441 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5442 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5443 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5444 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 //TS IE
5446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5447 pAddTsReqParams->tspec.nomMsduSz;
5448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5449 pAddTsReqParams->tspec.maxMsduSz;
5450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5451 pAddTsReqParams->tspec.minSvcInterval;
5452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5453 pAddTsReqParams->tspec.maxSvcInterval;
5454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5455 pAddTsReqParams->tspec.inactInterval;
5456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5457 pAddTsReqParams->tspec.suspendInterval;
5458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5459 pAddTsReqParams->tspec.svcStartTime;
5460 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5461 pAddTsReqParams->tspec.minDataRate;
5462 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5463 pAddTsReqParams->tspec.meanDataRate;
5464 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5465 pAddTsReqParams->tspec.peakDataRate;
5466 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5467 pAddTsReqParams->tspec.maxBurstSz;
5468 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5469 pAddTsReqParams->tspec.delayBound;
5470 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5471 pAddTsReqParams->tspec.minPhyRate;
5472 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5473 pAddTsReqParams->tspec.surplusBw;
5474 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5475 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 /* TODO: tAddTsParams doesn't have the following fields */
5477#if 0
5478 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5479 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5480 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5481 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5482#endif
5483 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5484
5485 pWdaParams->pWdaContext = pWDA;
5486 /* Store ADD TS pointer, as this will be used for response */
5487 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005488 /* store Params pass it to WDI */
5489 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005490 status = WDI_AddTSReq(wdiAddTSReqParam,
5491 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005492 if(IS_WDI_STATUS_FAILURE(status))
5493 {
5494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5495 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5496 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5497 vos_mem_free(pWdaParams);
5498 pAddTsReqParams->status = eSIR_FAILURE ;
5499 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5500 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005502}
5503
Jeff Johnson295189b2012-06-20 16:38:30 -07005504/*
5505 * FUNCTION: WDA_DelTSReqCallback
5506 * send DEL TS RSP back to PE
5507 */
5508void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5509{
5510 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005512 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005513 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5514 vos_mem_free(pWdaParams->wdaMsgParam) ;
5515 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005516 /*
5517 * No respone required for WDA_DEL_TS_REQ so just free the request
5518 * param here
5519 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005520 return ;
5521}
5522
Jeff Johnson295189b2012-06-20 16:38:30 -07005523/*
5524 * FUNCTION: WDA_ProcessDelTSReq
5525 * Request to WDI to Update the DELTS REQ params.
5526 */
5527VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5528 tDelTsParams *pDelTSReqParams)
5529{
5530 WDI_Status status = WDI_STATUS_SUCCESS ;
5531 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5532 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5533 sizeof(WDI_DelTSReqParamsType)) ;
5534 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005535 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005536 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 if(NULL == wdiDelTSReqParam)
5538 {
5539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 VOS_ASSERT(0);
5542 return VOS_STATUS_E_NOMEM;
5543 }
5544 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5545 if(NULL == pWdaParams)
5546 {
5547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005548 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 VOS_ASSERT(0);
5550 vos_mem_free(wdiDelTSReqParam);
5551 return VOS_STATUS_E_NOMEM;
5552 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005553 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5554 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5555 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5556 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5557 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 pWdaParams->pWdaContext = pWDA;
5559 /* Store DEL TS pointer, as this will be used for response */
5560 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005561 /* store Params pass it to WDI */
5562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005563 status = WDI_DelTSReq(wdiDelTSReqParam,
5564 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005565 if(IS_WDI_STATUS_FAILURE(status))
5566 {
5567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5568 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5569 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5570 vos_mem_free(pWdaParams->wdaMsgParam);
5571 vos_mem_free(pWdaParams);
5572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005573 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005574}
Jeff Johnson295189b2012-06-20 16:38:30 -07005575/*
5576 * FUNCTION: WDA_UpdateBeaconParamsCallback
5577 * Free the memory. No need to send any response to PE in this case
5578 */
5579void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5580{
5581 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005583 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005584 if(NULL == pWdaParams)
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005587 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005588 VOS_ASSERT(0) ;
5589 return ;
5590 }
5591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5592 vos_mem_free(pWdaParams->wdaMsgParam) ;
5593 vos_mem_free(pWdaParams);
5594 /*
5595 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5596 * param here
5597 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 return ;
5599}
Jeff Johnson295189b2012-06-20 16:38:30 -07005600/*
5601 * FUNCTION: WDA_ProcessUpdateBeaconParams
5602 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5603 */
5604VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5605 tUpdateBeaconParams *pUpdateBeaconParams)
5606{
5607 WDI_Status status = WDI_STATUS_SUCCESS ;
5608 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5609 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5610 sizeof(WDI_UpdateBeaconParamsType)) ;
5611 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005612 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005613 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 if(NULL == wdiUpdateBeaconParams)
5615 {
5616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005618 VOS_ASSERT(0);
5619 return VOS_STATUS_E_NOMEM;
5620 }
5621 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5622 if(NULL == pWdaParams)
5623 {
5624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005625 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_ASSERT(0);
5627 vos_mem_free(wdiUpdateBeaconParams);
5628 return VOS_STATUS_E_NOMEM;
5629 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5631 pUpdateBeaconParams->bssIdx;
5632 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5633 pUpdateBeaconParams->fShortPreamble;
5634 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5635 pUpdateBeaconParams->fShortSlotTime;
5636 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5637 pUpdateBeaconParams->beaconInterval;
5638 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5639 pUpdateBeaconParams->llaCoexist;
5640 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5641 pUpdateBeaconParams->llbCoexist;
5642 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5643 pUpdateBeaconParams->llgCoexist;
5644 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5645 pUpdateBeaconParams->ht20MhzCoexist;
5646 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5647 pUpdateBeaconParams->llnNonGFCoexist;
5648 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5649 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5650 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5651 pUpdateBeaconParams->fRIFSMode;
5652 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5653 pUpdateBeaconParams->paramChangeBitmap;
5654 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5655
5656 pWdaParams->pWdaContext = pWDA;
5657 /* Store UpdateBeacon Req pointer, as this will be used for response */
5658 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 /* store Params pass it to WDI */
5660 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005661 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5662 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5663 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005664 if(IS_WDI_STATUS_FAILURE(status))
5665 {
5666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5667 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5669 vos_mem_free(pWdaParams->wdaMsgParam);
5670 vos_mem_free(pWdaParams);
5671 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005672 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005673}
Jeff Johnson295189b2012-06-20 16:38:30 -07005674#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005675/*
5676 * FUNCTION: WDA_TSMStatsReqCallback
5677 * send TSM Stats RSP back to PE
5678 */
5679void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5680{
5681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5682 tWDA_CbContext *pWDA = NULL;
5683 tTSMStats *pTsmRspParams = NULL;
5684
5685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005686 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 if(NULL == pWdaParams)
5688 {
5689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 VOS_ASSERT(0) ;
5692 return ;
5693 }
5694 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5695 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005696 if( NULL == pTsmRspParams )
5697 {
5698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005699 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 VOS_ASSERT( 0 );
5701 return ;
5702 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005703 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5704 vos_mem_free(pWdaParams);
5705
5706 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5707 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5708 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5709 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5710 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5711 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5712 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5713 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5714 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5715 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 return ;
5718}
5719
5720
Jeff Johnson295189b2012-06-20 16:38:30 -07005721/*
5722 * FUNCTION: WDA_ProcessTsmStatsReq
5723 * Request to WDI to get the TSM Stats params.
5724 */
5725VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5726 tTSMStats *pTsmStats)
5727{
5728 WDI_Status status = WDI_STATUS_SUCCESS ;
5729 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5730 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005732 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005733 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5734 sizeof(WDI_TSMStatsReqParamsType));
5735 if(NULL == wdiTSMReqParam)
5736 {
5737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005739 VOS_ASSERT(0);
5740 return VOS_STATUS_E_NOMEM;
5741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005742 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5743 if(NULL == pWdaParams)
5744 {
5745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005746 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005747 VOS_ASSERT(0);
5748 vos_mem_free(wdiTSMReqParam);
5749 return VOS_STATUS_E_NOMEM;
5750 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005751 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5752 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5753 pTsmStats->bssId,
5754 sizeof(wpt_macAddr));
5755 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5756
5757 pWdaParams->pWdaContext = pWDA;
5758 /* Store TSM Stats pointer, as this will be used for response */
5759 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005760 /* store Params pass it to WDI */
5761 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 status = WDI_TSMStatsReq(wdiTSMReqParam,
5763 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005764 if(IS_WDI_STATUS_FAILURE(status))
5765 {
5766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5767 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5769 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005770 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005771 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 return CONVERT_WDI2VOS_STATUS(status) ;
5773}
5774#endif
5775/*
5776 * FUNCTION: WDA_SendBeaconParamsCallback
5777 * No need to send any response to PE in this case
5778 */
5779void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5780{
5781
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005783 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005784 return ;
5785}
Jeff Johnson295189b2012-06-20 16:38:30 -07005786/*
5787 * FUNCTION: WDA_ProcessSendBeacon
5788 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5789 * start beacon trasmission
5790 */
5791VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5792 tSendbeaconParams *pSendbeaconParams)
5793{
5794 WDI_Status status = WDI_STATUS_SUCCESS ;
5795 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005798 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5799 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5800 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5801 pSendbeaconParams->beaconLength;
5802#ifdef WLAN_SOFTAP_FEATURE
5803 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5804 pSendbeaconParams->timIeOffset;
5805#endif
5806#ifdef WLAN_FEATURE_P2P
5807 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5808 pSendbeaconParams->p2pIeOffset;
5809#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005810 /* Copy the beacon template to local buffer */
5811 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5812 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5813 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5814
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5816 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 if(IS_WDI_STATUS_FAILURE(status))
5818 {
5819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5820 "Failure in SEND BEACON REQ Params WDI API" );
5821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 vos_mem_free(pSendbeaconParams);
5823 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005824}
Jeff Johnson295189b2012-06-20 16:38:30 -07005825/*
5826 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5827 * No need to send any response to PE in this case
5828 */
5829void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5830{
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005833 return ;
5834}
5835
Jeff Johnson295189b2012-06-20 16:38:30 -07005836/*
5837 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5838 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5839 * send probe response
5840 */
5841VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5842 tSendProbeRespParams *pSendProbeRspParams)
5843{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005844 WDI_Status status = WDI_STATUS_SUCCESS;
5845 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5846 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005848 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005849
5850 if (!wdiSendProbeRspParam)
5851 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5852
Jeff Johnson295189b2012-06-20 16:38:30 -07005853 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005854 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005856 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005857 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 /* Copy the Probe Response template to local buffer */
5859 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005860 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 pSendProbeRspParams->pProbeRespTemplate,
5862 pSendProbeRspParams->probeRespTemplateLen);
5863 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005864 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005865 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5866 WDI_PROBE_REQ_BITMAP_IE_LEN);
5867
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005868 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005869
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005870 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005871 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 if(IS_WDI_STATUS_FAILURE(status))
5873 {
5874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5875 "Failure in SEND Probe RSP Params WDI API" );
5876 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005878 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880}
Jeff Johnson295189b2012-06-20 16:38:30 -07005881#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5882/*
5883 * FUNCTION: WDA_SetMaxTxPowerCallBack
5884 * send the response to PE with power value received from WDI
5885 */
5886void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5887 void* pUserData)
5888{
5889 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5890 tWDA_CbContext *pWDA = NULL;
5891 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5892
5893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 if(NULL == pWdaParams)
5896 {
5897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005898 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005899 VOS_ASSERT(0) ;
5900 return ;
5901 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005902 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5903 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005904 if( NULL == pMaxTxPowerParams )
5905 {
5906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005907 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005908 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5910 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 return ;
5912 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005913
Jeff Johnson295189b2012-06-20 16:38:30 -07005914
5915 /*need to free memory for the pointers used in the
5916 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5918 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005919 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005920
Jeff Johnson295189b2012-06-20 16:38:30 -07005921
5922 /* send response to UMAC*/
5923 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5924
5925 return;
5926}
Jeff Johnson295189b2012-06-20 16:38:30 -07005927/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005928 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005929 * Request to WDI to send set Max Tx Power Request
5930 */
5931 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5932 tMaxTxPowerParams *MaxTxPowerParams)
5933{
5934 WDI_Status status = WDI_STATUS_SUCCESS;
5935 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5936 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005937
Jeff Johnson295189b2012-06-20 16:38:30 -07005938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005939 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005940
Jeff Johnson295189b2012-06-20 16:38:30 -07005941 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5942 sizeof(WDI_SetMaxTxPowerParamsType));
5943 if(NULL == wdiSetMaxTxPowerParams)
5944 {
5945 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005946 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 VOS_ASSERT(0);
5948 return VOS_STATUS_E_NOMEM;
5949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5951 if(NULL == pWdaParams)
5952 {
5953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005954 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 vos_mem_free(wdiSetMaxTxPowerParams);
5956 VOS_ASSERT(0);
5957 return VOS_STATUS_E_NOMEM;
5958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 /* Copy.Max.Tx.Power Params to WDI structure */
5960 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5961 MaxTxPowerParams->bssId,
5962 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5964 MaxTxPowerParams->selfStaMacAddr,
5965 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005966 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5967 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 pWdaParams->pWdaContext = pWDA;
5970 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005971 /* store Params pass it to WDI */
5972 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005973 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5974 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005975 if(IS_WDI_STATUS_FAILURE(status))
5976 {
5977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5978 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5980 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005981 /* send response to UMAC*/
5982 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 }
5984 return CONVERT_WDI2VOS_STATUS(status);
5985
5986}
Jeff Johnson295189b2012-06-20 16:38:30 -07005987#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005988#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005989/*
5990 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5991 * Free the memory. No need to send any response to PE in this case
5992 */
5993void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5994{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5996
Jeff Johnson295189b2012-06-20 16:38:30 -07005997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005998 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005999
6000 if(NULL == pWdaParams)
6001 {
6002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006003 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006004 VOS_ASSERT(0) ;
6005 return ;
6006 }
6007
6008 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6009 vos_mem_free(pWdaParams->wdaMsgParam) ;
6010 vos_mem_free(pWdaParams);
6011
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 /*
6013 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6014 * so just free the request param here
6015 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 return ;
6017}
6018
Jeff Johnson295189b2012-06-20 16:38:30 -07006019/*
6020 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6021 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6022 */
6023VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6024 tP2pPsParams *pP2pPsConfigParams)
6025{
6026 WDI_Status status = WDI_STATUS_SUCCESS ;
6027 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6028 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6029 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006030 tWDA_ReqParams *pWdaParams = NULL;
6031
Jeff Johnson295189b2012-06-20 16:38:30 -07006032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006033 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006034 if(NULL == wdiSetP2PGONOAReqParam)
6035 {
6036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006037 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006038 VOS_ASSERT(0);
6039 return VOS_STATUS_E_NOMEM;
6040 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006041
6042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6043 if(NULL == pWdaParams)
6044 {
6045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006046 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006047 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006048 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006049 VOS_ASSERT(0);
6050 return VOS_STATUS_E_NOMEM;
6051 }
6052
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6054 pP2pPsConfigParams->opp_ps;
6055 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6056 pP2pPsConfigParams->ctWindow;
6057 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6058 pP2pPsConfigParams->count;
6059 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6060 pP2pPsConfigParams->duration;
6061 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6062 pP2pPsConfigParams->interval;
6063 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6064 pP2pPsConfigParams->single_noa_duration;
6065 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6066 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006067
Jeff Johnson295189b2012-06-20 16:38:30 -07006068 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6069 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006070 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6071
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006073 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6074 pWdaParams->pWdaContext = pWDA;
6075
Jeff Johnson295189b2012-06-20 16:38:30 -07006076 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006077 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6078
Jeff Johnson295189b2012-06-20 16:38:30 -07006079 if(IS_WDI_STATUS_FAILURE(status))
6080 {
6081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6082 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6084 vos_mem_free(pWdaParams->wdaMsgParam);
6085 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 return CONVERT_WDI2VOS_STATUS(status);
6088
Jeff Johnson295189b2012-06-20 16:38:30 -07006089}
6090#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006091#ifdef WLAN_FEATURE_VOWIFI_11R
6092/*
6093 * FUNCTION: WDA_AggrAddTSReqCallback
6094 * send ADD AGGREGATED TS RSP back to PE
6095 */
6096void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6097{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006098 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6099 tWDA_CbContext *pWDA;
6100 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006101 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006103 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006104 if(NULL == pWdaParams)
6105 {
6106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006107 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006108 VOS_ASSERT(0) ;
6109 return ;
6110 }
6111
6112 pWDA = pWdaParams->pWdaContext;
6113 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006114
6115 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6116 {
6117 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006119 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006120
6121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6122 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006123 return ;
6124}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006125/*
6126 * FUNCTION: WDA_ProcessAddTSReq
6127 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6128 */
6129VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6130 tAggrAddTsParams *pAggrAddTsReqParams)
6131{
6132 WDI_Status status = WDI_STATUS_SUCCESS ;
6133 int i;
6134 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006135 tWDA_ReqParams *pWdaParams = NULL;
6136
6137
Jeff Johnson295189b2012-06-20 16:38:30 -07006138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006139 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6141 sizeof(WDI_AggrAddTSReqParamsType)) ;
6142 if(NULL == wdiAggrAddTSReqParam)
6143 {
6144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006145 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006146 VOS_ASSERT(0);
6147 return VOS_STATUS_E_NOMEM;
6148 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006149
6150
6151 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6152 if(NULL == pWdaParams)
6153 {
6154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006155 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006156 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006157 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006158 VOS_ASSERT(0);
6159 return VOS_STATUS_E_NOMEM;
6160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006161 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6162 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6163 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006164 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6165 {
6166 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6168 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6170 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6172 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6174 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6176 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6178 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6180 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6182 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6184 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6186 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6188 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6190 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6191 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6192 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6193 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6194 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6196 pAggrAddTsReqParams->tspec[i].inactInterval;
6197 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6198 pAggrAddTsReqParams->tspec[i].suspendInterval;
6199 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6200 pAggrAddTsReqParams->tspec[i].svcStartTime;
6201 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6202 pAggrAddTsReqParams->tspec[i].minDataRate;
6203 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6204 pAggrAddTsReqParams->tspec[i].meanDataRate;
6205 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6206 pAggrAddTsReqParams->tspec[i].peakDataRate;
6207 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6208 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6209 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6210 pAggrAddTsReqParams->tspec[i].delayBound;
6211 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6212 pAggrAddTsReqParams->tspec[i].minPhyRate;
6213 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6214 pAggrAddTsReqParams->tspec[i].surplusBw;
6215 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6216 pAggrAddTsReqParams->tspec[i].mediumTime;
6217 }
6218
6219 /* TODO: tAggrAddTsParams doesn't have the following fields */
6220#if 0
6221 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6222 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6223 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6224 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6225#endif
6226 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6227
6228 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006229 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006230 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006231 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6232
6233 pWdaParams->pWdaContext = pWDA;
6234
Jeff Johnson295189b2012-06-20 16:38:30 -07006235 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006236 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6237
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 if(IS_WDI_STATUS_FAILURE(status))
6239 {
6240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6241 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6243 vos_mem_free(pWdaParams);
6244
6245 /* send the failure response back to PE*/
6246 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6247 {
6248 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6249 }
6250
6251 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6252 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 return CONVERT_WDI2VOS_STATUS(status) ;
6255}
6256#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006257/*
6258 * FUNCTION: WDA_EnterImpsReqCallback
6259 * send Enter IMPS RSP back to PE
6260 */
6261void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6262{
6263 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006265 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006266 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 return ;
6268}
Jeff Johnson295189b2012-06-20 16:38:30 -07006269/*
6270 * FUNCTION: WDA_ProcessEnterImpsReq
6271 * Request to WDI to Enter IMPS power state.
6272 */
6273VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6274{
6275 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006277 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 if(IS_WDI_STATUS_FAILURE(status))
6280 {
6281 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6282 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006283 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 return CONVERT_WDI2VOS_STATUS(status) ;
6286}
Jeff Johnson295189b2012-06-20 16:38:30 -07006287/*
6288 * FUNCTION: WDA_ExitImpsReqCallback
6289 * send Exit IMPS RSP back to PE
6290 */
6291void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6292{
6293 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 return ;
6298}
Jeff Johnson295189b2012-06-20 16:38:30 -07006299/*
6300 * FUNCTION: WDA_ProcessExitImpsReq
6301 * Request to WDI to Exit IMPS power state.
6302 */
6303VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6304{
6305 WDI_Status status = WDI_STATUS_SUCCESS ;
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 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 if(IS_WDI_STATUS_FAILURE(status))
6310 {
6311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6312 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006313 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006314 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 return CONVERT_WDI2VOS_STATUS(status) ;
6316}
Jeff Johnson295189b2012-06-20 16:38:30 -07006317/*
6318 * FUNCTION: WDA_EnterBmpsReqCallback
6319 * send Enter BMPS RSP back to PE
6320 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006321void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006322{
6323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6324 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006325 tEnterBmpsParams *pEnterBmpsRspParams;
6326
Jeff Johnson295189b2012-06-20 16:38:30 -07006327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006328 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006329 if(NULL == pWdaParams)
6330 {
6331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006332 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006333 VOS_ASSERT(0) ;
6334 return ;
6335 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006336
6337 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6338 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6339
6340 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6341 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6342
6343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006344 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006345 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6346
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 return ;
6348}
Jeff Johnson295189b2012-06-20 16:38:30 -07006349/*
6350 * FUNCTION: WDA_ProcessEnterBmpsReq
6351 * Request to WDI to Enter BMPS power state.
6352 */
6353VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6354 tEnterBmpsParams *pEnterBmpsReqParams)
6355{
6356 WDI_Status status = WDI_STATUS_SUCCESS;
6357 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6358 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006361 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6362 {
6363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006364 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 VOS_ASSERT(0);
6366 return VOS_STATUS_E_FAILURE;
6367 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006368 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6369 if (NULL == wdiEnterBmpsReqParams)
6370 {
6371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006374 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6375 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006376 return VOS_STATUS_E_NOMEM;
6377 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6379 if (NULL == pWdaParams)
6380 {
6381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006382 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 VOS_ASSERT(0);
6384 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006385 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6386 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 return VOS_STATUS_E_NOMEM;
6388 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006389 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6390 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6391 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6392 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006393 // For CCX and 11R Roaming
6394 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6395 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6396 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6397 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006398
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 /* Store param pointer as passed in by caller */
6400 /* store Params pass it to WDI */
6401 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006402 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6405 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006406 if (IS_WDI_STATUS_FAILURE(status))
6407 {
6408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6409 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6410 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006411 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006412 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006413 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 return CONVERT_WDI2VOS_STATUS(status);
6416}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006417
6418
6419static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6420 WDI_Status wdiStatus,
6421 tExitBmpsParams *pExitBmpsReqParams)
6422{
6423 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6424
6425 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6426}
6427
6428
Jeff Johnson295189b2012-06-20 16:38:30 -07006429/*
6430 * FUNCTION: WDA_ExitBmpsReqCallback
6431 * send Exit BMPS RSP back to PE
6432 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006433void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006434{
6435 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6436 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006437 tExitBmpsParams *pExitBmpsRspParams;
6438
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006440 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006441 if(NULL == pWdaParams)
6442 {
6443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006444 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006445 VOS_ASSERT(0) ;
6446 return ;
6447 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006448
6449 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6450 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6451
6452 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6453 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006454
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6456 vos_mem_free(pWdaParams) ;
6457
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006458 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 return ;
6460}
Jeff Johnson295189b2012-06-20 16:38:30 -07006461/*
6462 * FUNCTION: WDA_ProcessExitBmpsReq
6463 * Request to WDI to Exit BMPS power state.
6464 */
6465VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6466 tExitBmpsParams *pExitBmpsReqParams)
6467{
6468 WDI_Status status = WDI_STATUS_SUCCESS ;
6469 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6470 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6471 sizeof(WDI_ExitBmpsReqParamsType)) ;
6472 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006474 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 if(NULL == wdiExitBmpsReqParams)
6476 {
6477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006478 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006479 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006480 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006481 return VOS_STATUS_E_NOMEM;
6482 }
6483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6484 if(NULL == pWdaParams)
6485 {
6486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006488 VOS_ASSERT(0);
6489 vos_mem_free(wdiExitBmpsReqParams);
6490 return VOS_STATUS_E_NOMEM;
6491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006492 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006493
6494 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6495
Jeff Johnson295189b2012-06-20 16:38:30 -07006496 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6497
6498 /* Store param pointer as passed in by caller */
6499 /* store Params pass it to WDI */
6500 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6501 pWdaParams->pWdaContext = pWDA;
6502 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006503 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6504 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006505 if(IS_WDI_STATUS_FAILURE(status))
6506 {
6507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6508 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6510 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006511 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006512 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 return CONVERT_WDI2VOS_STATUS(status) ;
6514}
Jeff Johnson295189b2012-06-20 16:38:30 -07006515/*
6516 * FUNCTION: WDA_EnterUapsdReqCallback
6517 * send Enter UAPSD RSP back to PE
6518 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006519void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006520{
6521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6522 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006523 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006525 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006526 if(NULL == pWdaParams)
6527 {
6528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006529 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006530 VOS_ASSERT(0) ;
6531 return ;
6532 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006533
6534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6535 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6536
6537 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6538 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6539
Jeff Johnson295189b2012-06-20 16:38:30 -07006540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6541 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006542 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 return ;
6544}
Jeff Johnson295189b2012-06-20 16:38:30 -07006545/*
6546 * FUNCTION: WDA_ProcessEnterUapsdReq
6547 * Request to WDI to Enter UAPSD power state.
6548 */
6549VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6550 tUapsdParams *pEnterUapsdReqParams)
6551{
6552 WDI_Status status = WDI_STATUS_SUCCESS ;
6553 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6554 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6555 sizeof(WDI_EnterUapsdReqParamsType)) ;
6556 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 if(NULL == wdiEnterUapsdReqParams)
6560 {
6561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 VOS_ASSERT(0);
6564 return VOS_STATUS_E_NOMEM;
6565 }
6566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6567 if(NULL == pWdaParams)
6568 {
6569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006571 VOS_ASSERT(0);
6572 vos_mem_free(wdiEnterUapsdReqParams);
6573 return VOS_STATUS_E_NOMEM;
6574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006575 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6576 pEnterUapsdReqParams->beDeliveryEnabled;
6577 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6578 pEnterUapsdReqParams->beTriggerEnabled;
6579 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6580 pEnterUapsdReqParams->bkDeliveryEnabled;
6581 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6582 pEnterUapsdReqParams->bkTriggerEnabled;
6583 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6584 pEnterUapsdReqParams->viDeliveryEnabled;
6585 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6586 pEnterUapsdReqParams->viTriggerEnabled;
6587 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6588 pEnterUapsdReqParams->voDeliveryEnabled;
6589 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6590 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006591 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006592
6593 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6594
Jeff Johnson295189b2012-06-20 16:38:30 -07006595 /* Store param pointer as passed in by caller */
6596 /* store Params pass it to WDI */
6597 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6598 pWdaParams->pWdaContext = pWDA;
6599 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006600 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6601 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006602 if(IS_WDI_STATUS_FAILURE(status))
6603 {
6604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6605 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6606 vos_mem_free(pWdaParams->wdaMsgParam) ;
6607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6608 vos_mem_free(pWdaParams) ;
6609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006610 return CONVERT_WDI2VOS_STATUS(status) ;
6611}
Jeff Johnson295189b2012-06-20 16:38:30 -07006612/*
6613 * FUNCTION: WDA_ExitUapsdReqCallback
6614 * send Exit UAPSD RSP back to PE
6615 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006616void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006617{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006618
6619 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6620 tWDA_CbContext *pWDA;
6621 tExitUapsdParams *pExitUapsdRspParams;
6622
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006624 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006625 if(NULL == pWdaParams)
6626 {
6627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006628 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006629 VOS_ASSERT(0);
6630 return;
6631 }
6632
6633 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6634 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6635
6636 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6637 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6638
6639 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6640 vos_mem_free(pWdaParams) ;
6641
6642 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006643 return ;
6644}
Jeff Johnson295189b2012-06-20 16:38:30 -07006645/*
6646 * FUNCTION: WDA_ProcessExitUapsdReq
6647 * Request to WDI to Exit UAPSD power state.
6648 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006649VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6650 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006651{
6652 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006653 tWDA_ReqParams *pWdaParams ;
6654 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6655 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6656 sizeof(WDI_ExitUapsdReqParamsType)) ;
6657
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006659 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006660
6661 if(NULL == wdiExitUapsdReqParams)
6662 {
6663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006664 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006665 VOS_ASSERT(0);
6666 return VOS_STATUS_E_NOMEM;
6667 }
6668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6669 if(NULL == pWdaParams)
6670 {
6671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006672 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006673 VOS_ASSERT(0);
6674 vos_mem_free(wdiExitUapsdReqParams);
6675 return VOS_STATUS_E_NOMEM;
6676 }
6677
6678 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6679 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6680
6681 /* Store param pointer as passed in by caller */
6682 /* store Params pass it to WDI */
6683 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6684 pWdaParams->pWdaContext = pWDA;
6685 pWdaParams->wdaMsgParam = pExitUapsdParams;
6686
6687 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 if(IS_WDI_STATUS_FAILURE(status))
6689 {
6690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6691 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006692 vos_mem_free(pWdaParams->wdaMsgParam) ;
6693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6694 vos_mem_free(pWdaParams) ;
6695
Jeff Johnson295189b2012-06-20 16:38:30 -07006696 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 return CONVERT_WDI2VOS_STATUS(status) ;
6698}
6699
Jeff Johnson295189b2012-06-20 16:38:30 -07006700/*
6701 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6702 *
6703 */
6704void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6705{
6706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006708 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006709 if(NULL == pWdaParams)
6710 {
6711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006712 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006713 VOS_ASSERT(0) ;
6714 return ;
6715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006716 if( pWdaParams != NULL )
6717 {
6718 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6719 {
6720 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6721 }
6722 if( pWdaParams->wdaMsgParam != NULL )
6723 {
6724 vos_mem_free(pWdaParams->wdaMsgParam) ;
6725 }
6726 vos_mem_free(pWdaParams) ;
6727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006728 return ;
6729}
Jeff Johnson295189b2012-06-20 16:38:30 -07006730/*
6731 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6732 * Request to WDI to set the power save params at start.
6733 */
6734VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6735 tSirPowerSaveCfg *pPowerSaveCfg)
6736{
6737 WDI_Status status = WDI_STATUS_SUCCESS ;
6738 tHalCfg *tlvStruct = NULL ;
6739 tANI_U8 *tlvStructStart = NULL ;
6740 v_PVOID_t *configParam;
6741 tANI_U32 configParamSize;
6742 tANI_U32 *configDataValue;
6743 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6744 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006746 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6748 {
6749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006750 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006751 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006752 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 return VOS_STATUS_E_FAILURE;
6754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6756 if (NULL == wdiPowerSaveCfg)
6757 {
6758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006759 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006761 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006762 return VOS_STATUS_E_NOMEM;
6763 }
6764 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6765 if(NULL == pWdaParams)
6766 {
6767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006768 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006769 VOS_ASSERT(0);
6770 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006771 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006772 return VOS_STATUS_E_NOMEM;
6773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6775 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006776 if(NULL == configParam)
6777 {
6778 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006779 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006780 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006781 vos_mem_free(pWdaParams);
6782 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006783 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006784 return VOS_STATUS_E_NOMEM;
6785 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 vos_mem_set(configParam, configParamSize, 0);
6787 wdiPowerSaveCfg->pConfigBuffer = configParam;
6788 tlvStruct = (tHalCfg *)configParam;
6789 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006790 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6791 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6792 tlvStruct->length = sizeof(tANI_U32);
6793 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6794 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
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_HEART_BEAT_THRESHOLD */
6798 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6799 tlvStruct->length = sizeof(tANI_U32);
6800 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6801 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
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_IGNORE_DTIM */
6805 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6806 tlvStruct->length = sizeof(tANI_U32);
6807 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6808 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
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_LISTEN_INTERVAL */
6812 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6813 tlvStruct->length = sizeof(tANI_U32);
6814 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6815 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
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_MAX_PS_POLL */
6819 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6820 tlvStruct->length = sizeof(tANI_U32);
6821 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6822 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6824 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6826 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6827 tlvStruct->length = sizeof(tANI_U32);
6828 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6829 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6831 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006832 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6833 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6834 tlvStruct->length = sizeof(tANI_U32);
6835 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6836 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
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_ENABLE_BCN_EARLY_TERM */
6840 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6841 tlvStruct->length = sizeof(tANI_U32);
6842 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6843 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006846 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6847 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6848 tlvStruct->length = sizeof(tANI_U32);
6849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6850 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6851 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6852 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6854 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6855 tlvStruct->length = sizeof(tANI_U32);
6856 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6857 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006858 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6859 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006860 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6861 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6862 tlvStruct->length = sizeof(tANI_U32);
6863 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6864 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6866 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 /* store Params pass it to WDI */
6870 pWdaParams->wdaMsgParam = configParam;
6871 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6872 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006873 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6874 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 if(IS_WDI_STATUS_FAILURE(status))
6876 {
6877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6878 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6879 vos_mem_free(pWdaParams->wdaMsgParam);
6880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6881 vos_mem_free(pWdaParams);
6882 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 return CONVERT_WDI2VOS_STATUS(status);
6885}
Jeff Johnson295189b2012-06-20 16:38:30 -07006886/*
6887 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6888 *
6889 */
6890void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6891{
6892 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006894 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6896 vos_mem_free(pWdaParams);
6897
Jeff Johnson295189b2012-06-20 16:38:30 -07006898 return ;
6899}
Jeff Johnson295189b2012-06-20 16:38:30 -07006900/*
6901 * FUNCTION: WDA_SetUapsdAcParamsReq
6902 * Request to WDI to set the UAPSD params for an ac (sta mode).
6903 */
6904VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6905 tUapsdInfo *pUapsdInfo)
6906{
6907 WDI_Status status = WDI_STATUS_SUCCESS;
6908 tWDA_CbContext *pWDA = NULL ;
6909 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6910 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6911 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6912 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006914 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 if(NULL == wdiUapsdParams)
6916 {
6917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006918 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 VOS_ASSERT(0);
6920 return VOS_STATUS_E_NOMEM;
6921 }
6922 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6923 if(NULL == pWdaParams)
6924 {
6925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006926 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006927 VOS_ASSERT(0);
6928 vos_mem_free(wdiUapsdParams);
6929 return VOS_STATUS_E_NOMEM;
6930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6932 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6933 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6934 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6935 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6936 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006937 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 pWdaParams->pWdaContext = pWDA;
6940 /* Store param pointer as passed in by caller */
6941 pWdaParams->wdaMsgParam = pUapsdInfo;
6942 /* store Params pass it to WDI */
6943 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006944 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6945 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6946 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006947 if(IS_WDI_STATUS_FAILURE(status))
6948 {
6949 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6950 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6952 vos_mem_free(pWdaParams);
6953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006954 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6955 return VOS_STATUS_SUCCESS;
6956 else
6957 return VOS_STATUS_E_FAILURE;
6958
Jeff Johnson295189b2012-06-20 16:38:30 -07006959}
6960/*
6961 * FUNCTION: WDA_ClearUapsdAcParamsReq
6962 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6963 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6964 * and again enter the UPASD with the modified params. Hence the disable
6965 * function was kept empty.
6966 *
6967 */
6968VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6969{
6970 /* do nothing */
6971 return VOS_STATUS_SUCCESS;
6972}
Jeff Johnson295189b2012-06-20 16:38:30 -07006973/*
6974 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6975 *
6976 */
6977void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6978{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6980
Jeff Johnson295189b2012-06-20 16:38:30 -07006981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006982 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006983
6984 if(NULL == pWdaParams)
6985 {
6986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006987 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006988 VOS_ASSERT(0) ;
6989 return ;
6990 }
6991
6992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6993 vos_mem_free(pWdaParams->wdaMsgParam);
6994 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006995
Jeff Johnson295189b2012-06-20 16:38:30 -07006996 //print a msg, nothing else to do
6997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6998 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 return ;
7000}
Jeff Johnson295189b2012-06-20 16:38:30 -07007001/*
7002 * FUNCTION: WDA_UpdateUapsdParamsReq
7003 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7004 */
7005VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7006 tUpdateUapsdParams* pUpdateUapsdInfo)
7007{
7008 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007009 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007010 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7011 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7012 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007013 tWDA_ReqParams *pWdaParams = NULL;
7014
Jeff Johnson295189b2012-06-20 16:38:30 -07007015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007016 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 if(NULL == wdiUpdateUapsdParams)
7018 {
7019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007020 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 VOS_ASSERT(0);
7022 return VOS_STATUS_E_NOMEM;
7023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7025 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7026 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007027
7028 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7029 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007030 {
7031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007032 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007034 vos_mem_free(pUpdateUapsdInfo);
7035 vos_mem_free(wdiUpdateUapsdParams);
7036 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007037 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007039 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007041 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7042 pWdaParams->pWdaContext = pWDA;
7043
Jeff Johnson43971f52012-07-17 12:26:56 -07007044 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007045 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7046 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007047
Jeff Johnson43971f52012-07-17 12:26:56 -07007048 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 {
7050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7051 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007052 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7053 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7054 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007055 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007057 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007058}
Jeff Johnson295189b2012-06-20 16:38:30 -07007059/*
7060 * FUNCTION: WDA_ConfigureRxpFilterCallback
7061 *
7062 */
7063void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7064{
7065 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007067 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007068 if(WDI_STATUS_SUCCESS != wdiStatus)
7069 {
7070 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007071 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007072 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 if(NULL == pWdaParams)
7074 {
7075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007077 VOS_ASSERT(0) ;
7078 return ;
7079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007080 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7081 vos_mem_free(pWdaParams->wdaMsgParam);
7082 vos_mem_free(pWdaParams);
7083 return ;
7084}
Jeff Johnson295189b2012-06-20 16:38:30 -07007085/*
7086 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7087 *
7088 */
7089VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7090 tSirWlanSetRxpFilters *pWlanSuspendParam)
7091{
Jeff Johnson295189b2012-06-20 16:38:30 -07007092 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007093 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007094 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7095 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7096 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7097 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007099 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007100 if(NULL == wdiRxpFilterParams)
7101 {
7102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007103 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007104 VOS_ASSERT(0);
7105 vos_mem_free(pWlanSuspendParam);
7106 return VOS_STATUS_E_NOMEM;
7107 }
7108 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7109 if(NULL == pWdaParams)
7110 {
7111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007112 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007113 VOS_ASSERT(0);
7114 vos_mem_free(wdiRxpFilterParams);
7115 vos_mem_free(pWlanSuspendParam);
7116 return VOS_STATUS_E_NOMEM;
7117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007118 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7119 pWlanSuspendParam->setMcstBcstFilter;
7120 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7121 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7122
7123 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007124 pWdaParams->pWdaContext = pWDA;
7125 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7126 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007127 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007128 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7129 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007130 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007131 {
7132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7133 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007134 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007135 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7136 vos_mem_free(pWdaParams->wdaMsgParam);
7137 vos_mem_free(pWdaParams);
7138 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007139 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007140}
Jeff Johnson295189b2012-06-20 16:38:30 -07007141/*
7142 * FUNCTION: WDA_WdiIndicationCallback
7143 *
7144 */
7145void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7146 void* pUserData)
7147{
7148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007149 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007150}
Jeff Johnson295189b2012-06-20 16:38:30 -07007151/*
7152 * FUNCTION: WDA_ProcessWlanSuspendInd
7153 *
7154 */
7155VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7156 tSirWlanSuspendParam *pWlanSuspendParam)
7157{
7158 WDI_Status wdiStatus;
7159 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007161 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7163 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7164 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7165 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7168 if(WDI_STATUS_PENDING == wdiStatus)
7169 {
7170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007171 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007172 }
7173 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7174 {
7175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 vos_mem_free(pWlanSuspendParam);
7179 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7180}
7181
Jeff Johnson295189b2012-06-20 16:38:30 -07007182/*
7183 * FUNCTION: WDA_ProcessWlanResumeCallback
7184 *
7185 */
7186void WDA_ProcessWlanResumeCallback(
7187 WDI_SuspendResumeRspParamsType *resumeRspParams,
7188 void* pUserData)
7189{
7190 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007191 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007192 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 if(NULL == pWdaParams)
7194 {
7195 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007196 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007197 VOS_ASSERT(0) ;
7198 return ;
7199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7201 {
7202 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007203 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7206 vos_mem_free(pWdaParams->wdaMsgParam);
7207 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 return ;
7209}
Jeff Johnson295189b2012-06-20 16:38:30 -07007210/*
7211 * FUNCTION: WDA_ProcessWlanResumeReq
7212 *
7213 */
7214VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7215 tSirWlanResumeParam *pWlanResumeParam)
7216{
7217 WDI_Status wdiStatus;
7218 WDI_ResumeParamsType *wdiResumeParams =
7219 (WDI_ResumeParamsType *)vos_mem_malloc(
7220 sizeof(WDI_ResumeParamsType) ) ;
7221 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007223 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if(NULL == wdiResumeParams)
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007228 VOS_ASSERT(0);
7229 return VOS_STATUS_E_NOMEM;
7230 }
7231 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7232 if(NULL == pWdaParams)
7233 {
7234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007236 VOS_ASSERT(0);
7237 vos_mem_free(wdiResumeParams);
7238 return VOS_STATUS_E_NOMEM;
7239 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007240 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7241 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 wdiResumeParams->wdiReqStatusCB = NULL;
7244 pWdaParams->wdaMsgParam = pWlanResumeParam;
7245 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7246 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007247 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7248 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7249 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007250 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7251 {
7252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7253 "Failure in Host Resume REQ WDI API, free all the memory " );
7254 VOS_ASSERT(0);
7255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7256 vos_mem_free(pWdaParams->wdaMsgParam);
7257 vos_mem_free(pWdaParams);
7258 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7260}
7261
Jeff Johnson295189b2012-06-20 16:38:30 -07007262/*
7263 * FUNCTION: WDA_SetBeaconFilterReqCallback
7264 *
7265 */
7266void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7267{
7268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007270 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007271 if(NULL == pWdaParams)
7272 {
7273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007274 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007275 VOS_ASSERT(0) ;
7276 return ;
7277 }
7278
7279 vos_mem_free(pWdaParams->wdaMsgParam) ;
7280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7281 vos_mem_free(pWdaParams) ;
7282 /*
7283 * No respone required for SetBeaconFilter req so just free the request
7284 * param here
7285 */
7286
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 return ;
7288}
Jeff Johnson295189b2012-06-20 16:38:30 -07007289/*
7290 * FUNCTION: WDA_SetBeaconFilterReq
7291 * Request to WDI to send the beacon filtering related information.
7292 */
7293VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7294 tBeaconFilterMsg* pBeaconFilterInfo)
7295{
7296 WDI_Status status = WDI_STATUS_SUCCESS;
7297 tANI_U8 *dstPtr, *srcPtr;
7298 tANI_U8 filterLength;
7299 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7300 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7301 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7302 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007304 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 if(NULL == wdiBeaconFilterInfo)
7306 {
7307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007309 VOS_ASSERT(0);
7310 return VOS_STATUS_E_NOMEM;
7311 }
7312 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7313 if(NULL == pWdaParams)
7314 {
7315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007316 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007317 VOS_ASSERT(0);
7318 vos_mem_free(wdiBeaconFilterInfo);
7319 return VOS_STATUS_E_NOMEM;
7320 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007321 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7322 pBeaconFilterInfo->beaconInterval;
7323 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7324 pBeaconFilterInfo->capabilityInfo;
7325 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7326 pBeaconFilterInfo->capabilityMask;
7327 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007328
7329 //Fill the BssIdx
7330 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7331
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 //Fill structure with info contained in the beaconFilterTable
7333 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7334 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7335 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7336 if(WDI_BEACON_FILTER_LEN < filterLength)
7337 {
7338 filterLength = WDI_BEACON_FILTER_LEN;
7339 }
7340 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7342 /* Store param pointer as passed in by caller */
7343 /* store Params pass it to WDI */
7344 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7345 pWdaParams->pWdaContext = pWDA;
7346 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7347
Jeff Johnson295189b2012-06-20 16:38:30 -07007348 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7349 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007350 if(IS_WDI_STATUS_FAILURE(status))
7351 {
7352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7353 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7354 vos_mem_free(pWdaParams->wdaMsgParam) ;
7355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7356 vos_mem_free(pWdaParams) ;
7357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007358 return CONVERT_WDI2VOS_STATUS(status) ;
7359}
Jeff Johnson295189b2012-06-20 16:38:30 -07007360/*
7361 * FUNCTION: WDA_RemBeaconFilterReqCallback
7362 *
7363 */
7364void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7365{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007366 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7367
Jeff Johnson295189b2012-06-20 16:38:30 -07007368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007369 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007370
7371 if(NULL == pWdaParams)
7372 {
7373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007374 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007375 VOS_ASSERT(0) ;
7376 return ;
7377 }
7378
7379 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7380 vos_mem_free(pWdaParams->wdaMsgParam);
7381 vos_mem_free(pWdaParams);
7382
Jeff Johnson295189b2012-06-20 16:38:30 -07007383 //print a msg, nothing else to do
7384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7385 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007386 return ;
7387}
Jeff Johnson295189b2012-06-20 16:38:30 -07007388 // TODO: PE does not have this feature for now implemented,
7389 // but the support for removing beacon filter exists between
7390 // HAL and FW. This function can be called whenever PE defines
7391 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007392/*
7393 * FUNCTION: WDA_RemBeaconFilterReq
7394 * Request to WDI to send the removal of beacon filtering related information.
7395 */
7396VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7397 tRemBeaconFilterMsg* pBeaconFilterInfo)
7398{
7399 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007400 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7402 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7403 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007404 tWDA_ReqParams *pWdaParams ;
7405
Jeff Johnson295189b2012-06-20 16:38:30 -07007406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007407 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007408 if(NULL == wdiBeaconFilterInfo)
7409 {
7410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 VOS_ASSERT(0);
7413 return VOS_STATUS_E_NOMEM;
7414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007415 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7416 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007417 //Fill structure with info contained in the ucRemIeId
7418 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7419 pBeaconFilterInfo->ucRemIeId,
7420 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7421 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007422
7423 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7424 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007425 {
7426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007427 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007429 vos_mem_free(wdiBeaconFilterInfo);
7430 vos_mem_free(pBeaconFilterInfo);
7431 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007432 }
7433
7434 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007435 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007436 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007437 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7438
7439 pWdaParams->pWdaContext = pWDA;
7440
Jeff Johnson43971f52012-07-17 12:26:56 -07007441 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007442 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007443 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 {
7445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7446 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007447 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7449 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007450 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007452 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007453}
Jeff Johnson295189b2012-06-20 16:38:30 -07007454/*
7455 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7456 *
7457 */
7458void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7459{
7460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007462 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007463 if(NULL == pWdaParams)
7464 {
7465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007466 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 VOS_ASSERT(0) ;
7468 return ;
7469 }
7470
7471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7472 vos_mem_free(pWdaParams) ;
7473
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 return ;
7475}
Jeff Johnson295189b2012-06-20 16:38:30 -07007476/*
7477 * FUNCTION: WDA_SetRSSIThresholdsReq
7478 * Request to WDI to set the RSSI thresholds (sta mode).
7479 */
7480VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7481{
7482 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007483 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007484 tWDA_CbContext *pWDA = NULL ;
7485 v_PVOID_t pVosContext = NULL;
7486 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7487 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7488 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7489 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007491 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 if(NULL == wdiRSSIThresholdsInfo)
7493 {
7494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 VOS_ASSERT(0);
7497 return VOS_STATUS_E_NOMEM;
7498 }
7499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7500 if(NULL == pWdaParams)
7501 {
7502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 VOS_ASSERT(0);
7505 vos_mem_free(wdiRSSIThresholdsInfo);
7506 return VOS_STATUS_E_NOMEM;
7507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007508 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7510 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7511 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7513 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7514 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7516 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7517 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7520 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7521
Jeff Johnson295189b2012-06-20 16:38:30 -07007522 /* Store param pointer as passed in by caller */
7523 /* store Params pass it to WDI */
7524 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7525 pWdaParams->pWdaContext = pWDA;
7526 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007527 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007528 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007529 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007530 {
7531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7532 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007533 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7535 vos_mem_free(pWdaParams) ;
7536 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007537 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007538
7539}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007540/*
7541 * FUNCTION: WDA_HostOffloadReqCallback
7542 *
7543 */
7544void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7545{
7546 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7547
7548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007549 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007550 if(NULL == pWdaParams)
7551 {
7552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007553 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007554 VOS_ASSERT(0) ;
7555 return ;
7556 }
7557
7558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7559 vos_mem_free(pWdaParams->wdaMsgParam);
7560 vos_mem_free(pWdaParams) ;
7561
7562 //print a msg, nothing else to do
7563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7564 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007565 return ;
7566}
Jeff Johnson295189b2012-06-20 16:38:30 -07007567/*
7568 * FUNCTION: WDA_ProcessHostOffloadReq
7569 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7570 * to broadcast traffic (sta mode).
7571 */
7572VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7573 tSirHostOffloadReq *pHostOffloadParams)
7574{
7575 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007576 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007577 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7578 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7579 sizeof(WDI_HostOffloadReqParamsType)) ;
7580 tWDA_ReqParams *pWdaParams ;
7581
7582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007583 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007584
7585 if(NULL == wdiHostOffloadInfo)
7586 {
7587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007588 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007589 VOS_ASSERT(0);
7590 return VOS_STATUS_E_NOMEM;
7591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007592 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7593 if(NULL == pWdaParams)
7594 {
7595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007596 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007597 VOS_ASSERT(0);
7598 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007599 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007600 return VOS_STATUS_E_NOMEM;
7601 }
7602
7603 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7604 pHostOffloadParams->offloadType;
7605 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7606 pHostOffloadParams->enableOrDisable;
7607
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007608 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7609 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7610
Jeff Johnson295189b2012-06-20 16:38:30 -07007611 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7612 {
7613 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7614 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7615 pHostOffloadParams->params.hostIpv4Addr,
7616 4);
7617 break;
7618 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7619 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7620 pHostOffloadParams->params.hostIpv6Addr,
7621 16);
7622 break;
7623 case SIR_IPV6_NS_OFFLOAD:
7624 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7625 pHostOffloadParams->params.hostIpv6Addr,
7626 16);
7627
7628#ifdef WLAN_NS_OFFLOAD
7629 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7630 {
7631 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7632 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7633 16);
7634 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7635 }
7636 else
7637 {
7638 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7639 }
7640
7641 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7642 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7643 16);
7644 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7645 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7646 6);
7647
7648 //Only two are supported so let's go through them without a loop
7649 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7650 {
7651 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7652 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7653 16);
7654 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7655 }
7656 else
7657 {
7658 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7659 }
7660
7661 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7662 {
7663 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7664 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7665 16);
7666 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7667 }
7668 else
7669 {
7670 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7671 }
7672 break;
7673#endif //WLAN_NS_OFFLOAD
7674 default:
7675 {
7676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7677 "No Handling for Offload Type %x in WDA "
7678 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7679 //WDA_VOS_ASSERT(0) ;
7680 }
7681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007683
Jeff Johnson295189b2012-06-20 16:38:30 -07007684 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007685 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 /* store Params pass it to WDI */
7687 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7688 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007689
Jeff Johnson295189b2012-06-20 16:38:30 -07007690
Jeff Johnson43971f52012-07-17 12:26:56 -07007691 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007692 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7693
Jeff Johnson43971f52012-07-17 12:26:56 -07007694 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 {
7696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7697 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007698 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007699 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7700 vos_mem_free(pWdaParams->wdaMsgParam);
7701 vos_mem_free(pWdaParams) ;
7702 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007703 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007704
7705}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007706/*
7707 * FUNCTION: WDA_KeepAliveReqCallback
7708 *
7709 */
7710void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7711{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007712 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7713
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007715 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007716
7717 if(NULL == pWdaParams)
7718 {
7719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007720 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007721 VOS_ASSERT(0) ;
7722 return ;
7723 }
7724
7725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7726 vos_mem_free(pWdaParams->wdaMsgParam);
7727 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007728
Jeff Johnson295189b2012-06-20 16:38:30 -07007729 //print a msg, nothing else to do
7730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7731 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007732 return ;
7733}
Jeff Johnson295189b2012-06-20 16:38:30 -07007734/*
7735 * FUNCTION: WDA_ProcessKeepAliveReq
7736 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7737 * wakeup due to broadcast traffic (sta mode).
7738 */
7739VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7740 tSirKeepAliveReq *pKeepAliveParams)
7741{
7742 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007743 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7745 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7746 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007747 tWDA_ReqParams *pWdaParams;
7748
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 if(NULL == wdiKeepAliveInfo)
7752 {
7753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007756 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007757 return VOS_STATUS_E_NOMEM;
7758 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007759
7760 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7761 if(NULL == pWdaParams)
7762 {
7763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007764 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007765 VOS_ASSERT(0);
7766 vos_mem_free(wdiKeepAliveInfo);
7767 vos_mem_free(pKeepAliveParams);
7768 return VOS_STATUS_E_NOMEM;
7769 }
7770
Jeff Johnson295189b2012-06-20 16:38:30 -07007771 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7772 pKeepAliveParams->packetType;
7773 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7774 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007775
7776 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7777 pKeepAliveParams->bssId,
7778 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007779
7780 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7781 {
7782 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7783 pKeepAliveParams->hostIpv4Addr,
7784 SIR_IPV4_ADDR_LEN);
7785 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7786 pKeepAliveParams->destIpv4Addr,
7787 SIR_IPV4_ADDR_LEN);
7788 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7789 pKeepAliveParams->destMacAddr,
7790 SIR_MAC_ADDR_LEN);
7791 }
7792 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7793 {
7794 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7795 SIR_IPV4_ADDR_LEN,
7796 0);
7797 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7798 SIR_IPV4_ADDR_LEN,
7799 0);
7800 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7801 SIR_MAC_ADDR_LEN,
7802 0);
7803 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007804 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007805
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007807 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007808 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007809 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7810 pWdaParams->pWdaContext = pWDA;
7811
Jeff Johnson295189b2012-06-20 16:38:30 -07007812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7813 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7814 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7815 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7816 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7817 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7818 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7819 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7820 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7821 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7823 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7824 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7825 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7826 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7827 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7828 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7829 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7831 "TimePeriod %d PacketType %d",
7832 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7833 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007834 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007835 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7836
Jeff Johnson43971f52012-07-17 12:26:56 -07007837 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007838 {
7839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7840 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007841 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007842 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7843 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007844 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007845 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007846 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007847
7848}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007849/*
7850 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7851 *
7852 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007853void WDA_WowlAddBcPtrnReqCallback(
7854 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7855 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007856{
7857 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007859 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007860 if(NULL == pWdaParams)
7861 {
7862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007863 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007864 VOS_ASSERT(0) ;
7865 return ;
7866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007867 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7868 vos_mem_free(pWdaParams->wdaMsgParam);
7869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007870 return ;
7871}
Jeff Johnson295189b2012-06-20 16:38:30 -07007872/*
7873 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7874 * Request to WDI to add WOWL Bcast pattern
7875 */
7876VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7877 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7878{
7879 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007880 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007881 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7882 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7883 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7884 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007886 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 if(NULL == wdiWowlAddBcPtrnInfo)
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 VOS_ASSERT(0);
7892 return VOS_STATUS_E_NOMEM;
7893 }
7894 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7895 if(NULL == pWdaParams)
7896 {
7897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007899 VOS_ASSERT(0);
7900 vos_mem_free(wdiWowlAddBcPtrnInfo);
7901 return VOS_STATUS_E_NOMEM;
7902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007903 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7904 pWowlAddBcPtrnParams->ucPatternId;
7905 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7906 pWowlAddBcPtrnParams->ucPatternByteOffset;
7907 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7908 pWowlAddBcPtrnParams->ucPatternMaskSize;
7909 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7910 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7912 {
7913 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7914 pWowlAddBcPtrnParams->ucPattern,
7915 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7916 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7917 pWowlAddBcPtrnParams->ucPatternMask,
7918 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7919 }
7920 else
7921 {
7922 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7923 pWowlAddBcPtrnParams->ucPattern,
7924 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7925 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7926 pWowlAddBcPtrnParams->ucPatternMask,
7927 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7928
7929 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7930 pWowlAddBcPtrnParams->ucPatternExt,
7931 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7932 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7933 pWowlAddBcPtrnParams->ucPatternMaskExt,
7934 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7935 }
7936
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007937 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7938 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7939
Jeff Johnson295189b2012-06-20 16:38:30 -07007940 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 /* Store param pointer as passed in by caller */
7942 /* store Params pass it to WDI */
7943 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7944 pWdaParams->pWdaContext = pWDA;
7945 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007946 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007948 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007949 {
7950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7951 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007952 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 vos_mem_free(pWdaParams->wdaMsgParam) ;
7954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7955 vos_mem_free(pWdaParams) ;
7956 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007957 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007958
7959}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007960/*
7961 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7962 *
7963 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007964void WDA_WowlDelBcPtrnReqCallback(
7965 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7966 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007967{
7968 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007970 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007971 if(NULL == pWdaParams)
7972 {
7973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007974 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007975 VOS_ASSERT(0) ;
7976 return ;
7977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007978 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7979 vos_mem_free(pWdaParams->wdaMsgParam);
7980 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007981 return ;
7982}
Jeff Johnson295189b2012-06-20 16:38:30 -07007983/*
7984 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7985 * Request to WDI to delete WOWL Bcast pattern
7986 */
7987VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7988 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7989{
7990 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007991 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007992 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7993 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7994 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7995 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007997 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 if(NULL == wdiWowlDelBcPtrnInfo)
7999 {
8000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008001 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008002 VOS_ASSERT(0);
8003 return VOS_STATUS_E_NOMEM;
8004 }
8005 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8006 if(NULL == pWdaParams)
8007 {
8008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008009 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 VOS_ASSERT(0);
8011 vos_mem_free(wdiWowlDelBcPtrnInfo);
8012 return VOS_STATUS_E_NOMEM;
8013 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008014 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8015 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008016
8017 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8018 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8019
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 /* Store param pointer as passed in by caller */
8022 /* store Params pass it to WDI */
8023 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8024 pWdaParams->pWdaContext = pWDA;
8025 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008026 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008028 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008029 {
8030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8031 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008032 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 vos_mem_free(pWdaParams->wdaMsgParam) ;
8034 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8035 vos_mem_free(pWdaParams) ;
8036 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008037 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008038
8039}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008040/*
8041 * FUNCTION: WDA_WowlEnterReqCallback
8042 *
8043 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008044void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008045{
8046 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8047 tWDA_CbContext *pWDA;
8048 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008050 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008051 if(NULL == pWdaParams)
8052 {
8053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008054 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008055 VOS_ASSERT(0) ;
8056 return ;
8057 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8059 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8060
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008061 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8062
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8064 vos_mem_free(pWdaParams) ;
8065
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008066 pWowlEnterParams->status =
8067 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 return ;
8070}
Jeff Johnson295189b2012-06-20 16:38:30 -07008071/*
8072 * FUNCTION: WDA_ProcessWowlEnterReq
8073 * Request to WDI to enter WOWL
8074 */
8075VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8076 tSirHalWowlEnterParams *pWowlEnterParams)
8077{
8078 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008079 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008080 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8081 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8082 sizeof(WDI_WowlEnterReqParamsType)) ;
8083 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008085 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 if(NULL == wdiWowlEnterInfo)
8087 {
8088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008089 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008090 VOS_ASSERT(0);
8091 return VOS_STATUS_E_NOMEM;
8092 }
8093 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8094 if(NULL == pWdaParams)
8095 {
8096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008097 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 VOS_ASSERT(0);
8099 vos_mem_free(wdiWowlEnterInfo);
8100 return VOS_STATUS_E_NOMEM;
8101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008102 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8103 pWowlEnterParams->magicPtrn,
8104 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008105 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8106 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008107 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8108 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8110 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008111 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8112 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008113 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8114 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008115 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8116 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008117 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8118 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008119 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8120 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008121#ifdef WLAN_WAKEUP_EVENTS
8122 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8123 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8124
8125 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8126 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8127
8128 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8129 pWowlEnterParams->ucWowNetScanOffloadMatch;
8130
8131 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8132 pWowlEnterParams->ucWowGTKRekeyError;
8133
8134 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8135 pWowlEnterParams->ucWoWBSSConnLoss;
8136#endif // WLAN_WAKEUP_EVENTS
8137
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008138 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8139 pWowlEnterParams->bssIdx;
8140
Jeff Johnson295189b2012-06-20 16:38:30 -07008141 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 /* Store param pointer as passed in by caller */
8143 /* store Params pass it to WDI */
8144 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8145 pWdaParams->pWdaContext = pWDA;
8146 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008147 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008148 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008149 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008150 {
8151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8152 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008153 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008154 vos_mem_free(pWdaParams->wdaMsgParam) ;
8155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8156 vos_mem_free(pWdaParams) ;
8157 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008158 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008159
8160}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008161/*
8162 * FUNCTION: WDA_WowlExitReqCallback
8163 *
8164 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008165void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008166{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008167 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8168 tWDA_CbContext *pWDA;
8169 tSirHalWowlExitParams *pWowlExitParams;
8170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008171 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008172 if(NULL == pWdaParams)
8173 {
8174 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008175 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008176 VOS_ASSERT(0) ;
8177 return ;
8178 }
8179 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8180 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8181
8182 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8183 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8184
8185 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8186 vos_mem_free(pWdaParams) ;
8187
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008189 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008190 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008191 return ;
8192}
Jeff Johnson295189b2012-06-20 16:38:30 -07008193/*
8194 * FUNCTION: WDA_ProcessWowlExitReq
8195 * Request to WDI to add WOWL Bcast pattern
8196 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008197VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8198 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008199{
8200 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008201 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008202 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8203 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8204 sizeof(WDI_WowlExitReqParamsType)) ;
8205 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008207 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008208 if(NULL == wdiWowlExitInfo)
8209 {
8210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008211 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008212 VOS_ASSERT(0);
8213 return VOS_STATUS_E_NOMEM;
8214 }
8215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8216 if(NULL == pWdaParams)
8217 {
8218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008219 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008220 VOS_ASSERT(0);
8221 vos_mem_free(wdiWowlExitInfo);
8222 return VOS_STATUS_E_NOMEM;
8223 }
8224
8225 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8226 pWowlExitParams->bssIdx;
8227
8228 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8229
8230 /* Store param pointer as passed in by caller */
8231 /* store Params pass it to WDI */
8232 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8233 pWdaParams->pWdaContext = pWDA;
8234 pWdaParams->wdaMsgParam = pWowlExitParams;
8235
8236 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8237 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008238
Jeff Johnson43971f52012-07-17 12:26:56 -07008239 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008240 {
8241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8242 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008243 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008244 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8245 vos_mem_free(pWdaParams->wdaMsgParam);
8246 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008247 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008248 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008249}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008250/*
8251 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8252 * Request to WDI to determine whether a given station is capable of
8253 * using HW-based frame translation
8254 */
8255v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8256 tANI_U8 staIdx)
8257{
8258 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8259}
Jeff Johnson295189b2012-06-20 16:38:30 -07008260/*
8261 * FUNCTION: WDA_NvDownloadReqCallback
8262 * send NV Download RSP back to PE
8263 */
8264void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8265 void* pUserData)
8266{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008267
8268 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8269 tWDA_CbContext *pWDA;
8270
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008272 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008273
8274 if(NULL == pWdaParams)
8275 {
8276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008277 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008278 VOS_ASSERT(0) ;
8279 return ;
8280 }
8281
8282 pWDA = pWdaParams->pWdaContext;
8283
Jeff Johnson295189b2012-06-20 16:38:30 -07008284 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008285 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8286 vos_mem_free(pWdaParams);
8287
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 return ;
8290}
Jeff Johnson295189b2012-06-20 16:38:30 -07008291/*
8292 * FUNCTION: WDA_ProcessNvDownloadReq
8293 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8294 */
8295VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8296{
8297 /* Initialize the local Variables*/
8298 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8299 v_VOID_t *pNvBuffer=NULL;
8300 v_SIZE_t bufferSize = 0;
8301 WDI_Status status = WDI_STATUS_E_FAILURE;
8302 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008303 tWDA_ReqParams *pWdaParams ;
8304
Jeff Johnson295189b2012-06-20 16:38:30 -07008305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 if(NULL == pWDA)
8308 {
8309 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008310 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008311 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008312 return VOS_STATUS_E_FAILURE;
8313 }
8314
8315 /* Get the NV structure base address and size from VOS */
8316 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008317 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8318 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008319 if(NULL == wdiNvDownloadReqParam)
8320 {
8321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008322 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 VOS_ASSERT(0);
8324 return VOS_STATUS_E_NOMEM;
8325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008326 /* Copy Params to wdiNvDownloadReqParam*/
8327 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8328 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008329
8330 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8331 if(NULL == pWdaParams)
8332 {
8333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008335 VOS_ASSERT(0);
8336 vos_mem_free(wdiNvDownloadReqParam);
8337 return VOS_STATUS_E_NOMEM;
8338 }
8339
Jeff Johnson295189b2012-06-20 16:38:30 -07008340 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008341 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8342 pWdaParams->wdaMsgParam = NULL;
8343 pWdaParams->pWdaContext = pWDA;
8344
8345
Jeff Johnson295189b2012-06-20 16:38:30 -07008346 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008347
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008349 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8350
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 if(IS_WDI_STATUS_FAILURE(status))
8352 {
8353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8354 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8356 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008359}
8360/*
8361 * FUNCTION: WDA_FlushAcReqCallback
8362 * send Flush AC RSP back to TL
8363 */
8364void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8365{
8366 vos_msg_t wdaMsg = {0} ;
8367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8368 tFlushACReq *pFlushACReqParams;
8369 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 if(NULL == pWdaParams)
8373 {
8374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008375 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 VOS_ASSERT(0) ;
8377 return ;
8378 }
8379
8380 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8381 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8382 if(NULL == pFlushACRspParams)
8383 {
8384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008385 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008387 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 return ;
8389 }
8390 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8391 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8392 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8393 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8394 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8395 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 vos_mem_free(pWdaParams->wdaMsgParam) ;
8397 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8398 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8400 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8401 // POST message to TL
8402 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8403
Jeff Johnson295189b2012-06-20 16:38:30 -07008404 return ;
8405}
Jeff Johnson295189b2012-06-20 16:38:30 -07008406/*
8407 * FUNCTION: WDA_ProcessFlushAcReq
8408 * Request to WDI to Update the DELBA REQ params.
8409 */
8410VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8411 tFlushACReq *pFlushAcReqParams)
8412{
8413 WDI_Status status = WDI_STATUS_SUCCESS ;
8414 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8415 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8416 sizeof(WDI_FlushAcReqParamsType)) ;
8417 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 if(NULL == wdiFlushAcReqParam)
8419 {
8420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008421 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008422 VOS_ASSERT(0);
8423 return VOS_STATUS_E_NOMEM;
8424 }
8425 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8426 if(NULL == pWdaParams)
8427 {
8428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008429 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008430 VOS_ASSERT(0);
8431 vos_mem_free(wdiFlushAcReqParam);
8432 return VOS_STATUS_E_NOMEM;
8433 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008435 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008436 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8437 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8438 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8439 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 /* Store Flush AC pointer, as this will be used for response */
8441 /* store Params pass it to WDI */
8442 pWdaParams->pWdaContext = pWDA;
8443 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8444 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8446 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008447 if(IS_WDI_STATUS_FAILURE(status))
8448 {
8449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8450 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8451 vos_mem_free(pWdaParams->wdaMsgParam) ;
8452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8453 vos_mem_free(pWdaParams) ;
8454 //TODO: respond to TL with failure
8455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008456 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008457}
Jeff Johnson295189b2012-06-20 16:38:30 -07008458/*
8459 * FUNCTION: WDA_BtAmpEventReqCallback
8460 *
8461 */
8462void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8463{
8464 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8465 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008466 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008467
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008469 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008470 if(NULL == pWdaParams)
8471 {
8472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008473 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008474 VOS_ASSERT(0) ;
8475 return ;
8476 }
8477 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8478 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8479 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8480 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8481 {
8482 pWDA->wdaAmpSessionOn = VOS_FALSE;
8483 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008484 vos_mem_free(pWdaParams->wdaMsgParam) ;
8485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8486 vos_mem_free(pWdaParams) ;
8487 /*
8488 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8489 * param here
8490 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008491 return ;
8492}
8493
Jeff Johnson295189b2012-06-20 16:38:30 -07008494/*
8495 * FUNCTION: WDA_ProcessBtAmpEventReq
8496 * Request to WDI to Update with BT AMP events.
8497 */
8498VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8499 tSmeBtAmpEvent *pBtAmpEventParams)
8500{
8501 WDI_Status status = WDI_STATUS_SUCCESS ;
8502 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8503 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8504 sizeof(WDI_BtAmpEventParamsType)) ;
8505 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008507 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 if(NULL == wdiBtAmpEventParam)
8509 {
8510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008511 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 VOS_ASSERT(0);
8513 return VOS_STATUS_E_NOMEM;
8514 }
8515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8516 if(NULL == pWdaParams)
8517 {
8518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008520 VOS_ASSERT(0);
8521 vos_mem_free(wdiBtAmpEventParam);
8522 return VOS_STATUS_E_NOMEM;
8523 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008524 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8525 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008526 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 /* Store BT AMP event pointer, as this will be used for response */
8528 /* store Params pass it to WDI */
8529 pWdaParams->pWdaContext = pWDA;
8530 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8531 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8533 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008534 if(IS_WDI_STATUS_FAILURE(status))
8535 {
8536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8537 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8538 vos_mem_free(pWdaParams->wdaMsgParam) ;
8539 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8540 vos_mem_free(pWdaParams) ;
8541 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008542 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8543 {
8544 pWDA->wdaAmpSessionOn = VOS_TRUE;
8545 }
8546 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008547}
8548
Jeff Johnson295189b2012-06-20 16:38:30 -07008549#ifdef ANI_MANF_DIAG
8550/*
8551 * FUNCTION: WDA_FTMCommandReqCallback
8552 * Handle FTM CMD response came from HAL
8553 * Route responce to HDD FTM
8554 */
8555void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8556 void *usrData)
8557{
8558 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008559 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8560 {
8561 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008562 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008563 return;
8564 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008565 /* Release Current FTM Command Request */
8566 vos_mem_free(pWDA->wdaFTMCmdReq);
8567 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008568#ifndef WLAN_FTM_STUB
8569 /* Post FTM Responce to HDD FTM */
8570 wlan_sys_ftm(ftmCmdRspData);
8571#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008572 return;
8573}
Jeff Johnson295189b2012-06-20 16:38:30 -07008574/*
8575 * FUNCTION: WDA_ProcessFTMCommand
8576 * Send FTM command to WDI
8577 */
8578VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8579 tPttMsgbuffer *pPTTFtmCmd)
8580{
8581 WDI_Status status = WDI_STATUS_SUCCESS;
8582 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008583 ftmCMDReq = (WDI_FTMCommandReqType *)
8584 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8585 if(NULL == ftmCMDReq)
8586 {
8587 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8588 "WDA FTM Command buffer alloc fail");
8589 return VOS_STATUS_E_NOMEM;
8590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008591 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8592 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008593 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 /* Send command to WDI */
8595 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008596 return status;
8597}
8598#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008599#ifdef FEATURE_OEM_DATA_SUPPORT
8600/*
8601 * FUNCTION: WDA_StartOemDataReqCallback
8602 *
8603 */
8604void WDA_StartOemDataReqCallback(
8605 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8606 void* pUserData)
8607{
8608 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008609 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8610 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008611 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008612
Jeff Johnsone7245742012-09-05 17:12:55 -07008613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008614 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008615
8616 if(NULL == pWdaParams)
8617 {
8618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008619 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008620 VOS_ASSERT(0) ;
8621 return ;
8622 }
8623 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8624
Jeff Johnsone7245742012-09-05 17:12:55 -07008625 if(NULL == pWDA)
8626 {
8627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008628 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008629 VOS_ASSERT(0);
8630 return ;
8631 }
8632
8633 /*
8634 * Allocate memory for response params sent to PE
8635 */
8636 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8637
8638 // Check if memory is allocated for OemdataMeasRsp Params.
8639 if(NULL == pOemDataRspParams)
8640 {
8641 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8642 "OEM DATA WDA callback alloc fail");
8643 VOS_ASSERT(0) ;
8644 return;
8645 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008646
Jeff Johnsone7245742012-09-05 17:12:55 -07008647 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008648 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8649 vos_mem_free(pWdaParams->wdaMsgParam);
8650 vos_mem_free(pWdaParams) ;
8651
Jeff Johnsone7245742012-09-05 17:12:55 -07008652 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08008653 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -07008654 * Also, here success always means that we have atleast one BSSID.
8655 */
8656 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8657
8658 //enable Tx
8659 status = WDA_ResumeDataTx(pWDA);
8660 if(status != VOS_STATUS_SUCCESS)
8661 {
8662 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8663 }
8664 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8665 return ;
8666}
8667/*
8668 * FUNCTION: WDA_ProcessStartOemDataReq
8669 * Send Start Oem Data Req to WDI
8670 */
8671VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8672 tStartOemDataReq *pOemDataReqParams)
8673{
8674 WDI_Status status = WDI_STATUS_SUCCESS;
8675 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008676 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008677
8678 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8679
8680 if(NULL == wdiOemDataReqParams)
8681 {
8682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008684 VOS_ASSERT(0);
8685 return VOS_STATUS_E_NOMEM;
8686 }
8687
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008688 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8689 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8690 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8691 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008692
8693 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8694
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008695 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8696 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008697 {
8698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008699 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008700 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008701 vos_mem_free(pOemDataReqParams);
8702 VOS_ASSERT(0);
8703 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008704 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008705
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008706 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8707 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8708
8709 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8710 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008711
8712 if(IS_WDI_STATUS_FAILURE(status))
8713 {
8714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8715 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008716 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8717 vos_mem_free(pWdaParams->wdaMsgParam);
8718 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008719 }
8720 return CONVERT_WDI2VOS_STATUS(status) ;
8721}
8722#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008723/*
8724 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8725 *
8726 */
8727void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8728{
8729 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008731 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008732 if(NULL == pWdaParams)
8733 {
8734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008735 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008736 VOS_ASSERT(0) ;
8737 return ;
8738 }
8739
8740 if(NULL != pWdaParams->wdaMsgParam)
8741 {
8742 vos_mem_free(pWdaParams->wdaMsgParam);
8743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008744 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8745 {
8746 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8747 }
8748
8749 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008750 return ;
8751}
Jeff Johnson295189b2012-06-20 16:38:30 -07008752#ifdef WLAN_FEATURE_GTK_OFFLOAD
8753/*
8754 * FUNCTION: WDA_HostOffloadReqCallback
8755 *
8756 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008757void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8758 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008759{
8760 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8761
8762 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008763 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008764
8765 VOS_ASSERT(NULL != pWdaParams);
8766
8767 vos_mem_free(pWdaParams->wdaMsgParam) ;
8768 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8769 vos_mem_free(pWdaParams) ;
8770
8771 //print a msg, nothing else to do
8772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8773 "WDA_GTKOffloadReqCallback invoked " );
8774
8775 return ;
8776}
8777
8778/*
8779 * FUNCTION: WDA_ProcessGTKOffloadReq
8780 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8781 * to broadcast traffic (sta mode).
8782 */
8783VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8784 tpSirGtkOffloadParams pGtkOffloadParams)
8785{
8786 VOS_STATUS status = VOS_STATUS_SUCCESS;
8787 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8788 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8789 sizeof(WDI_GtkOffloadReqMsg)) ;
8790 tWDA_ReqParams *pWdaParams ;
8791
8792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008793 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008794
8795 if(NULL == wdiGtkOffloadReqMsg)
8796 {
8797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008798 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 VOS_ASSERT(0);
8800 return VOS_STATUS_E_NOMEM;
8801 }
8802
8803 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8804 if(NULL == pWdaParams)
8805 {
8806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008807 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008808 VOS_ASSERT(0);
8809 vos_mem_free(wdiGtkOffloadReqMsg);
8810 return VOS_STATUS_E_NOMEM;
8811 }
8812
8813 //
8814 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8815 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008816
8817 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8818 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8819
Jeff Johnson295189b2012-06-20 16:38:30 -07008820 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8821 // Copy KCK
8822 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8823 // Copy KEK
8824 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8825 // Copy KeyReplayCounter
8826 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8827 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8828
8829 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8830
8831 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8832 (NULL == pWDA->wdaWdiApiMsgParam));
8833
8834 /* Store Params pass it to WDI */
8835 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8836 pWdaParams->pWdaContext = pWDA;
8837 /* Store param pointer as passed in by caller */
8838 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8839
8840 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8841
8842 if(IS_WDI_STATUS_FAILURE(status))
8843 {
8844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8845 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8847 vos_mem_free(pWdaParams->wdaMsgParam);
8848 vos_mem_free(pWdaParams);
8849 }
8850
8851 return CONVERT_WDI2VOS_STATUS(status) ;
8852}
8853
8854/*
8855 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8856 *
8857 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008858void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8859 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008860{
8861 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8862 tWDA_CbContext *pWDA;
8863 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8864 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8865 tANI_U8 i;
8866 vos_msg_t vosMsg;
8867
8868 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008869 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008870
8871 VOS_ASSERT(NULL != pWdaParams);
8872
8873 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8874 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8875
8876 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8877 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8878
8879 /* Message Header */
8880 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8881 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8882
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008883 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8884 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8885 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8886 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8887 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8888 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008889
8890 /* VOS message wrapper */
8891 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8892 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8893 vosMsg.bodyval = 0;
8894
8895 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8896 {
8897 /* free the mem and return */
8898 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8899 }
8900
8901 vos_mem_free(pWdaParams->wdaMsgParam) ;
8902 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8903 vos_mem_free(pWdaParams) ;
8904}
8905#endif
8906
8907/*
8908 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8909 * Request to WDI to set Tx Per Tracking configurations
8910 */
8911VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8912{
8913 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008914 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8916 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8917 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8918 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008920 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008921 if(NULL == pwdiSetTxPerTrackingReqParams)
8922 {
8923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008924 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008925 vos_mem_free(pTxPerTrackingParams);
8926 VOS_ASSERT(0);
8927 return VOS_STATUS_E_NOMEM;
8928 }
8929 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8930 if(NULL == pWdaParams)
8931 {
8932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008933 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008934 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8935 vos_mem_free(pTxPerTrackingParams);
8936 VOS_ASSERT(0);
8937 return VOS_STATUS_E_NOMEM;
8938 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8940 pTxPerTrackingParams->ucTxPerTrackingEnable;
8941 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8942 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8943 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8944 pTxPerTrackingParams->ucTxPerTrackingRatio;
8945 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8946 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008947 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 /* Store param pointer as passed in by caller */
8949 /* store Params pass it to WDI
8950 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8951 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8952 pWdaParams->pWdaContext = pWDA;
8953 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008954 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008955 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008956 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008957 {
8958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8959 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008960 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008961 vos_mem_free(pWdaParams->wdaMsgParam) ;
8962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8963 vos_mem_free(pWdaParams) ;
8964 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008965 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008966
8967}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008968/*
8969 * FUNCTION: WDA_HALDumpCmdCallback
8970 * Send the VOS complete .
8971 */
8972void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8973 void* pUserData)
8974{
8975 tANI_U8 *buffer = NULL;
8976 tWDA_CbContext *pWDA = NULL;
8977 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008978 if(NULL == pWdaParams)
8979 {
8980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008981 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 VOS_ASSERT(0) ;
8983 return ;
8984 }
8985
8986 pWDA = pWdaParams->pWdaContext;
8987 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008988 if(wdiRspParams->usBufferLen > 0)
8989 {
8990 /*Copy the Resp data to UMAC supplied buffer*/
8991 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8992 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8994 vos_mem_free(pWdaParams);
8995
8996 /* Indicate VOSS about the start complete */
8997 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008998 return ;
8999}
9000
Jeff Johnson295189b2012-06-20 16:38:30 -07009001/*
9002 * FUNCTION: WDA_ProcessHALDumpCmdReq
9003 * Send Dump command to WDI
9004 */
9005VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9006 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9007 tANI_U32 arg4, tANI_U8 *pBuffer)
9008{
9009 WDI_Status status = WDI_STATUS_SUCCESS;
9010 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9011 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9012 tWDA_ReqParams *pWdaParams ;
9013 pVosContextType pVosContext = NULL;
9014 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009015 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9016 (void *)pMac);
9017
9018 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9019 if(NULL == pWdaParams)
9020 {
9021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009023 return VOS_STATUS_E_NOMEM;
9024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009025 /* Allocate memory WDI request structure*/
9026 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9027 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9028 if(NULL == wdiHALDumpCmdReqParam)
9029 {
9030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9031 "WDA HAL DUMP Command buffer alloc fail");
9032 vos_mem_free(pWdaParams);
9033 return WDI_STATUS_E_FAILURE;
9034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009035 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 /* Extract the arguments */
9037 wdiHalDumpCmdInfo->command = cmd;
9038 wdiHalDumpCmdInfo->argument1 = arg1;
9039 wdiHalDumpCmdInfo->argument2 = arg2;
9040 wdiHalDumpCmdInfo->argument3 = arg3;
9041 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009042 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9044
9045 /* Response message will be passed through the buffer */
9046 pWdaParams->wdaMsgParam = (void *)pBuffer;
9047
9048 /* store Params pass it to WDI */
9049 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009050 /* Send command to WDI */
9051 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009052 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 if ( vStatus != VOS_STATUS_SUCCESS )
9054 {
9055 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9056 {
9057 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -08009058 "%s: Timeout occurred before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009059 }
9060 else
9061 {
9062 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009063 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009064 }
9065 VOS_ASSERT(0);
9066 }
9067 return status;
9068}
Jeff Johnson295189b2012-06-20 16:38:30 -07009069#ifdef WLAN_FEATURE_GTK_OFFLOAD
9070/*
9071 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9072 * Request to WDI to get GTK Offload Information
9073 */
9074VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9075 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9076{
9077 VOS_STATUS status = VOS_STATUS_SUCCESS;
9078 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9079 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9080 tWDA_ReqParams *pWdaParams ;
9081
9082 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9083 {
9084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009085 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 VOS_ASSERT(0);
9087 return VOS_STATUS_E_NOMEM;
9088 }
9089
9090 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9091 if(NULL == pWdaParams)
9092 {
9093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009094 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009095 VOS_ASSERT(0);
9096 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9097 return VOS_STATUS_E_NOMEM;
9098 }
9099
9100 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9101
9102 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9103 (NULL == pWDA->wdaWdiApiMsgParam));
9104
9105 /* Store Params pass it to WDI */
9106 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9107 pWdaParams->pWdaContext = pWDA;
9108 /* Store param pointer as passed in by caller */
9109 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9110
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009111 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9112 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9113
Jeff Johnson295189b2012-06-20 16:38:30 -07009114 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9115
9116 if(IS_WDI_STATUS_FAILURE(status))
9117 {
9118 /* failure returned by WDI API */
9119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9120 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9121 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9122 vos_mem_free(pWdaParams) ;
9123 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9124 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9125 }
9126
9127 return CONVERT_WDI2VOS_STATUS(status) ;
9128}
9129#endif // WLAN_FEATURE_GTK_OFFLOAD
9130
9131/*
9132 * -------------------------------------------------------------------------
9133 * DATA interface with WDI for Mgmt Frames
9134 * -------------------------------------------------------------------------
9135 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009136/*
9137 * FUNCTION: WDA_TxComplete
9138 * Callback function for the WDA_TxPacket
9139 */
9140VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9141 VOS_STATUS status )
9142{
9143
9144 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9145 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009146 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009147
9148 if(NULL == wdaContext)
9149 {
9150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9151 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009152 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009153 VOS_ASSERT(0);
9154 return VOS_STATUS_E_FAILURE;
9155 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009156
9157 /*Check if frame was timed out or not*/
9158 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9159 (v_PVOID_t)&uUserData);
9160
9161 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9162 {
9163 /*Discard frame - no further processing is needed*/
9164 vos_pkt_return_packet(pData);
9165 return VOS_STATUS_SUCCESS;
9166 }
9167
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9169 if( NULL!=wdaContext->pTxCbFunc)
9170 {
9171 /*check if packet is freed already*/
9172 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9173 {
9174 wdaContext->pTxCbFunc(pMac, pData);
9175 }
9176 else
9177 {
9178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9179 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009180 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009181 //Return from here since we reaching here because the packet already timeout
9182 return status;
9183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009184 }
9185
9186 /*
9187 * Trigger the event to bring the HAL TL Tx complete function to come
9188 * out of wait
9189 * Let the coe above to complete the packet first. When this event is set,
9190 * the thread waiting for the event may run and set Vospacket_freed causing the original
9191 * packet not being freed.
9192 */
9193 status = vos_event_set(&wdaContext->txFrameEvent);
9194 if(!VOS_IS_STATUS_SUCCESS(status))
9195 {
9196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9197 "NEW VOS Event Set failed - status = %d \n", status);
9198 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009199 return status;
9200}
Jeff Johnson295189b2012-06-20 16:38:30 -07009201/*
9202 * FUNCTION: WDA_TxPacket
9203 * Forward TX management frame to WDI
9204 */
9205VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9206 void *pFrmBuf,
9207 tANI_U16 frmLen,
9208 eFrameType frmType,
9209 eFrameTxDir txDir,
9210 tANI_U8 tid,
9211 pWDATxRxCompFunc pCompFunc,
9212 void *pData,
9213 pWDAAckFnTxComp pAckTxComp,
9214 tANI_U8 txFlag)
9215{
9216 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9217 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9218 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9219 tANI_U8 eventIdx = 0;
9220 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9221 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 if((NULL == pWDA)||(NULL == pFrmBuf))
9223 {
9224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9225 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009226 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009227 VOS_ASSERT(0);
9228 return VOS_STATUS_E_FAILURE;
9229 }
9230
9231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9232 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009233 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9234 if(NULL == pMac)
9235 {
9236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009237 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009238 VOS_ASSERT(0);
9239 return VOS_STATUS_E_FAILURE;
9240 }
9241
9242
9243
9244 /* store the call back function in WDA context */
9245 pWDA->pTxCbFunc = pCompFunc;
9246 /* store the call back for the function of ackTxComplete */
9247 if( pAckTxComp )
9248 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009249 if( NULL != pWDA->pAckTxCbFunc )
9250 {
9251 /* Already TxComp is active no need to active again */
9252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9253 "There is already one request pending for tx complete\n");
9254 pWDA->pAckTxCbFunc( pMac, 0);
9255 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009256
Jeff Johnsone7245742012-09-05 17:12:55 -07009257 if( VOS_STATUS_SUCCESS !=
9258 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9259 {
9260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9261 "Tx Complete timeout Timer Stop Failed ");
9262 }
9263 else
9264 {
9265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -08009266 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -07009267 }
9268 }
9269
9270 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9271 pWDA->pAckTxCbFunc = pAckTxComp;
9272 if( VOS_STATUS_SUCCESS !=
9273 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9274 {
9275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9276 "Tx Complete Timer Start Failed ");
9277 pWDA->pAckTxCbFunc = NULL;
9278 return eHAL_STATUS_FAILURE;
9279 }
9280 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009281 /* Reset the event to be not signalled */
9282 status = vos_event_reset(&pWDA->txFrameEvent);
9283 if(!VOS_IS_STATUS_SUCCESS(status))
9284 {
9285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9286 "VOS Event reset failed - status = %d\n",status);
9287 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9288 if( pAckTxComp )
9289 {
9290 pWDA->pAckTxCbFunc = NULL;
9291 if( VOS_STATUS_SUCCESS !=
9292 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9293 {
9294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9295 "Tx Complete timeout Timer Stop Failed ");
9296 }
9297 }
9298 return VOS_STATUS_E_FAILURE;
9299 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009300
9301 /* If Peer Sta mask is set don't overwrite to self sta */
9302 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009303 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009304 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009305 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009306 else
9307 {
Ganesh K08bce952012-12-13 15:04:41 -08009308 /* Get system role, use the self station if in unknown role or STA role */
9309 systemRole = wdaGetGlobalSystemRole(pMac);
9310 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9311 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009312#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -08009313 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009314#endif
Ganesh K08bce952012-12-13 15:04:41 -08009315 ))
9316 {
9317 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9318 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009320
Jeff Johnsone7245742012-09-05 17:12:55 -07009321 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9322 disassoc frame reaches the HW, HAL has already deleted the peer station */
9323 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009324 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009325 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009326 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009327 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 /*Send Probe request frames on self sta idx*/
9329 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009330 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009331 /* Since we donot want probe responses to be retried, send probe responses
9332 through the NO_ACK queues */
9333 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9334 {
9335 //probe response is sent out using self station and no retries options.
9336 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9337 }
9338 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9339 {
9340 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9341 }
9342 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009343 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9344
9345 /*Set frame tag to 0
9346 We will use the WDA user data in order to tag a frame as expired*/
9347 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9348 (v_PVOID_t)0);
9349
9350
9351 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9352 frmLen, ucTypeSubType, tid,
9353 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9354 {
9355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9356 "Sending Mgmt Frame failed - status = %d\n", status);
9357 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9358 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9359 if( pAckTxComp )
9360 {
9361 pWDA->pAckTxCbFunc = NULL;
9362 if( VOS_STATUS_SUCCESS !=
9363 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9364 {
9365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9366 "Tx Complete timeout Timer Stop Failed ");
9367 }
9368 }
9369 return VOS_STATUS_E_FAILURE;
9370 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009371 /*
9372 * Wait for the event to be set by the TL, to get the response of TX
9373 * complete, this event should be set by the Callback function called by TL
9374 */
9375 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9376 &eventIdx);
9377 if(!VOS_IS_STATUS_SUCCESS(status))
9378 {
9379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9380 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009381 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009382 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9383 after the packet gets completed(packet freed once)*/
9384
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009385 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9386 WDA_TransportChannelDebug(0, 1);
9387
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009388 /*Tag Frame as timed out for later deletion*/
9389 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9390 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9391
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 /* check whether the packet was freed already,so need not free again when
9393 * TL calls the WDA_Txcomplete routine
9394 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009395 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9396 /*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 -07009397 {
9398 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009399 } */
9400
Jeff Johnson295189b2012-06-20 16:38:30 -07009401 if( pAckTxComp )
9402 {
9403 pWDA->pAckTxCbFunc = NULL;
9404 if( VOS_STATUS_SUCCESS !=
9405 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9406 {
9407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9408 "Tx Complete timeout Timer Stop Failed ");
9409 }
9410 }
9411 status = VOS_STATUS_E_FAILURE;
9412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009413 return status;
9414}
Jeff Johnson295189b2012-06-20 16:38:30 -07009415/*
9416 * FUNCTION: WDA_McProcessMsg
9417 * Trigger DAL-AL to start CFG download
9418 */
9419VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9420{
9421 VOS_STATUS status = VOS_STATUS_SUCCESS;
9422 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009423 if(NULL == pMsg)
9424 {
9425 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009426 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009427 VOS_ASSERT(0);
9428 return VOS_STATUS_E_FAILURE;
9429 }
9430
9431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009432 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009433
9434 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9435 if(NULL == pWDA )
9436 {
9437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009438 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009439 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009440 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 return VOS_STATUS_E_FAILURE;
9442 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 /* Process all the WDA messages.. */
9444 switch( pMsg->type )
9445 {
9446 case WNI_CFG_DNLD_REQ:
9447 {
9448 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009449 /* call WDA complete event if config download success */
9450 if( VOS_IS_STATUS_SUCCESS(status) )
9451 {
9452 vos_WDAComplete_cback(pVosContext);
9453 }
9454 else
9455 {
9456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9457 "WDA Config Download failure" );
9458 }
9459 break ;
9460 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009461 /*
9462 * Init SCAN request from PE, convert it into DAL format
9463 * and send it to DAL
9464 */
9465 case WDA_INIT_SCAN_REQ:
9466 {
9467 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9468 break ;
9469 }
9470 /* start SCAN request from PE */
9471 case WDA_START_SCAN_REQ:
9472 {
9473 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9474 break ;
9475 }
9476 /* end SCAN request from PE */
9477 case WDA_END_SCAN_REQ:
9478 {
9479 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9480 break ;
9481 }
9482 /* end SCAN request from PE */
9483 case WDA_FINISH_SCAN_REQ:
9484 {
9485 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9486 break ;
9487 }
9488 /* join request from PE */
9489 case WDA_CHNL_SWITCH_REQ:
9490 {
9491 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9492 {
9493 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9494 }
9495 else
9496 {
9497 WDA_ProcessChannelSwitchReq(pWDA,
9498 (tSwitchChannelParams*)pMsg->bodyptr) ;
9499 }
9500 break ;
9501 }
9502 /* ADD BSS request from PE */
9503 case WDA_ADD_BSS_REQ:
9504 {
9505 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9506 break ;
9507 }
9508 case WDA_ADD_STA_REQ:
9509 {
9510 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9511 break ;
9512 }
9513 case WDA_DELETE_BSS_REQ:
9514 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009515 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9516 break ;
9517 }
9518 case WDA_DELETE_STA_REQ:
9519 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009520 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9521 break ;
9522 }
9523 case WDA_CONFIG_PARAM_UPDATE_REQ:
9524 {
9525 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9526 break ;
9527 }
9528 case WDA_SET_BSSKEY_REQ:
9529 {
9530 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9531 break ;
9532 }
9533 case WDA_SET_STAKEY_REQ:
9534 {
9535 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9536 break ;
9537 }
9538 case WDA_SET_STA_BCASTKEY_REQ:
9539 {
9540 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9541 break ;
9542 }
9543 case WDA_REMOVE_BSSKEY_REQ:
9544 {
9545 WDA_ProcessRemoveBssKeyReq(pWDA,
9546 (tRemoveBssKeyParams *)pMsg->bodyptr);
9547 break ;
9548 }
9549 case WDA_REMOVE_STAKEY_REQ:
9550 {
9551 WDA_ProcessRemoveStaKeyReq(pWDA,
9552 (tRemoveStaKeyParams *)pMsg->bodyptr);
9553 break ;
9554 }
9555 case WDA_REMOVE_STA_BCASTKEY_REQ:
9556 {
9557 /* TODO: currently UMAC is not sending this request, Add the code for
9558 handling this request when UMAC supports */
9559 break;
9560 }
9561#ifdef FEATURE_WLAN_CCX
9562 case WDA_TSM_STATS_REQ:
9563 {
9564 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9565 break;
9566 }
9567#endif
9568 case WDA_UPDATE_EDCA_PROFILE_IND:
9569 {
9570 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9571 break;
9572 }
9573 case WDA_ADD_TS_REQ:
9574 {
9575 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9576 break;
9577 }
9578 case WDA_DEL_TS_REQ:
9579 {
9580 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9581 break;
9582 }
9583 case WDA_ADDBA_REQ:
9584 {
9585 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9586 break;
9587 }
9588 case WDA_DELBA_IND:
9589 {
9590 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9591 break;
9592 }
9593 case WDA_SET_LINK_STATE:
9594 {
9595 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9596 break;
9597 }
9598 case WDA_GET_STATISTICS_REQ:
9599 {
9600 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9601 break;
9602 }
9603 case WDA_PWR_SAVE_CFG:
9604 {
9605 if(pWDA->wdaState == WDA_READY_STATE)
9606 {
9607 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9608 }
9609 else
9610 {
9611 if(NULL != pMsg->bodyptr)
9612 {
9613 vos_mem_free(pMsg->bodyptr);
9614 }
9615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9616 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9617 }
9618 break;
9619 }
9620 case WDA_ENTER_IMPS_REQ:
9621 {
9622 if(pWDA->wdaState == WDA_READY_STATE)
9623 {
9624 WDA_ProcessEnterImpsReq(pWDA);
9625 }
9626 else
9627 {
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9629 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9630 }
9631 break;
9632 }
9633 case WDA_EXIT_IMPS_REQ:
9634 {
9635 if(pWDA->wdaState == WDA_READY_STATE)
9636 {
9637 WDA_ProcessExitImpsReq(pWDA);
9638 }
9639 else
9640 {
9641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9642 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9643 }
9644 break;
9645 }
9646 case WDA_ENTER_BMPS_REQ:
9647 {
9648 if(pWDA->wdaState == WDA_READY_STATE)
9649 {
9650 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9651 }
9652 else
9653 {
9654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9655 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9656 }
9657 break;
9658 }
9659 case WDA_EXIT_BMPS_REQ:
9660 {
9661 if(pWDA->wdaState == WDA_READY_STATE)
9662 {
9663 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9664 }
9665 else
9666 {
9667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9668 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9669 }
9670 break;
9671 }
9672 case WDA_ENTER_UAPSD_REQ:
9673 {
9674 if(pWDA->wdaState == WDA_READY_STATE)
9675 {
9676 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9677 }
9678 else
9679 {
9680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9681 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9682 }
9683 break;
9684 }
9685 case WDA_EXIT_UAPSD_REQ:
9686 {
9687 if(pWDA->wdaState == WDA_READY_STATE)
9688 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009689 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009690 }
9691 else
9692 {
9693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9694 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9695 }
9696 break;
9697 }
9698 case WDA_UPDATE_UAPSD_IND:
9699 {
9700 if(pWDA->wdaState == WDA_READY_STATE)
9701 {
9702 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9703 }
9704 else
9705 {
9706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9707 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9708 }
9709 break;
9710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 case WDA_REGISTER_PE_CALLBACK :
9712 {
9713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9714 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9715 /*TODO: store the PE callback */
9716 /* Do Nothing? MSG Body should be freed at here */
9717 if(NULL != pMsg->bodyptr)
9718 {
9719 vos_mem_free(pMsg->bodyptr);
9720 }
9721 break;
9722 }
9723 case WDA_SYS_READY_IND :
9724 {
9725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9726 "Handling msg type WDA_SYS_READY_IND " );
9727 pWDA->wdaState = WDA_READY_STATE;
9728 if(NULL != pMsg->bodyptr)
9729 {
9730 vos_mem_free(pMsg->bodyptr);
9731 }
9732 break;
9733 }
9734 case WDA_BEACON_FILTER_IND :
9735 {
9736 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9737 break;
9738 }
9739 case WDA_BTC_SET_CFG:
9740 {
9741 /*TODO: handle this while dealing with BTC */
9742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9743 "Handling msg type WDA_BTC_SET_CFG " );
9744 /* Do Nothing? MSG Body should be freed at here */
9745 if(NULL != pMsg->bodyptr)
9746 {
9747 vos_mem_free(pMsg->bodyptr);
9748 }
9749 break;
9750 }
9751 case WDA_SIGNAL_BT_EVENT:
9752 {
9753 /*TODO: handle this while dealing with BTC */
9754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9755 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9756 /* Do Nothing? MSG Body should be freed at here */
9757 if(NULL != pMsg->bodyptr)
9758 {
9759 vos_mem_free(pMsg->bodyptr);
9760 }
9761 break;
9762 }
9763 case WDA_CFG_RXP_FILTER_REQ:
9764 {
9765 WDA_ProcessConfigureRxpFilterReq(pWDA,
9766 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9767 break;
9768 }
9769 case WDA_SET_HOST_OFFLOAD:
9770 {
9771 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9772 break;
9773 }
9774 case WDA_SET_KEEP_ALIVE:
9775 {
9776 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9777 break;
9778 }
9779#ifdef WLAN_NS_OFFLOAD
9780 case WDA_SET_NS_OFFLOAD:
9781 {
9782 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9783 break;
9784 }
9785#endif //WLAN_NS_OFFLOAD
9786 case WDA_ADD_STA_SELF_REQ:
9787 {
9788 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9789 break;
9790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009791 case WDA_DEL_STA_SELF_REQ:
9792 {
9793 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9794 break;
9795 }
9796 case WDA_WOWL_ADD_BCAST_PTRN:
9797 {
9798 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9799 break;
9800 }
9801 case WDA_WOWL_DEL_BCAST_PTRN:
9802 {
9803 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9804 break;
9805 }
9806 case WDA_WOWL_ENTER_REQ:
9807 {
9808 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9809 break;
9810 }
9811 case WDA_WOWL_EXIT_REQ:
9812 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009813 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009814 break;
9815 }
9816 case WDA_TL_FLUSH_AC_REQ:
9817 {
9818 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9819 break;
9820 }
9821 case WDA_SIGNAL_BTAMP_EVENT:
9822 {
9823 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9824 break;
9825 }
9826#ifdef WDA_UT
9827 case WDA_WDI_EVENT_MSG:
9828 {
9829 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9830 break ;
9831 }
9832#endif
9833 case WDA_UPDATE_BEACON_IND:
9834 {
9835 WDA_ProcessUpdateBeaconParams(pWDA,
9836 (tUpdateBeaconParams *)pMsg->bodyptr);
9837 break;
9838 }
9839 case WDA_SEND_BEACON_REQ:
9840 {
9841 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9842 break;
9843 }
9844 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9845 {
9846 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9847 (tSendProbeRespParams *)pMsg->bodyptr);
9848 break;
9849 }
9850#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9851 case WDA_SET_MAX_TX_POWER_REQ:
9852 {
9853 WDA_ProcessSetMaxTxPowerReq(pWDA,
9854 (tMaxTxPowerParams *)pMsg->bodyptr);
9855 break;
9856 }
9857#endif
9858#ifdef WLAN_FEATURE_P2P
9859 case WDA_SET_P2P_GO_NOA_REQ:
9860 {
9861 WDA_ProcessSetP2PGONOAReq(pWDA,
9862 (tP2pPsParams *)pMsg->bodyptr);
9863 break;
9864 }
9865#endif
9866 /* timer related messages */
9867 case WDA_TIMER_BA_ACTIVITY_REQ:
9868 {
9869 WDA_BaCheckActivity(pWDA) ;
9870 break ;
9871 }
9872#ifdef WLAN_FEATURE_VOWIFI_11R
9873 case WDA_AGGR_QOS_REQ:
9874 {
9875 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9876 break;
9877 }
9878#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009879#ifdef ANI_MANF_DIAG
9880 case WDA_FTM_CMD_REQ:
9881 {
9882 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9883 break ;
9884 }
9885#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009886#ifdef FEATURE_OEM_DATA_SUPPORT
9887 case WDA_START_OEM_DATA_REQ:
9888 {
9889 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9890 break;
9891 }
9892#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009893 /* Tx Complete Time out Indication */
9894 case WDA_TX_COMPLETE_TIMEOUT_IND:
9895 {
9896 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9897 break;
9898 }
9899 case WDA_WLAN_SUSPEND_IND:
9900 {
9901 WDA_ProcessWlanSuspendInd(pWDA,
9902 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9903 break;
9904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009905 case WDA_WLAN_RESUME_REQ:
9906 {
9907 WDA_ProcessWlanResumeReq(pWDA,
9908 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9909 break;
9910 }
9911
9912 case WDA_UPDATE_CF_IND:
9913 {
9914 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9915 pMsg->bodyptr = NULL;
9916 break;
9917 }
9918#ifdef FEATURE_WLAN_SCAN_PNO
9919 case WDA_SET_PNO_REQ:
9920 {
9921 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9922 break;
9923 }
9924 case WDA_UPDATE_SCAN_PARAMS_REQ:
9925 {
9926 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9927 break;
9928 }
9929 case WDA_SET_RSSI_FILTER_REQ:
9930 {
9931 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9932 break;
9933 }
9934#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 case WDA_SET_TX_PER_TRACKING_REQ:
9936 {
9937 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9938 break;
9939 }
9940
9941#ifdef WLAN_FEATURE_PACKET_FILTERING
9942 case WDA_8023_MULTICAST_LIST_REQ:
9943 {
9944 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9945 break;
9946 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009947 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9948 {
9949 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9950 break;
9951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009952 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9953 {
9954 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9955 break;
9956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9958 {
9959 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9960 break;
9961 }
9962#endif // WLAN_FEATURE_PACKET_FILTERING
9963
9964
9965 case WDA_TRANSMISSION_CONTROL_IND:
9966 {
9967 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9968 break;
9969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009970 case WDA_SET_POWER_PARAMS_REQ:
9971 {
9972 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9973 break;
9974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009975#ifdef WLAN_FEATURE_GTK_OFFLOAD
9976 case WDA_GTK_OFFLOAD_REQ:
9977 {
9978 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9979 break;
9980 }
9981
9982 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9983 {
9984 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9985 break;
9986 }
9987#endif //WLAN_FEATURE_GTK_OFFLOAD
9988
9989 case WDA_SET_TM_LEVEL_REQ:
9990 {
9991 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9992 break;
9993 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009994#ifdef WLAN_FEATURE_11AC
9995 case WDA_UPDATE_OP_MODE:
9996 {
9997 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9998 {
9999 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10000 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10001 else
10002 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10003 " VHT OpMode Feature is Not Supported \n");
10004 }
10005 else
10006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10007 " 11AC Feature is Not Supported \n");
10008 break;
10009 }
10010#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 default:
10012 {
10013 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10014 "No Handling for msg type %x in WDA "
10015 ,pMsg->type);
10016 /* Do Nothing? MSG Body should be freed at here */
10017 if(NULL != pMsg->bodyptr)
10018 {
10019 vos_mem_free(pMsg->bodyptr);
10020 }
10021 //WDA_VOS_ASSERT(0) ;
10022 }
10023 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 return status ;
10025}
10026
Jeff Johnson295189b2012-06-20 16:38:30 -070010027/*
10028 * FUNCTION: WDA_LowLevelIndCallback
10029 * IND API callback from WDI, send Ind to PE
10030 */
10031void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10032 void* pUserData )
10033{
10034 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10035#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10036 tSirRSSINotification rssiNotification;
10037#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010038 if(NULL == pWDA)
10039 {
10040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010041 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010042 VOS_ASSERT(0);
10043 return ;
10044 }
10045
10046 switch(wdiLowLevelInd->wdiIndicationType)
10047 {
10048 case WDI_RSSI_NOTIFICATION_IND:
10049 {
10050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10051 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010052#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10053 rssiNotification.bReserved =
10054 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10055 rssiNotification.bRssiThres1NegCross =
10056 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10057 rssiNotification.bRssiThres1PosCross =
10058 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10059 rssiNotification.bRssiThres2NegCross =
10060 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10061 rssiNotification.bRssiThres2PosCross =
10062 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10063 rssiNotification.bRssiThres3NegCross =
10064 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10065 rssiNotification.bRssiThres3PosCross =
10066 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080010067 rssiNotification.avgRssi = (v_S7_t)
10068 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070010069 WLANTL_BMPSRSSIRegionChangedNotification(
10070 pWDA->pVosContext,
10071 &rssiNotification);
10072#endif
10073 break ;
10074 }
10075 case WDI_MISSED_BEACON_IND:
10076 {
10077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10078 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010079 /* send IND to PE */
10080 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10081 break ;
10082 }
10083 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10084 {
10085 /* TODO: Decode Ind and send Ind to PE */
10086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10087 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10088 break ;
10089 }
10090
10091 case WDI_MIC_FAILURE_IND:
10092 {
10093 tpSirSmeMicFailureInd pMicInd =
10094 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10095
10096 if(NULL == pMicInd)
10097 {
10098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010099 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010100 break;
10101 }
10102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10103 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010104 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10105 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10106 vos_mem_copy(pMicInd->bssId,
10107 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10108 sizeof(tSirMacAddr));
10109 vos_mem_copy(pMicInd->info.srcMacAddr,
10110 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10111 sizeof(tSirMacAddr));
10112 vos_mem_copy(pMicInd->info.taMacAddr,
10113 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10114 sizeof(tSirMacAddr));
10115 vos_mem_copy(pMicInd->info.dstMacAddr,
10116 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10117 sizeof(tSirMacAddr));
10118 vos_mem_copy(pMicInd->info.rxMacAddr,
10119 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10120 sizeof(tSirMacAddr));
10121 pMicInd->info.multicast =
10122 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10123 pMicInd->info.keyId=
10124 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10125 pMicInd->info.IV1=
10126 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10127 vos_mem_copy(pMicInd->info.TSC,
10128 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010129 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10130 (void *)pMicInd , 0) ;
10131 break ;
10132 }
10133 case WDI_FATAL_ERROR_IND:
10134 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010135 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010136 /* TODO: Decode Ind and send Ind to PE */
10137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10138 "Received WDI_FATAL_ERROR_IND from WDI ");
10139 break ;
10140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010141 case WDI_DEL_STA_IND:
10142 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 tpDeleteStaContext pDelSTACtx =
10144 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10145
10146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10147 "Received WDI_DEL_STA_IND from WDI ");
10148 if(NULL == pDelSTACtx)
10149 {
10150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010151 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010152 break;
10153 }
10154 vos_mem_copy(pDelSTACtx->addr2,
10155 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10156 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 vos_mem_copy(pDelSTACtx->bssId,
10158 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10159 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010160 pDelSTACtx->assocId =
10161 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10162 pDelSTACtx->reasonCode =
10163 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10164 pDelSTACtx->staId =
10165 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10167 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 break ;
10169 }
10170 case WDI_COEX_IND:
10171 {
10172 tANI_U32 index;
10173 vos_msg_t vosMsg;
10174 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10175 if(NULL == pSmeCoexInd)
10176 {
10177 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010178 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 break;
10180 }
10181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10182 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010183 /* Message Header */
10184 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10185 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 /* Info from WDI Indication */
10187 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10188 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10189 {
10190 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010192 /* VOS message wrapper */
10193 vosMsg.type = eWNI_SME_COEX_IND;
10194 vosMsg.bodyptr = (void *)pSmeCoexInd;
10195 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010196 /* Send message to SME */
10197 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10198 {
10199 /* free the mem and return */
10200 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10201 }
10202 else
10203 {
10204 /* DEBUG */
10205 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10206 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10207 pSmeCoexInd->coexIndType,
10208 pSmeCoexInd->coexIndData[0],
10209 pSmeCoexInd->coexIndData[1],
10210 pSmeCoexInd->coexIndData[2],
10211 pSmeCoexInd->coexIndData[3]);
10212 }
10213 break;
10214 }
10215 case WDI_TX_COMPLETE_IND:
10216 {
10217 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10218 /* Calling TxCompleteAck Indication from wda context*/
10219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10220 "Complete Indication received from HAL");
10221 if( pWDA->pAckTxCbFunc )
10222 {
10223 if( VOS_STATUS_SUCCESS !=
10224 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10225 {
10226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10227 "Tx Complete timeout Timer Stop Failed ");
10228 }
10229 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10230 pWDA->pAckTxCbFunc = NULL;
10231 }
10232 else
10233 {
10234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10235 "Tx Complete Indication is received after timeout ");
10236 }
10237 break;
10238 }
10239#ifdef WLAN_FEATURE_P2P
Viral Modid86bde22012-12-10 13:09:21 -080010240 case WDI_P2P_NOA_START_IND :
10241 {
10242 tSirP2PNoaStart *pP2pNoaStart =
10243 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
10244
10245 if (NULL == pP2pNoaStart)
10246 {
10247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10248 "Memory allocation failure, "
10249 "WDI_P2P_NOA_START_IND not forwarded");
10250 break;
10251 }
10252 pP2pNoaStart->status =
10253 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
10254 pP2pNoaStart->bssIdx =
10255 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
10256 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
10257 (void *)pP2pNoaStart , 0) ;
10258 break;
10259 }
10260
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 case WDI_P2P_NOA_ATTR_IND :
10262 {
10263 tSirP2PNoaAttr *pP2pNoaAttr =
10264 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10266 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010267 if (NULL == pP2pNoaAttr)
10268 {
10269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10270 "Memory allocation failure, "
10271 "WDI_P2P_NOA_ATTR_IND not forwarded");
10272 break;
10273 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010274 pP2pNoaAttr->index =
10275 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10276 pP2pNoaAttr->oppPsFlag =
10277 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10278 pP2pNoaAttr->ctWin =
10279 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10280
10281 pP2pNoaAttr->uNoa1IntervalCnt =
10282 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10283 pP2pNoaAttr->uNoa1Duration =
10284 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10285 pP2pNoaAttr->uNoa1Interval =
10286 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10287 pP2pNoaAttr->uNoa1StartTime =
10288 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 pP2pNoaAttr->uNoa2IntervalCnt =
10290 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10291 pP2pNoaAttr->uNoa2Duration =
10292 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10293 pP2pNoaAttr->uNoa2Interval =
10294 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10295 pP2pNoaAttr->uNoa2StartTime =
10296 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010297 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10298 (void *)pP2pNoaAttr , 0) ;
10299 break;
10300 }
10301#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010302#ifdef FEATURE_WLAN_SCAN_PNO
10303 case WDI_PREF_NETWORK_FOUND_IND:
10304 {
10305 vos_msg_t vosMsg;
10306 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10308 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010309 if (NULL == pPrefNetworkFoundInd)
10310 {
10311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10312 "Memory allocation failure, "
10313 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10314 break;
10315 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010316 /* Message Header */
10317 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10318 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10319
10320 /* Info from WDI Indication */
10321 pPrefNetworkFoundInd->ssId.length =
10322 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010324 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10325 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10326 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010327 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010328 /* VOS message wrapper */
10329 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10330 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10331 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010332 /* Send message to SME */
10333 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10334 {
10335 /* free the mem and return */
10336 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10337 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010338 break;
10339 }
10340#endif // FEATURE_WLAN_SCAN_PNO
10341
10342#ifdef WLAN_WAKEUP_EVENTS
10343 case WDI_WAKE_REASON_IND:
10344 {
10345 vos_msg_t vosMsg;
10346 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10347 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10348 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10349
10350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10351 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10352 wdiLowLevelInd->wdiIndicationType,
10353 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10354 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10355 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10356
10357 if (NULL == pWakeReasonInd)
10358 {
10359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10360 "Memory allocation failure, "
10361 "WDI_WAKE_REASON_IND not forwarded");
10362 break;
10363 }
10364
10365 vos_mem_zero(pWakeReasonInd, allocSize);
10366
10367 /* Message Header */
10368 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10369 pWakeReasonInd->mesgLen = allocSize;
10370
10371 /* Info from WDI Indication */
10372 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10373 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10374 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10375 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10376 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10377 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10378 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10379 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10380
10381 /* VOS message wrapper */
10382 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10383 vosMsg.bodyptr = (void *) pWakeReasonInd;
10384 vosMsg.bodyval = 0;
10385
10386 /* Send message to SME */
10387 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10388 {
10389 /* free the mem and return */
10390 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10391 }
10392
10393 break;
10394 }
10395#endif // WLAN_WAKEUP_EVENTS
10396
10397 case WDI_TX_PER_HIT_IND:
10398 {
10399 vos_msg_t vosMsg;
10400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10401 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10402 /* VOS message wrapper */
10403 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10404 vosMsg.bodyptr = NULL;
10405 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010406 /* Send message to SME */
10407 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10408 {
10409 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10410 }
10411 break;
10412 }
10413
10414 default:
10415 {
10416 /* TODO error */
10417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10418 "Received UNKNOWN Indication from WDI ");
10419 }
10420 }
10421 return ;
10422}
10423
Jeff Johnson295189b2012-06-20 16:38:30 -070010424/*
10425 * BA related processing in WDA.
10426 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010427void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10428 void* pUserData)
10429{
10430 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10431 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010432 if(NULL == pWdaParams)
10433 {
10434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010435 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010436 VOS_ASSERT(0) ;
10437 return ;
10438 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010439 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010440 vos_mem_free(pWdaParams->wdaMsgParam) ;
10441 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10442 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010444 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10446 {
10447 tANI_U8 i = 0 ;
10448 tBaActivityInd *baActivityInd = NULL ;
10449 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10450 tANI_U8 allocSize = sizeof(tBaActivityInd)
10451 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10452 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10453 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010454 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010455 if(NULL == baActivityInd)
10456 {
10457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010458 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010459 VOS_ASSERT(0) ;
10460 return;
10461 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10463 sizeof(tSirMacAddr)) ;
10464 baActivityInd->baCandidateCnt = baCandidateCount ;
10465
10466 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10467 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10468
10469 for(i = 0 ; i < baCandidateCount ; i++)
10470 {
10471 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010472 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10473 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010474 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10475 {
10476 baCandidate->baInfo[tid].fBaEnable =
10477 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10478 baCandidate->baInfo[tid].startingSeqNum =
10479 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10480 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010481 wdiBaCandidate++ ;
10482 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010483 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010484 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10485 }
10486 else
10487 {
10488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10489 "BA Trigger RSP with Failure received ");
10490 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010492}
Jeff Johnson295189b2012-06-20 16:38:30 -070010493/*
10494 * BA Activity check timer handler
10495 */
10496void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10497{
10498 tANI_U8 curSta = 0 ;
10499 tANI_U8 tid = 0 ;
10500 tANI_U8 size = 0 ;
10501 tANI_U8 baCandidateCount = 0 ;
10502 tANI_U8 newBaCandidate = 0 ;
10503 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10504
10505 if(NULL == pWDA)
10506 {
10507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010508 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010509 VOS_ASSERT(0);
10510 return ;
10511 }
10512 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10513 {
10514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10515 "Inconsistent STA entries in WDA");
10516 VOS_ASSERT(0) ;
10517 }
10518 /* walk through all STA entries and find out TX packet count */
10519 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10520 {
10521 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10522 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010523 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010524 tANI_U32 txPktCount = 0 ;
10525 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010526 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010527 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10528 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10530 curSta, tid, &txPktCount)))
10531 {
10532#if 0
10533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10534 "************* %d:%d, %d ",curSta, txPktCount,
10535 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10536#endif
10537 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010538 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10540 curSta, tid)))
10541 {
10542 /* get prepare for sending message to HAL */
10543 //baCandidate[baCandidateCount].staIdx = curSta ;
10544 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10545 newBaCandidate = WDA_ENABLE_BA ;
10546 }
10547 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10548 }
10549 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010550 /* fill the entry for all the sta with given TID's */
10551 if(WDA_ENABLE_BA == newBaCandidate)
10552 {
10553 /* move to next BA candidate */
10554 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10555 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10556 baCandidateCount++ ;
10557 newBaCandidate = WDA_DISABLE_BA ;
10558 }
10559 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 /* prepare and send message to hal */
10561 if( 0 < baCandidateCount)
10562 {
10563 WDI_Status status = WDI_STATUS_SUCCESS ;
10564 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10565 tWDA_ReqParams *pWdaParams =
10566 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 if(NULL == pWdaParams)
10568 {
10569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010571 VOS_ASSERT(0) ;
10572 return;
10573 }
10574 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10575 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10576 if(NULL == wdiTriggerBaReq)
10577 {
10578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010579 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 VOS_ASSERT(0) ;
10581 vos_mem_free(pWdaParams);
10582 return;
10583 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010584 do
10585 {
10586 WDI_TriggerBAReqinfoType *triggerBaInfo =
10587 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10588 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10589 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10590 * for each request */
10591 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10592 triggerBaInfo->ucBASessionID = 0;
10593 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10594 } while(0) ;
10595 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010597 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010598 pWdaParams->pWdaContext = pWDA;
10599 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10600 pWdaParams->wdaMsgParam = NULL;
10601 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10602 WDA_TriggerBaReqCallback, pWdaParams) ;
10603 if(IS_WDI_STATUS_FAILURE(status))
10604 {
10605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10606 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10607 vos_mem_free(pWdaParams->wdaMsgParam) ;
10608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10609 vos_mem_free(pWdaParams) ;
10610 }
10611 }
10612 else
10613 {
10614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10615 "There is no TID for initiating BA");
10616 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010617 if( VOS_STATUS_SUCCESS !=
10618 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10619 {
10620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10621 "BA Activity Timer Stop Failed ");
10622 return ;
10623 }
10624 if( VOS_STATUS_SUCCESS !=
10625 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10626 {
10627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10628 "BA Activity Timer Start Failed ");
10629 return;
10630 }
10631 return ;
10632}
Jeff Johnson295189b2012-06-20 16:38:30 -070010633/*
10634 * WDA common routine to create timer used by WDA.
10635 */
10636static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10637{
Jeff Johnson295189b2012-06-20 16:38:30 -070010638 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10639 tANI_U32 val = 0 ;
10640 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10641
10642 if(NULL == pMac)
10643 {
10644 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010645 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 VOS_ASSERT(0);
10647 return VOS_STATUS_E_FAILURE;
10648 }
10649 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10650 != eSIR_SUCCESS)
10651 {
10652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10653 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10654 return VOS_STATUS_E_FAILURE;
10655 }
10656 val = SYS_MS_TO_TICKS(val) ;
10657
10658 /* BA activity check timer */
10659 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10660 "BA Activity Check timer", WDA_TimerHandler,
10661 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10662 if(status != TX_SUCCESS)
10663 {
10664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10665 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010666 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010668 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010669 /* Tx Complete Timeout timer */
10670 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10671 "Tx Complete Check timer", WDA_TimerHandler,
10672 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010673 if(status != TX_SUCCESS)
10674 {
10675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10676 "Unable to create Tx Complete Timeout timer");
10677 /* Destroy timer of BA activity check timer */
10678 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10679 if(status != TX_SUCCESS)
10680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10682 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010683 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010684 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010685 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010686 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010687 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010688}
Jeff Johnson295189b2012-06-20 16:38:30 -070010689/*
10690 * WDA common routine to destroy timer used by WDA.
10691 */
10692static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10693{
10694 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010695 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10696 if(status != TX_SUCCESS)
10697 {
10698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10699 "Unable to Destroy Tx Complete Timeout timer");
10700 return eSIR_FAILURE ;
10701 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010702 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10703 if(status != TX_SUCCESS)
10704 {
10705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10706 "Unable to Destroy BA activity timer");
10707 return eSIR_FAILURE ;
10708 }
10709
10710 return eSIR_SUCCESS ;
10711}
Jeff Johnson295189b2012-06-20 16:38:30 -070010712/*
10713 * WDA timer handler.
10714 */
10715void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10716{
10717 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10718 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010719 /*
10720 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10721 */
10722 wdaMsg.type = timerInfo ;
10723 wdaMsg.bodyptr = NULL;
10724 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010725 /* post the message.. */
10726 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10727 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10728 {
10729 vosStatus = VOS_STATUS_E_BADMSG;
10730 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010731}
Jeff Johnson295189b2012-06-20 16:38:30 -070010732/*
10733 * WDA Tx Complete timeout Indication.
10734 */
10735void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10736{
10737 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010738 if( pWDA->pAckTxCbFunc )
10739 {
10740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10741 "TxComplete timer expired\n");
10742 pWDA->pAckTxCbFunc( pMac, 0);
10743 pWDA->pAckTxCbFunc = NULL;
10744 }
10745 else
10746 {
10747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10748 "There is no request pending for TxComplete and wait timer expired\n");
10749 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010750}
Jeff Johnson295189b2012-06-20 16:38:30 -070010751/*
10752 * WDA Set REG Domain to VOS NV
10753 */
10754eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10755{
10756 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10757 {
10758 return eHAL_STATUS_INVALID_PARAMETER;
10759 }
10760 return eHAL_STATUS_SUCCESS;
10761}
10762#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10763
Jeff Johnson295189b2012-06-20 16:38:30 -070010764#ifdef FEATURE_WLAN_SCAN_PNO
10765/*
10766 * FUNCTION: WDA_PNOScanReqCallback
10767 *
10768 */
10769void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10770{
10771 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010773 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010774 if(NULL == pWdaParams)
10775 {
10776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010777 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010778 VOS_ASSERT(0) ;
10779 return ;
10780 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 if( pWdaParams != NULL )
10782 {
10783 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10784 {
10785 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 if( pWdaParams->wdaMsgParam != NULL)
10788 {
10789 vos_mem_free(pWdaParams->wdaMsgParam);
10790 }
10791
10792 vos_mem_free(pWdaParams) ;
10793 }
10794
10795 return ;
10796}
Jeff Johnson295189b2012-06-20 16:38:30 -070010797/*
10798 * FUNCTION: WDA_UpdateScanParamsCallback
10799 *
10800 */
10801void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10802{
10803 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010805 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010806 if(NULL == pWdaParams)
10807 {
10808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010809 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010810 VOS_ASSERT(0) ;
10811 return ;
10812 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010813 if( pWdaParams != NULL )
10814 {
10815 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10816 {
10817 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10818 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010819 if( pWdaParams->wdaMsgParam != NULL)
10820 {
10821 vos_mem_free(pWdaParams->wdaMsgParam);
10822 }
10823 vos_mem_free(pWdaParams) ;
10824 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010825 return ;
10826}
Jeff Johnson295189b2012-06-20 16:38:30 -070010827/*
10828 * FUNCTION: WDA_SetPowerParamsCallback
10829 *
10830 */
10831void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
10832{
Jeff Johnsone7245742012-09-05 17:12:55 -070010833 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010834
10835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010836 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010837 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 VOS_ASSERT(0) ;
10842 return ;
10843 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010844 if( pWdaParams != NULL )
10845 {
10846 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10847 {
10848 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 if( pWdaParams->wdaMsgParam != NULL)
10851 {
10852 vos_mem_free(pWdaParams->wdaMsgParam);
10853 }
10854 vos_mem_free(pWdaParams) ;
10855 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010856 return ;
10857}
Jeff Johnson295189b2012-06-20 16:38:30 -070010858/*
10859 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10860 * Request to WDI to set Preferred Network List.Offload
10861 */
10862VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
10863 tSirPNOScanReq *pPNOScanReqParams)
10864{
Jeff Johnson43971f52012-07-17 12:26:56 -070010865 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010866 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
10867 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
10868 tWDA_ReqParams *pWdaParams ;
10869 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010871 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 if(NULL == pwdiPNOScanReqInfo)
10873 {
10874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010875 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010876 VOS_ASSERT(0);
10877 return VOS_STATUS_E_NOMEM;
10878 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10880 if(NULL == pWdaParams)
10881 {
10882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010883 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 VOS_ASSERT(0);
10885 vos_mem_free(pwdiPNOScanReqInfo);
10886 return VOS_STATUS_E_NOMEM;
10887 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010888 //
10889 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
10890 //
10891 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
10892 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070010893 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
10894 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
10895 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010896 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
10897 {
10898 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
10899 &pPNOScanReqParams->aNetworks[i],
10900 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
10901 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010902 /*Scan timer intervals*/
10903 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
10904 &pPNOScanReqParams->scanTimers,
10905 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070010906 /*Probe template for 2.4GHz band*/
10907 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
10908 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10909 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010910 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
10911 pPNOScanReqParams->p24GProbeTemplate,
10912 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010913 /*Probe template for 5GHz band*/
10914 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
10915 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10916 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010917 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
10918 pPNOScanReqParams->p5GProbeTemplate,
10919 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010920 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010921
Jeff Johnson295189b2012-06-20 16:38:30 -070010922 /* Store Params pass it to WDI */
10923 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
10924 pWdaParams->pWdaContext = pWDA;
10925 /* Store param pointer as passed in by caller */
10926 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010927 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
10928 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 if(IS_WDI_STATUS_FAILURE(status))
10930 {
10931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10932 "Failure in Set PNO REQ WDI API, free all the memory " );
10933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10934 vos_mem_free(pWdaParams->wdaMsgParam);
10935 pWdaParams->wdaWdiApiMsgParam = NULL;
10936 pWdaParams->wdaMsgParam = NULL;
10937 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 return CONVERT_WDI2VOS_STATUS(status) ;
10939}
Jeff Johnson295189b2012-06-20 16:38:30 -070010940/*
10941 * FUNCTION: WDA_RssiFilterCallback
10942 *
10943 */
10944void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
10945{
10946 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10947
10948 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010949 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010950
10951 VOS_ASSERT(NULL != pWdaParams);
10952
10953 vos_mem_free(pWdaParams->wdaMsgParam) ;
10954 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10955 vos_mem_free(pWdaParams) ;
10956
10957 return ;
10958}
10959/*
10960 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10961 * Request to WDI to set Preferred Network List.Offload
10962 */
10963VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
10964 tSirSetRSSIFilterReq* pRssiFilterParams)
10965{
Jeff Johnson43971f52012-07-17 12:26:56 -070010966 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010967 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
10968 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
10969 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010971 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010972 if(NULL == pwdiSetRssiFilterReqInfo)
10973 {
10974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010975 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010976 VOS_ASSERT(0);
10977 return VOS_STATUS_E_NOMEM;
10978 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010979 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10980 if(NULL == pWdaParams)
10981 {
10982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010983 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010984 VOS_ASSERT(0);
10985 vos_mem_free(pwdiSetRssiFilterReqInfo);
10986 return VOS_STATUS_E_NOMEM;
10987 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
10989 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010990
Jeff Johnson295189b2012-06-20 16:38:30 -070010991 /* Store Params pass it to WDI */
10992 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
10993 pWdaParams->pWdaContext = pWDA;
10994 /* Store param pointer as passed in by caller */
10995 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010996 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
10997 (WDI_PNOScanCb)WDA_RssiFilterCallback,
10998 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010999 if(IS_WDI_STATUS_FAILURE(status))
11000 {
11001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11002 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
11003 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11004 vos_mem_free(pWdaParams->wdaMsgParam);
11005 pWdaParams->wdaWdiApiMsgParam = NULL;
11006 pWdaParams->wdaMsgParam = NULL;
11007 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 return CONVERT_WDI2VOS_STATUS(status) ;
11009}
11010
Jeff Johnson295189b2012-06-20 16:38:30 -070011011/*
11012 * FUNCTION: WDA_ProcessUpdateScanParams
11013 * Request to WDI to update Scan Parameters
11014 */
11015VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
11016 tSirUpdateScanParams *pUpdateScanParams)
11017{
Jeff Johnson43971f52012-07-17 12:26:56 -070011018 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011019 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
11020 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
11021 sizeof(WDI_UpdateScanParamsInfoType)) ;
11022 tWDA_ReqParams *pWdaParams ;
11023 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011025 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 if(NULL == wdiUpdateScanParamsInfoType)
11027 {
11028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011030 VOS_ASSERT(0);
11031 return VOS_STATUS_E_NOMEM;
11032 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011033 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11034 if ( NULL == pWdaParams )
11035 {
11036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011037 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011038 VOS_ASSERT(0);
11039 vos_mem_free(wdiUpdateScanParamsInfoType);
11040 return VOS_STATUS_E_NOMEM;
11041 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 //
11043 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11044 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11046 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11047 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11048 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11049 "sir struct %d wdi struct %d",
11050 pUpdateScanParams->b11dEnabled,
11051 pUpdateScanParams->b11dResolved,
11052 pUpdateScanParams->ucChannelCount,
11053 pUpdateScanParams->usPassiveMinChTime,
11054 pUpdateScanParams->usPassiveMaxChTime,
11055 pUpdateScanParams->usActiveMinChTime,
11056 pUpdateScanParams->usActiveMaxChTime,
11057 sizeof(tSirUpdateScanParams),
11058 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11059
Jeff Johnson295189b2012-06-20 16:38:30 -070011060 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11061 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011062 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11063 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011064 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11065 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11067 pUpdateScanParams->usActiveMaxChTime;
11068 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11069 pUpdateScanParams->usActiveMinChTime;
11070 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11071 pUpdateScanParams->usPassiveMaxChTime;
11072 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11073 pUpdateScanParams->usPassiveMinChTime;
11074
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011076 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11077 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011078
Jeff Johnson295189b2012-06-20 16:38:30 -070011079 for ( i = 0; i <
11080 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11081 i++)
11082 {
11083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11084 "Update Scan Parameters channel: %d",
11085 pUpdateScanParams->aChannels[i]);
11086
11087 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11088 pUpdateScanParams->aChannels[i];
11089 }
11090
Jeff Johnson295189b2012-06-20 16:38:30 -070011091 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011092
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 /* Store Params pass it to WDI */
11094 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11095 pWdaParams->pWdaContext = pWDA;
11096 /* Store param pointer as passed in by caller */
11097 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011098
Jeff Johnson295189b2012-06-20 16:38:30 -070011099
11100
11101 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11102 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11103 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011104 if(IS_WDI_STATUS_FAILURE(status))
11105 {
11106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11107 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11108 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11109 vos_mem_free(pWdaParams->wdaMsgParam);
11110 vos_mem_free(pWdaParams);
11111 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011112 return CONVERT_WDI2VOS_STATUS(status) ;
11113}
11114#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011115#ifdef WLAN_FEATURE_PACKET_FILTERING
11116/*
11117 * FUNCTION: WDA_8023MulticastListReqCallback
11118 *
11119 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011120void WDA_8023MulticastListReqCallback(
11121 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11122 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011123{
11124 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011126 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 if(NULL == pWdaParams)
11128 {
11129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011130 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011131 VOS_ASSERT(0) ;
11132 return ;
11133 }
11134
11135 vos_mem_free(pWdaParams->wdaMsgParam) ;
11136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11137 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011138 //print a msg, nothing else to do
11139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11140 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011141 return ;
11142}
Jeff Johnson295189b2012-06-20 16:38:30 -070011143/*
11144 * FUNCTION: WDA_Process8023MulticastListReq
11145 * Request to WDI to add 8023 Multicast List
11146 */
11147VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11148 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11149{
Jeff Johnson43971f52012-07-17 12:26:56 -070011150 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11152 tWDA_ReqParams *pWdaParams ;
11153 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011155 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 pwdiFltPktSetMcListReqParamsType =
11157 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11158 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11159 ) ;
11160 if(NULL == pwdiFltPktSetMcListReqParamsType)
11161 {
11162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011164 return VOS_STATUS_E_NOMEM;
11165 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011166 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11167 if(NULL == pWdaParams)
11168 {
11169 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011170 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011171 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11172 return VOS_STATUS_E_NOMEM;
11173 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011174
Jeff Johnson295189b2012-06-20 16:38:30 -070011175 //
11176 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11177 //
11178 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011179 pRcvFltMcAddrList->ulMulticastAddrCnt;
11180
11181 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11182 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11183 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11184 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11185
Jeff Johnson295189b2012-06-20 16:38:30 -070011186 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11187 {
11188 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11189 &(pRcvFltMcAddrList->multicastAddr[i]),
11190 sizeof(tSirMacAddr));
11191 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011192 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011193
Jeff Johnson295189b2012-06-20 16:38:30 -070011194 /* Store Params pass it to WDI */
11195 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11196 pWdaParams->pWdaContext = pWDA;
11197 /* Store param pointer as passed in by caller */
11198 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011199 status = WDI_8023MulticastListReq(
11200 pwdiFltPktSetMcListReqParamsType,
11201 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11202 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011203 if(IS_WDI_STATUS_FAILURE(status))
11204 {
11205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11206 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11208 vos_mem_free(pWdaParams->wdaMsgParam);
11209 vos_mem_free(pWdaParams);
11210 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 return CONVERT_WDI2VOS_STATUS(status) ;
11212}
Jeff Johnson295189b2012-06-20 16:38:30 -070011213/*
11214 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11215 *
11216 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011217void WDA_ReceiveFilterSetFilterReqCallback(
11218 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11219 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011220{
11221 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011223 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011225 if(NULL == pWdaParams)
11226 {
11227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011228 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011229 VOS_ASSERT(0) ;
11230 return ;
11231 }
11232
11233 vos_mem_free(pWdaParams->wdaMsgParam) ;
11234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11235 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011236 //print a msg, nothing else to do
11237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11238 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011239 return ;
11240}
Jeff Johnson295189b2012-06-20 16:38:30 -070011241/*
11242 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11243 * Request to WDI to set Receive Filters
11244 */
11245VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11246 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11247{
Jeff Johnson43971f52012-07-17 12:26:56 -070011248 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011249 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11250 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11251 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11252 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11253 tWDA_ReqParams *pWdaParams ;
11254 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011256 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011257 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11258 {
11259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011260 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011261 VOS_ASSERT(0);
11262 return VOS_STATUS_E_NOMEM;
11263 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011264 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11265 if(NULL == pWdaParams)
11266 {
11267 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011268 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011269 VOS_ASSERT(0);
11270 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11271 return VOS_STATUS_E_NOMEM;
11272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011273 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11274 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11275 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11276 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011277 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11278 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11279
11280 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11281 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011282
11283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11284 "FID %d FT %d NParams %d CT %d",
11285 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11286 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11287 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11288 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011289 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11290 {
11291 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11292 &pRcvPktFilterCfg->paramsData[i],
11293 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11295 "Proto %d Comp Flag %d \n",
11296 pwdiSetRcvPktFilterReqParamsType->
11297 wdiPktFilterCfg.paramsData[i].protocolLayer,
11298 pwdiSetRcvPktFilterReqParamsType->
11299 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11301 "Data Offset %d Data Len %d\n",
11302 pwdiSetRcvPktFilterReqParamsType->
11303 wdiPktFilterCfg.paramsData[i].dataOffset,
11304 pwdiSetRcvPktFilterReqParamsType->
11305 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11307 "CData: %d:%d:%d:%d:%d:%d\n",
11308 pwdiSetRcvPktFilterReqParamsType->
11309 wdiPktFilterCfg.paramsData[i].compareData[0],
11310 pwdiSetRcvPktFilterReqParamsType->
11311 wdiPktFilterCfg.paramsData[i].compareData[1],
11312 pwdiSetRcvPktFilterReqParamsType->
11313 wdiPktFilterCfg.paramsData[i].compareData[2],
11314 pwdiSetRcvPktFilterReqParamsType->
11315 wdiPktFilterCfg.paramsData[i].compareData[3],
11316 pwdiSetRcvPktFilterReqParamsType->
11317 wdiPktFilterCfg.paramsData[i].compareData[4],
11318 pwdiSetRcvPktFilterReqParamsType->
11319 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011320 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11321 "MData: %d:%d:%d:%d:%d:%d\n",
11322 pwdiSetRcvPktFilterReqParamsType->
11323 wdiPktFilterCfg.paramsData[i].dataMask[0],
11324 pwdiSetRcvPktFilterReqParamsType->
11325 wdiPktFilterCfg.paramsData[i].dataMask[1],
11326 pwdiSetRcvPktFilterReqParamsType->
11327 wdiPktFilterCfg.paramsData[i].dataMask[2],
11328 pwdiSetRcvPktFilterReqParamsType->
11329 wdiPktFilterCfg.paramsData[i].dataMask[3],
11330 pwdiSetRcvPktFilterReqParamsType->
11331 wdiPktFilterCfg.paramsData[i].dataMask[4],
11332 pwdiSetRcvPktFilterReqParamsType->
11333 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011335 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011336 /* Store Params pass it to WDI */
11337 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11338 pWdaParams->pWdaContext = pWDA;
11339 /* Store param pointer as passed in by caller */
11340 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011341 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11342 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11343 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011344 if(IS_WDI_STATUS_FAILURE(status))
11345 {
11346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11347 "Failure in SetFilter(),free all the memory,status %d ",status);
11348 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11349 vos_mem_free(pWdaParams->wdaMsgParam);
11350 vos_mem_free(pWdaParams);
11351 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011352 return CONVERT_WDI2VOS_STATUS(status) ;
11353}
Jeff Johnson295189b2012-06-20 16:38:30 -070011354/*
11355 * FUNCTION: WDA_FilterMatchCountReqCallback
11356 *
11357 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011358void WDA_FilterMatchCountReqCallback(
11359 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11360 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011361{
11362 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11363 tWDA_CbContext *pWDA;
11364 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11365 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11366 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11367 tANI_U8 i;
11368 vos_msg_t vosMsg;
11369
11370 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011371 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011372 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11373
Jeff Johnsone7245742012-09-05 17:12:55 -070011374 if(NULL == pRcvFltPktMatchCntRsp)
11375 {
11376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011377 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011378 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011379 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011380 return ;
11381 }
11382
Jeff Johnson295189b2012-06-20 16:38:30 -070011383 if(NULL == pWdaParams)
11384 {
11385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011386 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011387 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011388 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011389 return ;
11390 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011391 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11392 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11394 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11395
11396 /* Message Header */
11397 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11398 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11399
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011400 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011401
11402 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11403 {
11404 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11405 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11406 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 /* VOS message wrapper */
11408 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11409 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11410 vosMsg.bodyval = 0;
11411 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11412 {
11413 /* free the mem and return */
11414 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11415 }
11416
11417 vos_mem_free(pWdaParams->wdaMsgParam) ;
11418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11419 vos_mem_free(pWdaParams) ;
11420}
Jeff Johnson295189b2012-06-20 16:38:30 -070011421/*
11422 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11423 * Request to WDI to get PC Filter Match Count
11424 */
11425VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11426{
Jeff Johnson43971f52012-07-17 12:26:56 -070011427 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011428 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11429 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11430 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011432 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011433 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11434 {
11435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011436 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011437 VOS_ASSERT(0);
11438 return VOS_STATUS_E_NOMEM;
11439 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011440 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11441 if(NULL == pWdaParams)
11442 {
11443 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011444 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011445 VOS_ASSERT(0);
11446 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11447 return VOS_STATUS_E_NOMEM;
11448 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011449
Jeff Johnson295189b2012-06-20 16:38:30 -070011450 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11451
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011452 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11453 pRcvFltPktMatchRsp->bssId,
11454 sizeof(wpt_macAddr));
11455
Jeff Johnson295189b2012-06-20 16:38:30 -070011456 /* Store Params pass it to WDI */
11457 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11458 pWdaParams->pWdaContext = pWDA;
11459 /* Store param pointer as passed in by caller */
11460 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11462 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11463 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011464 if(IS_WDI_STATUS_FAILURE(status))
11465 {
11466 /* failure returned by WDI API */
11467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11468 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11470 vos_mem_free(pWdaParams) ;
11471 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11472 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11473 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 return CONVERT_WDI2VOS_STATUS(status) ;
11475}
Jeff Johnson295189b2012-06-20 16:38:30 -070011476/*
11477 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11478 *
11479 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011480void WDA_ReceiveFilterClearFilterReqCallback(
11481 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11482 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011483{
11484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011485 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011486 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011487/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11488 if(NULL == pWdaParams)
11489 {
11490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011491 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 VOS_ASSERT(0) ;
11493 return ;
11494 }
11495
11496 vos_mem_free(pWdaParams->wdaMsgParam) ;
11497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11498 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011499 //print a msg, nothing else to do
11500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11501 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011502 return ;
11503}
Jeff Johnson295189b2012-06-20 16:38:30 -070011504/*
11505 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11506 * Request to WDI to clear Receive Filters
11507 */
11508VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11509 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11510{
Jeff Johnson43971f52012-07-17 12:26:56 -070011511 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011512 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11513 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11514 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011516 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 if(NULL == pwdiRcvFltPktClearReqParamsType)
11518 {
11519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011521 VOS_ASSERT(0);
11522 return VOS_STATUS_E_NOMEM;
11523 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011524 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11525 if(NULL == pWdaParams)
11526 {
11527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 VOS_ASSERT(0);
11530 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11531 return VOS_STATUS_E_NOMEM;
11532 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011533 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11534 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011535 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11536 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11537 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11538 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011539
11540 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 /* Store Params pass it to WDI */
11542 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11543 pWdaParams->pWdaContext = pWDA;
11544 /* Store param pointer as passed in by caller */
11545 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11547 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11548 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011549 if(IS_WDI_STATUS_FAILURE(status))
11550 {
11551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11552 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11554 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011555 return CONVERT_WDI2VOS_STATUS(status) ;
11556}
11557#endif // WLAN_FEATURE_PACKET_FILTERING
11558
Jeff Johnson295189b2012-06-20 16:38:30 -070011559/*
11560 * FUNCTION: WDA_ProcessSetPowerParamsReq
11561 * Request to WDI to set power params
11562 */
11563VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11564 tSirSetPowerParamsReq *pPowerParams)
11565{
Jeff Johnson43971f52012-07-17 12:26:56 -070011566 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011567 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11568 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011569 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011571 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011572 if(NULL == pwdiSetPowerParamsReqInfo)
11573 {
11574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011576 VOS_ASSERT(0);
11577 return VOS_STATUS_E_NOMEM;
11578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011579 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11580 if(NULL == pWdaParams)
11581 {
11582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011583 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011584 VOS_ASSERT(0);
11585 vos_mem_free(pwdiSetPowerParamsReqInfo);
11586 return VOS_STATUS_E_NOMEM;
11587 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011588
Jeff Johnson295189b2012-06-20 16:38:30 -070011589
11590 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11591 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011592 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11593 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011594 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11595 pPowerParams->uListenInterval;
11596 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11597 pPowerParams->uBcastMcastFilter;
11598 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11599 pPowerParams->uEnableBET;
11600 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11601 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011602 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011603
Jeff Johnson295189b2012-06-20 16:38:30 -070011604 /* Store Params pass it to WDI */
11605 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11606 pWdaParams->pWdaContext = pWDA;
11607 /* Store param pointer as passed in by caller */
11608 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011609 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11610 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11611 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011612 if(IS_WDI_STATUS_FAILURE(status))
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11615 "Failure in Set power params REQ WDI API, free all the memory " );
11616 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11617 vos_mem_free(pWdaParams->wdaMsgParam);
11618 pWdaParams->wdaWdiApiMsgParam = NULL;
11619 pWdaParams->wdaMsgParam = NULL;
11620 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011621 return CONVERT_WDI2VOS_STATUS(status) ;
11622}
11623
11624/*
11625 * FUNCTION: WDA_SetTmLevelRspCallback
11626 * Set TM Level response
11627 */
11628void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11629{
11630 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11631
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011633 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011634
11635 if(NULL == pWdaParams)
11636 {
11637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011638 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011639 VOS_ASSERT(0) ;
11640 return ;
11641 }
11642
11643 /* Dose not need to send notification to upper layer
11644 * Just free allocated resources */
11645 if( pWdaParams != NULL )
11646 {
11647 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11648 {
11649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11650 }
11651 vos_mem_free(pWdaParams->wdaMsgParam) ;
11652 vos_mem_free(pWdaParams) ;
11653 }
11654}
11655
11656/*
11657 * FUNCTION: WDA_ProcessSetTmLevelReq
11658 * Set TM Level request
11659 */
11660VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11661 tAniSetTmLevelReq *setTmLevelReq)
11662{
11663 WDI_Status status = WDI_STATUS_SUCCESS ;
11664 tWDA_ReqParams *pWdaParams ;
11665 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11666 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11667 sizeof(WDI_SetTmLevelReqType)) ;
11668 if(NULL == wdiSetTmLevelReq)
11669 {
11670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011671 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011672 VOS_ASSERT(0);
11673 return VOS_STATUS_E_NOMEM;
11674 }
11675
11676 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11677 if(NULL == pWdaParams)
11678 {
11679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011680 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011681 VOS_ASSERT(0);
11682 vos_mem_free(wdiSetTmLevelReq);
11683 return VOS_STATUS_E_NOMEM;
11684 }
11685
11686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011687 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011688
11689 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11690 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11691
11692 pWdaParams->pWdaContext = pWDA;
11693 pWdaParams->wdaMsgParam = setTmLevelReq;
11694 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11695
11696 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11697 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11698
11699 if(IS_WDI_STATUS_FAILURE(status))
11700 {
11701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080011702 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070011703 vos_mem_free(pWdaParams->wdaMsgParam) ;
11704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11705 vos_mem_free(pWdaParams) ;
11706 }
11707
11708 return CONVERT_WDI2VOS_STATUS(status) ;
11709}
11710
11711VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11712 tpTxControlParams pTxCtrlParam)
11713{
11714 VOS_STATUS wdaStatus;
11715
11716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011718 if( pTxCtrlParam == NULL )
11719 {
11720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011721 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011722 return VOS_STATUS_E_FAILURE;
11723 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011724 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11725 {
11726 wdaStatus = WDA_SuspendDataTx(pWDA);
11727 }
11728 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11729 {
11730 wdaStatus = WDA_ResumeDataTx(pWDA);
11731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011732 return wdaStatus;
11733}
11734
11735 /* FUNCTION WDA_featureCapsExchange
11736 * WDA API to invoke capability exchange between host and FW.
11737 */
11738void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11739{
11740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011741 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 WDI_featureCapsExchangeReq( NULL, pVosContext);
11743}
11744
Yathish9f22e662012-12-10 14:21:35 -080011745/* FUNCTION WDA_disableCapablityFeature
11746 * WDA API to diable Active mode offload in host.
11747 */
11748void WDA_disableCapablityFeature(tANI_U8 feature_index)
11749{
11750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11751 "%s:enter", __func__ );
11752 WDI_disableCapablityFeature(feature_index);
11753}
11754
Jeff Johnson295189b2012-06-20 16:38:30 -070011755 /* FUNCTION WDA_getHostWlanFeatCaps
11756 * Wrapper for WDI API, that will return if the feature (enum value).passed
11757 * to this API is supported or not in Host
11758 * return value
11759 * 0 - implies feature is NOT Supported
11760 * any non zero value - implies feature is SUPPORTED
11761 */
11762tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11763{
11764 return WDI_getHostWlanFeatCaps(featEnumValue);
11765}
11766
11767 /* FUNCTION WDA_getFwWlanFeatCaps
11768 * Wrapper for WDI API, that will return if the feature (enum value).passed
11769 * to this API is supported or not in FW
11770 * return value
11771 * 0 - implies feature is NOT Supported
11772 * any non zero value - implies feature is SUPPORTED
11773 */
11774tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11775{
11776 return WDI_getFwWlanFeatCaps(featEnumValue);
11777}
11778
11779/*
11780 * FUNCTION: WDA_shutdown
11781 * Shutdown WDA/WDI without handshaking with Riva.
11782 * Synchronous function.
11783 */
11784VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11785{
11786 WDI_Status wdiStatus;
11787 //tANI_U8 eventIdx = 0;
11788 VOS_STATUS status = VOS_STATUS_SUCCESS;
11789 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011790 if (NULL == pWDA)
11791 {
11792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011793 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011794 VOS_ASSERT(0);
11795 return VOS_STATUS_E_FAILURE;
11796 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011797 /* FTM mode stay START_STATE */
11798 if( (WDA_READY_STATE != pWDA->wdaState) &&
11799 (WDA_INIT_STATE != pWDA->wdaState) &&
11800 (WDA_START_STATE != pWDA->wdaState) )
11801 {
11802 VOS_ASSERT(0);
11803 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011804
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011805 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
11806 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070011807 {
11808 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011809 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011811
Jeff Johnson295189b2012-06-20 16:38:30 -070011812 /* call WDI shutdown */
11813 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011814 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11815 {
11816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11817 "error in WDA Stop" );
11818 status = VOS_STATUS_E_FAILURE;
11819 }
11820 /* WDI stop is synchrnous, shutdown is complete when it returns */
11821 pWDA->wdaState = WDA_STOP_STATE;
11822
Jeff Johnson295189b2012-06-20 16:38:30 -070011823 /* shutdown should perform the stop & close actions. */
11824 /* Destroy the event */
11825 status = vos_event_destroy(&pWDA->txFrameEvent);
11826 if(!VOS_IS_STATUS_SUCCESS(status))
11827 {
11828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11829 "VOS Event destroy failed - status = %d\n", status);
11830 status = VOS_STATUS_E_FAILURE;
11831 }
11832 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
11833 if(!VOS_IS_STATUS_SUCCESS(status))
11834 {
11835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11836 "VOS Event destroy failed - status = %d\n", status);
11837 status = VOS_STATUS_E_FAILURE;
11838 }
11839 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
11840 if(!VOS_IS_STATUS_SUCCESS(status))
11841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11843 "VOS Event destroy failed - status = %d\n", status);
11844 status = VOS_STATUS_E_FAILURE;
11845 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011846 /* free WDA context */
11847 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
11848 if ( !VOS_IS_STATUS_SUCCESS(status) )
11849 {
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11851 "error in WDA close " );
11852 status = VOS_STATUS_E_FAILURE;
11853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 return status;
11855}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011856
Jeff Johnsone7245742012-09-05 17:12:55 -070011857/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011858 * FUNCTION: WDA_setNeedShutdown
11859 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070011860 */
11861
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011862void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070011863{
11864 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011865 if(pWDA == NULL)
11866 {
11867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11868 "Could not get the WDA Context pointer" );
11869 return;
11870 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011871 pWDA->needShutdown = TRUE;
11872}
11873/*
11874 * FUNCTION: WDA_needShutdown
11875 * WDA needs a shutdown
11876 */
11877
11878v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
11879{
11880 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011881 if(pWDA == NULL)
11882 {
11883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11884 "Could not get the WDA Context pointer" );
11885 return 0;
11886 }
11887 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070011888}
11889
Mohit Khanna4a70d262012-09-11 16:30:12 -070011890#ifdef WLAN_FEATURE_11AC
11891/*
11892 * FUNCTION: WDA_SetBeaconFilterReqCallback
11893 *
11894 */
11895void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
11896{
11897 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011899 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011900 if(NULL == pWdaParams)
11901 {
11902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011903 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011904 VOS_ASSERT(0) ;
11905 return ;
11906 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011907
Mohit Khanna4a70d262012-09-11 16:30:12 -070011908 vos_mem_free(pWdaParams->wdaMsgParam) ;
11909 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11910 vos_mem_free(pWdaParams) ;
11911 /*
11912 * No respone required for SetBeaconFilter req so just free the request
11913 * param here
11914 */
11915
11916 return ;
11917}
11918
11919VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
11920 tUpdateVHTOpMode *pData)
11921{
11922 WDI_Status status = WDI_STATUS_SUCCESS ;
11923 tWDA_ReqParams *pWdaParams ;
11924 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
11925 sizeof(WDI_UpdateVHTOpMode)) ;
11926 if(NULL == wdiTemp)
11927 {
11928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011929 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011930 VOS_ASSERT(0);
11931 return VOS_STATUS_E_NOMEM;
11932 }
11933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11934 if(NULL == pWdaParams)
11935 {
11936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011937 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011938 VOS_ASSERT(0);
11939 vos_mem_free(wdiTemp);
11940 return VOS_STATUS_E_NOMEM;
11941 }
11942
11943 wdiTemp->opMode = pData->opMode;
11944 wdiTemp->staId = pData->staId;
11945
11946 pWdaParams->pWdaContext = pWDA;
11947 /* Store Req pointer, as this will be used for response */
11948 pWdaParams->wdaMsgParam = (void *)pData;
11949 /* store Params pass it to WDI */
11950 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
11951
11952 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
11953
11954 if(IS_WDI_STATUS_FAILURE(status))
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11957 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
11958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11959 vos_mem_free(pWdaParams->wdaMsgParam);
11960 vos_mem_free(pWdaParams);
11961 }
11962 return CONVERT_WDI2VOS_STATUS(status) ;
11963}
11964#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011965
11966/*==========================================================================
11967 FUNCTION WDA_TransportChannelDebug
11968
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070011969 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011970 Display Transport Channel debugging information
11971 User may request to display DXE channel snapshot
11972 Or if host driver detects any abnormal stcuk may display
11973
11974 PARAMETERS
Jeff Johnsonb88db982012-12-10 13:34:59 -080011975 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011976 enableStallDetect : Enable stall detect feature
11977 This feature will take effect to data performance
11978 Not integrate till fully verification
11979
11980 RETURN VALUE
11981 NONE
11982
11983===========================================================================*/
11984void WDA_TransportChannelDebug
11985(
11986 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011987 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011988)
11989{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011990 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011991 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011992}