blob: 6f8ff8fd78f13204aa95982152a2712d00e83727 [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) ;
1406
Jeff Johnson295189b2012-06-20 16:38:30 -07001407 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001408#ifdef WLAN_DEBUG
1409 {
1410 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001411 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1412 "****** Dumping CFG TLV ***** ");
1413 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1414 {
1415 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1416 "%02x %02x %02x %02x %02x %02x %02x %02x",
1417 tlvStructStart[i],
1418 tlvStructStart[i+1],
1419 tlvStructStart[i+2],
1420 tlvStructStart[i+3],
1421 tlvStructStart[i+4],
1422 tlvStructStart[i+5],
1423 tlvStructStart[i+6],
1424 tlvStructStart[i+7]);
1425 }
1426 /* Dump the bytes in the last line*/
1427 for (; i < wdiStartParams->usConfigBufferLen; i++)
1428 {
1429 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1430 "%02x ",tlvStructStart[i]);
1431 }
1432 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1433 "**************************** ");
1434 }
1435#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001436 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001437handle_failure:
1438 vos_mem_free(configParam);
1439 return VOS_STATUS_E_FAILURE;
1440}
Jeff Johnson295189b2012-06-20 16:38:30 -07001441/*
1442 * FUNCTION: WDA_wdiCompleteCB
1443 * call the voss call back function
1444 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001445void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001446{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1448 tWDA_CbContext *wdaContext;
1449
1450 if(NULL == pWdaParams)
1451 {
1452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001453 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001454 VOS_ASSERT(0) ;
1455 return ;
1456 }
1457
1458 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1459
Jeff Johnson295189b2012-06-20 16:38:30 -07001460 if (NULL == wdaContext)
1461 {
1462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001463 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001464 return ;
1465 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001466
Jeff Johnson295189b2012-06-20 16:38:30 -07001467 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001468 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001469 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001470 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001471 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001472 vos_mem_free(pWdaParams);
1473
Jeff Johnson295189b2012-06-20 16:38:30 -07001474 if(WDI_STATUS_SUCCESS != status)
1475 {
1476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1477 "WDI stop callback returned failure" );
1478 VOS_ASSERT(0) ;
1479 }
1480 else
1481 {
1482 wdaContext->wdaState = WDA_STOP_STATE;
1483 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001484
Jeff Johnson295189b2012-06-20 16:38:30 -07001485 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001486 vos_WDAComplete_cback(wdaContext->pVosContext);
1487
Jeff Johnson295189b2012-06-20 16:38:30 -07001488 return ;
1489}
Jeff Johnson295189b2012-06-20 16:38:30 -07001490/*
1491 * FUNCTION: WDA_stop
1492 * call WDI_stop
1493 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001494VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1495{
1496 WDI_Status wdiStatus;
1497 VOS_STATUS status = VOS_STATUS_SUCCESS;
1498 WDI_StopReqParamsType *wdiStopReq;
1499 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001500 tWDA_ReqParams *pWdaParams ;
1501
Jeff Johnson295189b2012-06-20 16:38:30 -07001502 if (NULL == pWDA)
1503 {
1504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001505 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001506 VOS_ASSERT(0);
1507 return VOS_STATUS_E_FAILURE;
1508 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001509 if (pWDA->wdiFailed == true)
1510 {
1511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001512 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001513 return VOS_STATUS_E_ALREADY;
1514 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001515
Jeff Johnson295189b2012-06-20 16:38:30 -07001516 /* FTM mode stay START_STATE */
1517 if( (WDA_READY_STATE != pWDA->wdaState) &&
1518 (WDA_INIT_STATE != pWDA->wdaState) &&
1519 (WDA_START_STATE != pWDA->wdaState) )
1520 {
1521 VOS_ASSERT(0);
1522 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 wdiStopReq = (WDI_StopReqParamsType *)
1524 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1525 if(NULL == wdiStopReq)
1526 {
1527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001528 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 VOS_ASSERT(0);
1530 return VOS_STATUS_E_NOMEM;
1531 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001532
Jeff Johnson295189b2012-06-20 16:38:30 -07001533 wdiStopReq->wdiStopReason = reason;
1534 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001535
1536 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1537 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001538 {
1539 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001540 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001541 VOS_ASSERT(0);
1542 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001543 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001544 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001545
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001546 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1547 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001548 {
1549 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001550 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001551 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001552
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001553 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1554 pWdaParams->wdaMsgParam = NULL;
1555 pWdaParams->pWdaContext = pWDA;
1556
Jeff Johnson295189b2012-06-20 16:38:30 -07001557 /* call WDI stop */
1558 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001559 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1560
Jeff Johnson295189b2012-06-20 16:38:30 -07001561 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1562 {
1563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1564 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001565 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1566 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001567 status = VOS_STATUS_E_FAILURE;
1568 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001569 return status;
1570}
Jeff Johnson295189b2012-06-20 16:38:30 -07001571/*
1572 * FUNCTION: WDA_close
1573 * call WDI_close and free the WDA context
1574 */
1575VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1576{
Jeff Johnson43971f52012-07-17 12:26:56 -07001577 VOS_STATUS status = VOS_STATUS_SUCCESS;
1578 WDI_Status wstatus;
1579 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001581 if (NULL == wdaContext)
1582 {
1583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001584 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001585 return VOS_STATUS_E_FAILURE;
1586 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001587 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1588 (WDA_STOP_STATE != wdaContext->wdaState))
1589 {
1590 VOS_ASSERT(0);
1591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001592 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001593 wstatus = WDI_Close();
1594 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001595 {
1596 status = VOS_STATUS_E_FAILURE;
1597 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001598 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001599 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001600 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1601 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "WDI Sync Event destroy failed - status = %d\n", status);
1605 status = VOS_STATUS_E_FAILURE;
1606 }
1607
Jeff Johnson43971f52012-07-17 12:26:56 -07001608 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001609 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001610 {
1611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1612 "VOS Event destroy failed - status = %d\n", status);
1613 status = VOS_STATUS_E_FAILURE;
1614 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001615 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001616 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "VOS Event destroy failed - status = %d\n", status);
1620 status = VOS_STATUS_E_FAILURE;
1621 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001622 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001623 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001624 {
1625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1626 "VOS Event destroy failed - status = %d\n", status);
1627 status = VOS_STATUS_E_FAILURE;
1628 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001629 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001630 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001631 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001632 {
1633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1634 "error in WDA close " );
1635 status = VOS_STATUS_E_FAILURE;
1636 }
1637 return status;
1638}
Jeff Johnson295189b2012-06-20 16:38:30 -07001639/*
1640 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1641 * returns 1 if the compiled version is greater than or equal to the input version
1642 */
1643
1644uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1645{
1646 VOS_STATUS status = VOS_STATUS_SUCCESS;
1647 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1648 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001649 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001650 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1651 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1652 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1653 (compiledVersion.revision >= revision)))
1654 return 1;
1655 else
1656 return 0;
1657}
Jeff Johnson295189b2012-06-20 16:38:30 -07001658/*
1659 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1660 * returns 1 if the compiled version is greater than or equal to the input version
1661 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001662uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1663{
1664 VOS_STATUS status = VOS_STATUS_SUCCESS;
1665 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1666 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001667 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001668 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1669 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1670 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1671 (reportedVersion.revision >= revision)))
1672 return 1;
1673 else
1674 return 0;
1675}
Jeff Johnson295189b2012-06-20 16:38:30 -07001676/*
1677 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1678 * Returns the version of the WCNSS WLAN API with which the HOST
1679 * device driver was compiled
1680 */
1681VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1682 tSirVersionType *pVersion)
1683{
1684 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001685 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001686 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 if ((NULL == pvosGCtx) || (NULL == pVersion))
1688 {
1689 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001690 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001691 VOS_ASSERT(0);
1692 return VOS_STATUS_E_FAILURE;
1693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001694 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1695 if (NULL == pWDA )
1696 {
1697 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001698 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001699 VOS_ASSERT(0);
1700 return VOS_STATUS_E_FAILURE;
1701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001702 *pVersion = pWDA->wcnssWlanCompiledVersion;
1703 return VOS_STATUS_SUCCESS;
1704}
Jeff Johnson295189b2012-06-20 16:38:30 -07001705/*
1706 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1707 * Returns the version of the WCNSS WLAN API with which the WCNSS
1708 * device driver was compiled
1709 */
1710VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1711 tSirVersionType *pVersion)
1712{
1713 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001714 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001715 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 if ((NULL == pvosGCtx) || (NULL == pVersion))
1717 {
1718 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001719 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001720 VOS_ASSERT(0);
1721 return VOS_STATUS_E_FAILURE;
1722 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001723 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1724 if (NULL == pWDA )
1725 {
1726 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001727 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 VOS_ASSERT(0);
1729 return VOS_STATUS_E_FAILURE;
1730 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001731 *pVersion = pWDA->wcnssWlanReportedVersion;
1732 return VOS_STATUS_SUCCESS;
1733}
Jeff Johnson295189b2012-06-20 16:38:30 -07001734/*
1735 * FUNCTION: WDA_GetWcnssSoftwareVersion
1736 * Returns the WCNSS Software version string
1737 */
1738VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1739 tANI_U8 *pVersion,
1740 tANI_U32 versionBufferSize)
1741{
1742 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001743 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001744 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001745 if ((NULL == pvosGCtx) || (NULL == pVersion))
1746 {
1747 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001748 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 VOS_ASSERT(0);
1750 return VOS_STATUS_E_FAILURE;
1751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001752 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1753 if (NULL == pWDA )
1754 {
1755 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001756 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 VOS_ASSERT(0);
1758 return VOS_STATUS_E_FAILURE;
1759 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001760 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1761 return VOS_STATUS_SUCCESS;
1762}
Jeff Johnson295189b2012-06-20 16:38:30 -07001763/*
1764 * FUNCTION: WDA_GetWcnssHardwareVersion
1765 * Returns the WCNSS Hardware version string
1766 */
1767VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1768 tANI_U8 *pVersion,
1769 tANI_U32 versionBufferSize)
1770{
1771 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001772 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001773 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 if ((NULL == pvosGCtx) || (NULL == pVersion))
1775 {
1776 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001777 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001778 VOS_ASSERT(0);
1779 return VOS_STATUS_E_FAILURE;
1780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001781 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1782 if (NULL == pWDA )
1783 {
1784 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001785 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001786 VOS_ASSERT(0);
1787 return VOS_STATUS_E_FAILURE;
1788 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001789 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1790 return VOS_STATUS_SUCCESS;
1791}
Jeff Johnson295189b2012-06-20 16:38:30 -07001792/*
1793 * FUNCTION: WDA_WniCfgDnld
1794 * Trigger CFG Download
1795 */
1796VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1797{
1798 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001799 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001800 v_VOID_t *pFileImage = NULL;
1801 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001802 v_VOID_t *pCfgBinary = NULL;
1803 v_SIZE_t cbCfgBinarySize = 0;
1804
1805 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001806 if (NULL == pMac )
1807 {
1808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001809 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 VOS_ASSERT(0);
1811 return VOS_STATUS_E_FAILURE;
1812 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001813 /* get the number of bytes in the CFG Binary... */
1814 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1815 &cbFileImageSize );
1816 if ( VOS_STATUS_E_NOMEM != vosStatus )
1817 {
1818 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1819 "Error obtaining binary size" );
1820 goto fail;
1821 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001822 // malloc a buffer to read in the Configuration binary file.
1823 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001824 if ( NULL == pFileImage )
1825 {
1826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1827 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1828 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001829 vosStatus = VOS_STATUS_E_NOMEM;
1830 goto fail;
1831 }
1832
1833 /* Get the entire CFG file image... */
1834 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1835 &cbFileImageSize );
1836 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1837 {
1838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1839 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1840 cbFileImageSize );
1841 goto fail;
1842 }
1843
1844 /*
1845 * Validate the binary image. This function will return a pointer
1846 * and length where the CFG binary is located within the binary image file.
1847 */
1848 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1849 &pCfgBinary, &cbCfgBinarySize );
1850 if ( VOS_FALSE == bStatus )
1851 {
1852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1853 "Error: Cannot find STA CFG in binary image file" );
1854 vosStatus = VOS_STATUS_E_FAILURE;
1855 goto fail;
1856 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001857 /*
1858 * TODO: call the config download function
1859 * for now calling the existing cfg download API
1860 */
1861 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001862 if( pFileImage != NULL )
1863 {
1864 vos_mem_free( pFileImage );
1865 }
1866 return vosStatus;
1867
1868fail:
1869 if(pCfgBinary != NULL)
1870 vos_mem_free( pFileImage );
1871
1872 return vosStatus;
1873}
Jeff Johnson295189b2012-06-20 16:38:30 -07001874/* -----------------------------------------------------------------
1875 * WDI interface
1876 * -----------------------------------------------------------------
1877 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001878/*
1879 * FUNCTION: WDA_suspendDataTxCallback
1880 * call back function called from TL after suspend Transmission
1881 */
1882VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1883 v_U8_t* ucSTAId,
1884 VOS_STATUS vosStatus)
1885{
1886 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001888 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 if (NULL == pWDA )
1890 {
1891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001892 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001893 VOS_ASSERT(0);
1894 return VOS_STATUS_E_FAILURE;
1895 }
1896 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1897 {
1898 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1899 }
1900 else
1901 {
1902 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 /* Trigger the event to bring the WDA TL suspend function to come
1905 * out of wait*/
1906 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1907 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1908 {
1909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1910 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 /* If TL suspended had timedout before this callback was called, resume back
1913 * TL.*/
1914 if (pWDA->txSuspendTimedOut)
1915 {
1916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1917 "Late TLSuspendCallback, resuming TL back again\n");
1918 WDA_ResumeDataTx(pWDA);
1919 pWDA->txSuspendTimedOut = FALSE;
1920 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001921 return VOS_STATUS_SUCCESS;
1922}
Jeff Johnson295189b2012-06-20 16:38:30 -07001923/*
1924 * FUNCTION: WDA_suspendDataTx
1925 * Update TL to suspend the data Transmission
1926 */
1927VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1928{
1929 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1930 tANI_U8 eventIdx = 0;
1931 tANI_U8 ucSTAId = 0;
1932
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001934 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001936 if (pWDA->txSuspendTimedOut)
1937 {
1938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1939 "TL suspend timedout previously, CB not called yet\n");
1940 return status;
1941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001942 /* Reset the event to be not signalled */
1943 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1944 if(!VOS_IS_STATUS_SUCCESS(status))
1945 {
1946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1947 "VOS Event reset failed - status = %d\n",status);
1948 return VOS_STATUS_E_FAILURE;
1949 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 /*Indicate TL to suspend transmission for all Sta Id */
1951 ucSTAId = WLAN_ALL_STA;
1952 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1953 WDA_SuspendDataTxCallback);
1954 if(status != VOS_STATUS_SUCCESS)
1955 {
1956 return status;
1957 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001958 /* Wait for the event to be set by the TL, to get the response of
1959 * suspending the TX queues, this event should be set by the Callback
1960 * function called by TL*/
1961 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1962 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1963 if(!VOS_IS_STATUS_SUCCESS(status))
1964 {
1965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1966 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001967 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001968 /* Set this flag to true when TL suspend times out, so that when TL
1969 * suspend eventually happens and calls the callback, TL can be resumed
1970 * right away by looking at this flag when true.*/
1971 pWDA->txSuspendTimedOut = TRUE;
1972 }
1973 else
1974 {
1975 pWDA->txSuspendTimedOut = FALSE;
1976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001977 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1978 {
1979 status = VOS_STATUS_SUCCESS;
1980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 return status;
1982}
Jeff Johnson295189b2012-06-20 16:38:30 -07001983/*
1984 * FUNCTION: WDA_resumeDataTx
1985 * Update TL to resume the data Transmission
1986 */
1987VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1988{
1989 VOS_STATUS status = VOS_STATUS_SUCCESS;
1990 tANI_U8 ucSTAId = 0;
1991
1992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001993 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001994 ucSTAId = WLAN_ALL_STA;
1995 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1996 return status;
1997}
Jeff Johnson295189b2012-06-20 16:38:30 -07001998/*
1999 * FUNCTION: WDA_InitScanReqCallback
2000 * Trigger Init SCAN callback
2001 */
2002void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2003{
2004 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2005 tWDA_CbContext *pWDA;
2006 tInitScanParams *pWDA_ScanParam ;
2007 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002009 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002010 if(NULL == pWdaParams)
2011 {
2012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002013 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002014 VOS_ASSERT(0) ;
2015 return ;
2016 }
2017 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2018 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002019 if(NULL == pWDA_ScanParam)
2020 {
2021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002022 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002023 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2025 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 return ;
2027 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002028 if(WDI_STATUS_SUCCESS != wdiStatus)
2029 {
2030 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 if(VOS_STATUS_SUCCESS != status)
2032 {
2033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002034 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002035 }
2036 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 /* free WDI command buffer */
2038 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002039 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002040
Jeff Johnson295189b2012-06-20 16:38:30 -07002041
2042 /* assign status to scan params */
2043 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 /* send SCAN RSP message back to PE */
2045 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002046 return ;
2047}
2048
2049/*
2050 * FUNCTION: WDA_ProcessInitScanReq
2051 * Trigger Init SCAN in DAL
2052 */
2053VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2054 tInitScanParams *initScanParams)
2055{
2056 WDI_Status status = WDI_STATUS_SUCCESS ;
2057 WDI_InitScanReqParamsType *wdiInitScanParam =
2058 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2059 sizeof(WDI_InitScanReqParamsType)) ;
2060 tWDA_ReqParams *pWdaParams;
2061 tANI_U8 i = 0;
2062
2063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002064 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002065 if(NULL == wdiInitScanParam)
2066 {
2067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002068 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002069 VOS_ASSERT(0);
2070 return VOS_STATUS_E_NOMEM;
2071 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002072 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2073 if(NULL == pWdaParams)
2074 {
2075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002076 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 VOS_ASSERT(0);
2078 vos_mem_free(wdiInitScanParam);
2079 return VOS_STATUS_E_NOMEM;
2080 }
2081
2082 /* Copy init Scan params to WDI structure */
2083 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2084 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2085 sizeof(tSirMacAddr)) ;
2086 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2087 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2088 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2089#ifdef WLAN_FEATURE_P2P
2090 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2091 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2092#else
2093 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2094 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2095#endif
2096 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2097 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002098 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2099 {
2100 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2101 initScanParams->scanEntry.bssIdx[i] ;
2102 }
2103
2104 /* if Frame length, copy macMgmtHdr or WDI structure */
2105 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2106 {
2107 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2108 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2109 }
2110 wdiInitScanParam->wdiReqStatusCB = NULL ;
2111
Jeff Johnson295189b2012-06-20 16:38:30 -07002112 /* Store Init Req pointer, as this will be used for response */
2113 pWdaParams->pWdaContext = pWDA;
2114 pWdaParams->wdaMsgParam = initScanParams;
2115 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002116 /* first try to suspend TX */
2117 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 if(WDI_STATUS_SUCCESS != status)
2119 {
2120 goto handleWdiFailure;
2121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002122 /* call DAL API to pass init scan request to DAL */
2123 status = WDI_InitScanReq(wdiInitScanParam,
2124 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 if(IS_WDI_STATUS_FAILURE(status))
2126 {
2127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2128 "error in WDA Init Scan, Resume Tx " );
2129 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002130 VOS_ASSERT(0) ;
2131
2132 goto handleWdiFailure;
2133 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002134 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002135handleWdiFailure:
2136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2137 "Failure in WDI Api, free all the memory " );
2138 /* free WDI command buffer */
2139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2140 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002141 /* send Failure to PE */
2142 initScanParams->status = eSIR_FAILURE ;
2143 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 return CONVERT_WDI2VOS_STATUS(status) ;
2145}
2146
Jeff Johnson295189b2012-06-20 16:38:30 -07002147/*
2148 * FUNCTION: WDA_StartScanReqCallback
2149 * send Start SCAN RSP back to PE
2150 */
2151void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2152 void* pUserData)
2153{
2154 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2155 tWDA_CbContext *pWDA;
2156 tStartScanParams *pWDA_ScanParam;
2157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002158 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 if(NULL == pWdaParams)
2160 {
2161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002162 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002163 VOS_ASSERT(0) ;
2164 return ;
2165 }
2166 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2167 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002168 if(NULL == pWDA_ScanParam)
2169 {
2170 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002171 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002172 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002173 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002174 return ;
2175 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2177 {
2178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002179 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002180 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002181 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002182 return ;
2183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002184 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2185 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002186
Jeff Johnson295189b2012-06-20 16:38:30 -07002187
2188 /* assign status to scan params */
2189 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002190 /* send SCAN RSP message back to PE */
2191 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 return ;
2193}
2194
Jeff Johnson295189b2012-06-20 16:38:30 -07002195/*
2196 * FUNCTION: WDA_ProcessStartScanReq
2197 * Trigger start SCAN in WDI
2198 */
2199VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2200 tStartScanParams *startScanParams)
2201{
2202 WDI_Status status = WDI_STATUS_SUCCESS;
2203 WDI_StartScanReqParamsType *wdiStartScanParams =
2204 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2205 sizeof(WDI_StartScanReqParamsType)) ;
2206 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002208 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 if(NULL == wdiStartScanParams)
2210 {
2211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002212 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002213 VOS_ASSERT(0);
2214 return VOS_STATUS_E_NOMEM;
2215 }
2216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2217 if(NULL == pWdaParams)
2218 {
2219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002220 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002221 VOS_ASSERT(0);
2222 vos_mem_free(wdiStartScanParams);
2223 return VOS_STATUS_E_NOMEM;
2224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002225 /* Copy init Scan params to WDI structure */
2226 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2227 wdiStartScanParams->wdiReqStatusCB = NULL ;
2228
Jeff Johnson295189b2012-06-20 16:38:30 -07002229 /* Store Init Req pointer, as this will be used for response */
2230 /* store Params pass it to WDI */
2231 pWdaParams->pWdaContext = pWDA;
2232 pWdaParams->wdaMsgParam = startScanParams;
2233 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002234 /* call DAL API to pass init scan request to DAL */
2235 status = WDI_StartScanReq(wdiStartScanParams,
2236 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 /* failure returned by WDI API */
2238 if(IS_WDI_STATUS_FAILURE(status))
2239 {
2240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2241 "Failure in Start Scan WDI API, free all the memory "
2242 "It should be due to previous abort scan." );
2243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2244 vos_mem_free(pWdaParams) ;
2245 startScanParams->status = eSIR_FAILURE ;
2246 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002248 return CONVERT_WDI2VOS_STATUS(status) ;
2249}
Jeff Johnson295189b2012-06-20 16:38:30 -07002250/*
2251 * FUNCTION: WDA_EndScanReqCallback
2252 * END SCAN callback
2253 */
2254void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2255{
2256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2257 tWDA_CbContext *pWDA;
2258 tEndScanParams *endScanParam;
2259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002260 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 if(NULL == pWdaParams)
2262 {
2263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002264 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002265 VOS_ASSERT(0) ;
2266 return ;
2267 }
2268 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2269 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 if(NULL == endScanParam)
2271 {
2272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002273 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002274 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002275 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2276 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 return ;
2278 }
2279
2280 /* Free WDI command buffer */
2281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2282 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002283 /* assign status to scan params */
2284 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 /* send response back to PE */
2286 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2287 return ;
2288}
2289
Jeff Johnson295189b2012-06-20 16:38:30 -07002290/*
2291 * FUNCTION: WDA_ProcessEndScanReq
2292 * Trigger END SCAN in WDI
2293 */
2294VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2295 tEndScanParams *endScanParams)
2296{
2297 WDI_Status status = WDI_STATUS_SUCCESS;
2298 WDI_EndScanReqParamsType *wdiEndScanParams =
2299 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2300 sizeof(WDI_EndScanReqParamsType)) ;
2301 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002303 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 if(NULL == wdiEndScanParams)
2305 {
2306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 VOS_ASSERT(0);
2309 return VOS_STATUS_E_NOMEM;
2310 }
2311 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2312 if(NULL == pWdaParams)
2313 {
2314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 VOS_ASSERT(0);
2317 vos_mem_free(wdiEndScanParams);
2318 return VOS_STATUS_E_NOMEM;
2319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002320 /* Copy init Scan params to WDI structure */
2321 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2322 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 /* Store Init Req pointer, as this will be used for response */
2324 /* store Params pass it to WDI */
2325 pWdaParams->pWdaContext = pWDA;
2326 pWdaParams->wdaMsgParam = endScanParams;
2327 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 /* call DAL API to pass init scan request to DAL */
2329 status = WDI_EndScanReq(wdiEndScanParams,
2330 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002331 if(IS_WDI_STATUS_FAILURE(status))
2332 {
2333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2334 "Failure in End Scan WDI API, free all the memory "
2335 "It should be due to previous abort scan." );
2336 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2337 vos_mem_free(pWdaParams) ;
2338 endScanParams->status = eSIR_FAILURE ;
2339 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 return CONVERT_WDI2VOS_STATUS(status) ;
2342}
Jeff Johnson295189b2012-06-20 16:38:30 -07002343/*
2344 * FUNCTION: WDA_FinishScanReqCallback
2345 * Trigger Finish SCAN callback
2346 */
2347void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2348{
2349 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2350 tWDA_CbContext *pWDA;
2351 tFinishScanParams *finishScanParam;
2352 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002354 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002355 if(NULL == pWdaParams)
2356 {
2357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002358 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 VOS_ASSERT(0) ;
2360 return ;
2361 }
2362
2363 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2364 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002365 if(NULL == finishScanParam)
2366 {
2367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002368 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2371 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 return ;
2373 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2375 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002376 /*
2377 * Now Resume TX, if we reached here means, TX is already suspended, we
2378 * have to resume it unconditionaly
2379 */
2380 status = WDA_ResumeDataTx(pWDA) ;
2381
2382 if(VOS_STATUS_SUCCESS != status)
2383 {
2384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002385 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2389 return ;
2390}
Jeff Johnson295189b2012-06-20 16:38:30 -07002391/*
2392 * FUNCTION: WDA_ProcessFinshScanReq
2393 * Trigger Finish SCAN in WDI
2394 */
2395VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2396 tFinishScanParams *finishScanParams)
2397{
2398 WDI_Status status = WDI_STATUS_SUCCESS;
2399 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2400 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2401 sizeof(WDI_FinishScanReqParamsType)) ;
2402 tWDA_ReqParams *pWdaParams ;
2403 tANI_U8 i = 0;
2404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002405 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002406 if(NULL == wdiFinishScanParams)
2407 {
2408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 VOS_ASSERT(0);
2411 return VOS_STATUS_E_NOMEM;
2412 }
2413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2414 if(NULL == pWdaParams)
2415 {
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 VOS_ASSERT(0);
2419 vos_mem_free(wdiFinishScanParams);
2420 return VOS_STATUS_E_NOMEM;
2421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 /* Copy init Scan params to WDI structure */
2423 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2424 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2425 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2427 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2428 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2429 finishScanParams->frameLength ;
2430 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2431 finishScanParams->currentOperChannel ;
2432 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2433 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2434 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2436 {
2437 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2438 finishScanParams->scanEntry.bssIdx[i] ;
2439 }
2440
2441
Jeff Johnson295189b2012-06-20 16:38:30 -07002442 /* if Frame length, copy macMgmtHdr ro WDI structure */
2443 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2444 {
2445 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2446 &finishScanParams->macMgmtHdr,
2447 sizeof(WDI_MacMgmtHdr)) ;
2448 }
2449 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002450 /* Store Init Req pointer, as this will be used for response */
2451 /* store Params pass it to WDI */
2452 pWdaParams->pWdaContext = pWDA;
2453 pWdaParams->wdaMsgParam = finishScanParams;
2454 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 /* call DAL API to pass init scan request to DAL */
2456 status = WDI_FinishScanReq(wdiFinishScanParams,
2457 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002458
Jeff Johnson295189b2012-06-20 16:38:30 -07002459
2460 /*
2461 * WDI API returns failure..
2462 */
2463 if(IS_WDI_STATUS_FAILURE( status))
2464 {
2465 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2466 "Failure in Finish Scan WDI API, free all the memory " );
2467 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2468 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002469 finishScanParams->status = eSIR_FAILURE ;
2470 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2471 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 return CONVERT_WDI2VOS_STATUS(status) ;
2473}
Jeff Johnson295189b2012-06-20 16:38:30 -07002474/*---------------------------------------------------------------------
2475 * ASSOC API's
2476 *---------------------------------------------------------------------
2477 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002478/*
2479 * FUNCTION: WDA_JoinReqCallback
2480 * Trigger Init SCAN callback
2481 */
2482void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2483{
2484 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2485 tWDA_CbContext *pWDA;
2486 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002488 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 if(NULL == pWdaParams)
2490 {
2491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002492 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 VOS_ASSERT(0) ;
2494 return ;
2495 }
2496 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2497 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002498 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2499 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002500 /* reset macBSSID */
2501 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002502 /* reset macSTASelf */
2503 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002504 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002506 return ;
2507}
Jeff Johnson295189b2012-06-20 16:38:30 -07002508/*
2509 * FUNCTION: WDA_ProcessJoinReq
2510 * Trigger Join REQ in WDI
2511 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002512VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2513 tSwitchChannelParams* joinReqParam)
2514{
2515 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 WDI_JoinReqParamsType *wdiJoinReqParam =
2517 (WDI_JoinReqParamsType *)vos_mem_malloc(
2518 sizeof(WDI_JoinReqParamsType)) ;
2519 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002521 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002522 if(NULL == wdiJoinReqParam)
2523 {
2524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002527 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 return VOS_STATUS_E_NOMEM;
2529 }
2530 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2531 if(NULL == pWdaParams)
2532 {
2533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002534 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002535 VOS_ASSERT(0);
2536 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002537 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002538 return VOS_STATUS_E_NOMEM;
2539 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002540
2541 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2542 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2543 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2544 {
2545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2546 "%s: received join request when BSSID or self-STA is NULL "
2547 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002548 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002549 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2550 VOS_ASSERT(0);
2551 vos_mem_free(wdiJoinReqParam);
2552 vos_mem_free(pWdaParams);
2553 joinReqParam->status = eSIR_FAILURE ;
2554 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2555 return VOS_STATUS_E_INVAL;
2556 }
2557
Jeff Johnson295189b2012-06-20 16:38:30 -07002558 /* copy the BSSID for pWDA */
2559 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2560 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002561 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2562 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002563 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2564 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002565#ifdef WLAN_FEATURE_VOWIFI
2566 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2567 joinReqParam->maxTxPower ;
2568#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2570 joinReqParam->localPowerConstraint ;
2571#endif
2572 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2573 joinReqParam->secondaryChannelOffset ;
2574 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2575
2576 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 /* Store Init Req pointer, as this will be used for response */
2578 /* store Params pass it to WDI */
2579 pWdaParams->pWdaContext = pWDA;
2580 pWdaParams->wdaMsgParam = joinReqParam;
2581 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002582 status = WDI_JoinReq(wdiJoinReqParam,
2583 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002584 if(IS_WDI_STATUS_FAILURE(status))
2585 {
2586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2587 "Failure in Join WDI API, free all the memory " );
2588 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2589 vos_mem_free(pWdaParams) ;
2590 joinReqParam->status = eSIR_FAILURE ;
2591 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002593 return CONVERT_WDI2VOS_STATUS(status) ;
2594}
Jeff Johnson295189b2012-06-20 16:38:30 -07002595/*
2596 * FUNCTION: WDA_SwitchChannelReqCallback
2597 * send Switch channel RSP back to PE
2598 */
2599void WDA_SwitchChannelReqCallback(
2600 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2601{
2602 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2603 tWDA_CbContext *pWDA;
2604 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002606 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 if(NULL == pWdaParams)
2608 {
2609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002610 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002611 VOS_ASSERT(0) ;
2612 return ;
2613 }
2614 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2615 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2616
2617#ifdef WLAN_FEATURE_VOWIFI
2618 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2619#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2621 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002622 pSwitchChanParams->status =
2623 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002625 return ;
2626}
Jeff Johnson295189b2012-06-20 16:38:30 -07002627/*
2628 * FUNCTION: WDA_ProcessChannelSwitchReq
2629 * Request to WDI to switch channel REQ params.
2630 */
2631VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2632 tSwitchChannelParams *pSwitchChanParams)
2633{
2634 WDI_Status status = WDI_STATUS_SUCCESS ;
2635 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2636 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2637 sizeof(WDI_SwitchChReqParamsType)) ;
2638 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002640 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002641 if(NULL == wdiSwitchChanParam)
2642 {
2643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002644 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 VOS_ASSERT(0);
2646 return VOS_STATUS_E_NOMEM;
2647 }
2648 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2649 if(NULL == pWdaParams)
2650 {
2651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002653 VOS_ASSERT(0);
2654 vos_mem_free(wdiSwitchChanParam);
2655 return VOS_STATUS_E_NOMEM;
2656 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2658#ifndef WLAN_FEATURE_VOWIFI
2659 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2660 pSwitchChanParams->localPowerConstraint;
2661#endif
2662 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2663 pSwitchChanParams->secondaryChannelOffset;
2664 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002665 /* Store req pointer, as this will be used for response */
2666 /* store Params pass it to WDI */
2667 pWdaParams->pWdaContext = pWDA;
2668 pWdaParams->wdaMsgParam = pSwitchChanParams;
2669 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002670#ifdef WLAN_FEATURE_VOWIFI
2671 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2672 = pSwitchChanParams->maxTxPower;
2673 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2674 pSwitchChanParams ->selfStaMacAddr,
2675 sizeof(tSirMacAddr));
2676#endif
2677 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2678 pSwitchChanParams->bssId,
2679 sizeof(tSirMacAddr));
2680
2681 status = WDI_SwitchChReq(wdiSwitchChanParam,
2682 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002683 if(IS_WDI_STATUS_FAILURE(status))
2684 {
2685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2686 "Failure in process channel switch Req WDI API, free all the memory " );
2687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2688 vos_mem_free(pWdaParams) ;
2689 pSwitchChanParams->status = eSIR_FAILURE ;
2690 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 return CONVERT_WDI2VOS_STATUS(status) ;
2693}
Jeff Johnson295189b2012-06-20 16:38:30 -07002694/*
2695 * FUNCTION: WDA_ConfigBssReqCallback
2696 * config BSS Req Callback, called by WDI
2697 */
2698void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2699 ,void* pUserData)
2700{
2701 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2702 tWDA_CbContext *pWDA;
2703 tAddBssParams *configBssReqParam;
2704 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 if(NULL == pWdaParams)
2708 {
2709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002710 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002711 VOS_ASSERT(0) ;
2712 return ;
2713 }
2714 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2715 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2716 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002717 configBssReqParam->status =
2718 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2720 {
2721 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2722 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2724 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2725 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2726
2727 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2728 {
2729 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2730 {
2731 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2732 staConfigBssParam->staType = STA_ENTRY_BSSID;
2733 }
2734 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2735 (staConfigBssParam->staType == STA_ENTRY_SELF))
2736 {
2737 /* This is the 1st add BSS Req for the BTAMP STA */
2738 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2739 staConfigBssParam->staType = STA_ENTRY_BSSID;
2740 }
2741 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2742 (staConfigBssParam->staType == STA_ENTRY_PEER))
2743 {
2744 /* This is the 2nd ADD BSS Request that is sent
2745 * on the BTAMP STA side. The Sta type is
2746 * set to STA_ENTRY_PEER here.*/
2747 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2748 }
2749 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2750 (staConfigBssParam->staType == STA_ENTRY_SELF))
2751 {
2752 /* statype is already set by PE.
2753 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2754 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2755 staConfigBssParam->staType = STA_ENTRY_BSSID;
2756 }
2757 else
2758 {
2759 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2760 staConfigBssParam->staType = STA_ENTRY_PEER;
2761 }
2762 }
2763 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2764 {
2765 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2766 staConfigBssParam->staType = STA_ENTRY_SELF;
2767 }
2768 else
2769 {
2770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2771 "Invalid operation mode specified");
2772 VOS_ASSERT(0);
2773 }
2774
2775 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002778 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2780 sizeof(tSirMacAddr));
2781 staConfigBssParam->txChannelWidthSet =
2782 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002783 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2784 staConfigBssParam->htCapable)
2785 {
2786 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2787 wdiConfigBssRsp->ucBSSIdx;
2788 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2789 WDA_VALID_STA_INDEX ;
2790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002791 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2792 wdiConfigBssRsp->ucBSSIdx,
2793 wdiConfigBssRsp->ucSTAIdx))
2794 {
2795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002796 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 VOS_ASSERT(0) ;
2798 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002799 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2800 {
2801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002802 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002803 VOS_ASSERT(0) ;
2804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002805#ifdef WLAN_FEATURE_VOWIFI
2806 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2807#endif
2808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002809 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2810 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002811 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 return ;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_UpdateEdcaParamsForAC
2816 * Update WDI EDCA params with PE edca params
2817 */
2818void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2819 WDI_EdcaParamRecord *wdiEdcaParam,
2820 tSirMacEdcaParamRecord *macEdcaParam)
2821{
2822 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2823 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2824 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2825 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2826 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2827 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2828}
Jeff Johnson295189b2012-06-20 16:38:30 -07002829/*
2830 * FUNCTION: WDA_ProcessConfigBssReq
2831 * Configure BSS before starting Assoc with AP
2832 */
2833VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2834 tAddBssParams* configBssReqParam)
2835{
2836 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002837 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2838 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2839 sizeof(WDI_ConfigBSSReqParamsType)) ;
2840 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002841 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002842 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002843 if(NULL == wdiConfigBssReqParam)
2844 {
2845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002846 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 VOS_ASSERT(0);
2848 return VOS_STATUS_E_NOMEM;
2849 }
2850 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2851 if(NULL == pWdaParams)
2852 {
2853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002854 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 VOS_ASSERT(0);
2856 vos_mem_free(wdiConfigBssReqParam);
2857 return VOS_STATUS_E_NOMEM;
2858 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2861 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002862 /* Store Init Req pointer, as this will be used for response */
2863 /* store Params pass it to WDI */
2864 pWdaParams->pWdaContext = pWDA;
2865 pWdaParams->wdaMsgParam = configBssReqParam;
2866 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002867 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2868 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 if(IS_WDI_STATUS_FAILURE(status))
2870 {
2871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2872 "Failure in Config BSS WDI API, free all the memory " );
2873 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2874 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002875 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002878 return CONVERT_WDI2VOS_STATUS(status) ;
2879}
Jeff Johnson295189b2012-06-20 16:38:30 -07002880#ifdef ENABLE_HAL_COMBINED_MESSAGES
2881/*
2882 * FUNCTION: WDA_PostAssocReqCallback
2883 * Post ASSOC req callback, send RSP back to PE
2884 */
2885void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2886 void* pUserData)
2887{
2888 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2889 tPostAssocParams *postAssocReqParam =
2890 (tPostAssocParams *)pWDA->wdaMsgParam ;
2891 /*STA context within the BSS Params*/
2892 tAddStaParams *staPostAssocParam =
2893 &postAssocReqParam->addBssParams.staContext ;
2894 /*STA Params for self STA*/
2895 tAddStaParams *selfStaPostAssocParam =
2896 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 postAssocReqParam->status =
2900 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002901 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2902 {
2903 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2904 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2905 sizeof(tSirMacAddr)) ;
2906 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2907 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2908 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2910 }
2911 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2912 pWDA->wdaWdiApiMsgParam = NULL;
2913 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002915 return ;
2916}
Jeff Johnson295189b2012-06-20 16:38:30 -07002917/*
2918 * FUNCTION: WDA_ProcessPostAssocReq
2919 * Trigger POST ASSOC processing in WDI
2920 */
2921VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2922 tPostAssocParams *postAssocReqParam)
2923{
Jeff Johnson295189b2012-06-20 16:38:30 -07002924 WDI_Status status = WDI_STATUS_SUCCESS ;
2925
2926 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2927 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2928 sizeof(WDI_PostAssocReqParamsType)) ;
2929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002930 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002931
Jeff Johnson295189b2012-06-20 16:38:30 -07002932 if(NULL == wdiPostAssocReqParam)
2933 {
2934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002935 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 VOS_ASSERT(0);
2937 return VOS_STATUS_E_NOMEM;
2938 }
2939
2940 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2941 {
2942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002943 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 VOS_ASSERT(0);
2945 return VOS_STATUS_E_FAILURE;
2946 }
2947
Jeff Johnson295189b2012-06-20 16:38:30 -07002948 /* update BSS params into WDI structure */
2949 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2950 &postAssocReqParam->addBssParams) ;
2951 /* update STA params into WDI structure */
2952 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2953 &postAssocReqParam->addStaParams) ;
2954
2955 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2956 postAssocReqParam->addBssParams.highPerformance;
2957 WDA_UpdateEdcaParamsForAC(pWDA,
2958 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2959 &postAssocReqParam->addBssParams.acbe);
2960 WDA_UpdateEdcaParamsForAC(pWDA,
2961 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2962 &postAssocReqParam->addBssParams.acbk);
2963 WDA_UpdateEdcaParamsForAC(pWDA,
2964 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2965 &postAssocReqParam->addBssParams.acvi);
2966 WDA_UpdateEdcaParamsForAC(pWDA,
2967 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2968 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002969 /* Store Init Req pointer, as this will be used for response */
2970 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002971 /* store Params pass it to WDI */
2972 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002973 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2974 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 if(IS_WDI_STATUS_FAILURE(status))
2976 {
2977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2978 "Failure in Post Assoc WDI API, free all the memory " );
2979 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2980 pWDA->wdaWdiApiMsgParam = NULL;
2981 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002982 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2984 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 return CONVERT_WDI2VOS_STATUS(status) ;
2986}
2987#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002988/*
2989 * FUNCTION: WDA_AddStaReqCallback
2990 * ADD STA req callback, send RSP back to PE
2991 */
2992void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2993 void* pUserData)
2994{
2995 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2996 tWDA_CbContext *pWDA;
2997 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002999 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 if(NULL == pWdaParams)
3001 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 VOS_ASSERT(0) ;
3004 return ;
3005 }
3006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3007 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003008 addStaReqParam->status =
3009 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3011 {
3012 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3013 /*TODO: UMAC structure doesn't have these fields*/
3014 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3015 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3016 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3017 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3018 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3019 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003020#ifdef FEATURE_WLAN_TDLS
3021 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3022 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3023#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003024 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003025#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003026 {
3027 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3028 wdiConfigStaRsp->ucBssIdx;
3029 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3030 WDA_VALID_STA_INDEX ;
3031 }
3032 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3033 {
3034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003035 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003036 VOS_ASSERT(0) ;
3037 return ;
3038 }
3039 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003040 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3041 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003043 return ;
3044}
Jeff Johnson295189b2012-06-20 16:38:30 -07003045/*
3046 * FUNCTION: WDA_ConfigStaReq
3047 * Trigger Config STA processing in WDI
3048 */
3049VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3050 tAddStaParams *addStaReqParam)
3051{
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003053 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3054 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3055 sizeof(WDI_ConfigSTAReqParamsType)) ;
3056 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003058 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003059 if(NULL == wdiConfigStaReqParam)
3060 {
3061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003062 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 VOS_ASSERT(0);
3064 return VOS_STATUS_E_NOMEM;
3065 }
3066 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3067 if(NULL == pWdaParams)
3068 {
3069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003070 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 VOS_ASSERT(0);
3072 vos_mem_free(wdiConfigStaReqParam);
3073 return VOS_STATUS_E_NOMEM;
3074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 /* update STA params into WDI structure */
3077 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3078 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003079 /* Store Init Req pointer, as this will be used for response */
3080 /* store Params pass it to WDI */
3081 pWdaParams->pWdaContext = pWDA;
3082 pWdaParams->wdaMsgParam = addStaReqParam;
3083 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003084 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3085 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003086 if(IS_WDI_STATUS_FAILURE(status))
3087 {
3088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3089 "Failure in Config STA WDI API, free all the memory " );
3090 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3091 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003092 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 return CONVERT_WDI2VOS_STATUS(status) ;
3096}
Jeff Johnson295189b2012-06-20 16:38:30 -07003097/*
3098 * FUNCTION: WDA_DelBSSReqCallback
3099 * Dens DEL BSS RSP back to PE
3100 */
3101void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3102 void* pUserData)
3103{
3104 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3105 tWDA_CbContext *pWDA;
3106 tDeleteBssParams *delBssReqParam;
3107 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003108 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003109 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 if(NULL == pWdaParams)
3111 {
3112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 VOS_ASSERT(0) ;
3115 return ;
3116 }
3117 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3118 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3121 {
3122 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3123 sizeof(tSirMacAddr)) ;
3124 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003125 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3126 {
3127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003128 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003129 VOS_ASSERT(0) ;
3130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3132 {
3133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003134 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 VOS_ASSERT(0) ;
3136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003137 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3138 {
3139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003140 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003141 VOS_ASSERT(0) ;
3142 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3144 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003145 /* reset the the system role*/
3146 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3147
3148 /* Reset the BA related information */
3149 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3150 {
3151 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3152 {
3153 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3154 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3155 /* Reset framesTxed counters here */
3156 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3157 {
3158 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3159 }
3160 }
3161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 return ;
3164}
3165
Jeff Johnson295189b2012-06-20 16:38:30 -07003166/*
3167 * FUNCTION: WDA_ProcessDelBssReq
3168 * Init DEL BSS req with WDI
3169 */
3170VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3171 tDeleteBssParams *delBssParam)
3172{
3173 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003174 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3175 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3176 sizeof(WDI_DelBSSReqParamsType)) ;
3177 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003179 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 if(NULL == wdiDelBssReqParam)
3181 {
3182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003183 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003184 VOS_ASSERT(0);
3185 return VOS_STATUS_E_NOMEM;
3186 }
3187 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3188 if(NULL == pWdaParams)
3189 {
3190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003191 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003192 VOS_ASSERT(0);
3193 vos_mem_free(wdiDelBssReqParam);
3194 return VOS_STATUS_E_NOMEM;
3195 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003196 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3197 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3198
3199 /* Store Init Req pointer, as this will be used for response */
3200 /* store Params pass it to WDI */
3201 pWdaParams->pWdaContext = pWDA;
3202 pWdaParams->wdaMsgParam = delBssParam;
3203 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003204 status = WDI_DelBSSReq(wdiDelBssReqParam,
3205 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003206 if(IS_WDI_STATUS_FAILURE(status))
3207 {
3208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3209 "Failure in Del BSS WDI API, free all the memory " );
3210 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3211 vos_mem_free(pWdaParams) ;
3212 delBssParam->status = eSIR_FAILURE ;
3213 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3214 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003215 return CONVERT_WDI2VOS_STATUS(status) ;
3216}
Jeff Johnson295189b2012-06-20 16:38:30 -07003217/*
3218 * FUNCTION: WDA_DelSTAReqCallback
3219 * Dens DEL STA RSP back to PE
3220 */
3221void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3222 void* pUserData)
3223{
3224 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3225 tWDA_CbContext *pWDA;
3226 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003228 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003229 if(NULL == pWdaParams)
3230 {
3231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003232 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003233 VOS_ASSERT(0) ;
3234 return ;
3235 }
3236 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3237 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003239 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3240 {
3241 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3242 {
3243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003244 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003245 VOS_ASSERT(0) ;
3246 }
3247 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3248 }
3249 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3250 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003251 /*Reset the BA information corresponding to this STAIdx */
3252 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3253 WDA_INVALID_STA_INDEX;
3254 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3255
3256 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003257 return ;
3258}
Jeff Johnson295189b2012-06-20 16:38:30 -07003259/*
3260 * FUNCTION: WDA_ProcessDelStaReq
3261 * Init DEL STA req with WDI
3262 */
3263VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3264 tDeleteStaParams *delStaParam)
3265{
3266 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003267 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3268 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3269 sizeof(WDI_DelSTAReqParamsType)) ;
3270 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003272 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 if(NULL == wdiDelStaReqParam)
3274 {
3275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003276 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 VOS_ASSERT(0);
3278 return VOS_STATUS_E_NOMEM;
3279 }
3280 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3281 if(NULL == pWdaParams)
3282 {
3283 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003284 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 VOS_ASSERT(0);
3286 vos_mem_free(wdiDelStaReqParam);
3287 return VOS_STATUS_E_NOMEM;
3288 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003289 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3290 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003291 /* Store Init Req pointer, as this will be used for response */
3292 /* store Params pass it to WDI */
3293 pWdaParams->pWdaContext = pWDA;
3294 pWdaParams->wdaMsgParam = delStaParam;
3295 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003296 status = WDI_DelSTAReq(wdiDelStaReqParam,
3297 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003298 if(IS_WDI_STATUS_FAILURE(status))
3299 {
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3301 "Failure in Del STA WDI API, free all the memory status = %d",
3302 status );
3303 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3304 vos_mem_free(pWdaParams) ;
3305 delStaParam->status = eSIR_FAILURE ;
3306 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003308 return CONVERT_WDI2VOS_STATUS(status) ;
3309}
Jeff Johnson295189b2012-06-20 16:38:30 -07003310void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3311{
3312 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3313 tWDA_CbContext *pWDA;
3314 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003316 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 if(NULL == pWdaParams)
3318 {
3319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003320 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003321 VOS_ASSERT(0) ;
3322 return ;
3323 }
3324 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3325 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3327 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3329 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3330 pwdiAddSTASelfRsp->macSelfSta,
3331 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003333 return ;
3334}
Jeff Johnson295189b2012-06-20 16:38:30 -07003335/*
3336 * FUNCTION: WDA_ProcessAddStaSelfReq
3337 *
3338 */
3339VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3340{
3341 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003342 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003343 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3344 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3345 sizeof(WDI_AddSTASelfReqParamsType)) ;
3346 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003349 if( NULL == wdiAddStaSelfReq )
3350 {
3351 VOS_ASSERT( 0 );
3352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003353 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 return( VOS_STATUS_E_NOMEM );
3355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003357 if( NULL == pWdaParams )
3358 {
3359 VOS_ASSERT( 0 );
3360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003361 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003362 vos_mem_free(wdiAddStaSelfReq) ;
3363 return( VOS_STATUS_E_NOMEM );
3364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003366 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3367 /* Store Init Req pointer, as this will be used for response */
3368 /* store Params pass it to WDI */
3369 pWdaParams->pWdaContext = pWDA;
3370 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3371 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003372 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003373
Jeff Johnson43971f52012-07-17 12:26:56 -07003374 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003375 {
3376 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3377 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003378 wstatus );
3379 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3381 vos_mem_free(pWdaParams) ;
3382 pAddStaSelfReq->status = eSIR_FAILURE ;
3383 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3384 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003385 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386}
Jeff Johnson295189b2012-06-20 16:38:30 -07003387/*
3388 * FUNCTION: WDA_DelSTASelfRespCallback
3389 *
3390 */
3391void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3392 wdiDelStaSelfRspParams , void* pUserData)
3393{
3394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3395 tWDA_CbContext *pWDA;
3396 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003399 if (NULL == pWdaParams)
3400 {
3401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003402 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003403 VOS_ASSERT(0);
3404 return;
3405 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3407 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 delStaSelfParams->status =
3409 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3410
3411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3412 vos_mem_free(pWdaParams) ;
3413
3414 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003415 return ;
3416}
Jeff Johnson295189b2012-06-20 16:38:30 -07003417/*
3418 * FUNCTION: WDA_DelSTASelfReqCallback
3419 *
3420 */
3421void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3422 void* pUserData)
3423{
3424 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3425 tWDA_CbContext *pWDA;
3426 tDelStaSelfParams *delStaSelfParams;
3427
3428 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3429 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431
3432 if (NULL == pWdaParams)
3433 {
3434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003435 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003436 VOS_ASSERT(0);
3437 return;
3438 }
3439
3440 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3441 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3442
3443 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3444
3445 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3446 {
3447 VOS_ASSERT(0);
3448 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3449 vos_mem_free(pWdaParams) ;
3450 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3451 }
3452
3453 return ;
3454}
3455
3456/*
3457 * FUNCTION: WDA_DelSTASelfReq
3458 * Trigger Config STA processing in WDI
3459 */
3460VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3461 tDelStaSelfParams* pDelStaSelfReqParam)
3462{
3463 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003464 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 tWDA_ReqParams *pWdaParams = NULL;
3466 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3467 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3468 sizeof(WDI_DelSTASelfReqParamsType)) ;
3469
Jeff Johnson295189b2012-06-20 16:38:30 -07003470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 if( NULL == wdiDelStaSelfReq )
3473 {
3474 VOS_ASSERT( 0 );
3475 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003476 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003477 return( VOS_STATUS_E_NOMEM );
3478 }
3479
3480 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3481 if( NULL == pWdaParams )
3482 {
3483 VOS_ASSERT( 0 );
3484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 vos_mem_free(wdiDelStaSelfReq) ;
3487 return( VOS_STATUS_E_NOMEM );
3488 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 pWdaParams->pWdaContext = pWDA;
3490 /* Store param pointer as passed in by caller */
3491 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3492 /* store Params pass it to WDI */
3493 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3495 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3496
3497 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3498 wdiDelStaSelfReq->pUserData = pWdaParams;
3499
Jeff Johnson43971f52012-07-17 12:26:56 -07003500 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003501 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3502
Jeff Johnson43971f52012-07-17 12:26:56 -07003503 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003504 {
3505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3506 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3507 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003508 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3510 vos_mem_free(pWdaParams) ;
3511 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3512 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3513 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003514 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515}
3516
Jeff Johnson295189b2012-06-20 16:38:30 -07003517/*
3518 * FUNCTION: WDA_SendMsg
3519 * Send Message back to PE
3520 */
3521void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3522 void *pBodyptr, tANI_U32 bodyVal)
3523{
3524 tSirMsgQ msg = {0} ;
3525 tANI_U32 status = VOS_STATUS_SUCCESS ;
3526 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003527 msg.type = msgType;
3528 msg.bodyval = bodyVal;
3529 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003530 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 if (VOS_STATUS_SUCCESS != status)
3532 {
3533 if(NULL != pBodyptr)
3534 {
3535 vos_mem_free(pBodyptr);
3536 }
3537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003538 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003539 VOS_ASSERT(0) ;
3540 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 return ;
3542}
Jeff Johnson295189b2012-06-20 16:38:30 -07003543/*
3544 * FUNCTION: WDA_UpdateBSSParams
3545 * Translated WDA/PE BSS info into WDI BSS info..
3546 */
3547void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3548 WDI_ConfigBSSReqInfoType *wdiBssParams,
3549 tAddBssParams *wdaBssParams)
3550{
3551 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003552 /* copy bssReq Params to WDI structure */
3553 vos_mem_copy(wdiBssParams->macBSSID,
3554 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3555 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3556 sizeof(tSirMacAddr)) ;
3557 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3558 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3559 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003560 wdiBssParams->ucShortSlotTimeSupported =
3561 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003562 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3563 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3564 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3565 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3566 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3567
3568 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3569 wdiBssParams->ucTXOPProtectionFullSupport =
3570 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003571 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3572 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3575 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3576 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3577 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3578
3579 /* copy SSID into WDI structure */
3580 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3581 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3582 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003583 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3584 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003585 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003586#ifdef WLAN_FEATURE_VOWIFI
3587 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3588#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003591#ifdef WLAN_FEATURE_VOWIFI_11R
3592 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 if(wdiBssParams->bExtSetStaKeyParamValid)
3594 {
3595 /* copy set STA key params to WDI structure */
3596 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3597 wdaBssParams->extSetStaKeyParam.staIdx;
3598 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3599 wdaBssParams->extSetStaKeyParam.encType;
3600 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3601 wdaBssParams->extSetStaKeyParam.wepType;
3602 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3603 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3605 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003606 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003607 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3608 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3609 {
3610 WDA_GetWepKeysFromCfg( pWDA,
3611 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3612 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3613 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3614 }
3615 else
3616 {
3617#ifdef WLAN_SOFTAP_FEATURE
3618 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3619 keyIndex++)
3620 {
3621 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3622 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3623 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3624 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3625 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3626 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3628 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3629 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3630 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3631 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3632 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3633 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3634 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3635 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003636 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3637 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3638#else
3639 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3640 wdaBssParams->extSetStaKeyParam.key.keyId;
3641 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3642 wdaBssParams->extSetStaKeyParam.key.unicast;
3643 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3644 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3645 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3646 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3647 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3648 wdaBssParams->extSetStaKeyParam.key.paeRole;
3649 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3650 wdaBssParams->extSetStaKeyParam.key.keyLength;
3651 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3652 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3653 SIR_MAC_MAX_KEY_LENGTH);
3654 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3655#endif
3656 }
3657 }
3658 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3659 }
3660 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3661 {
3662 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3663 sizeof(wdaBssParams->extSetStaKeyParam) );
3664 }
3665#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003666#ifdef WLAN_FEATURE_11AC
3667 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3668 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3669#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003670
3671 return ;
3672}
Jeff Johnson295189b2012-06-20 16:38:30 -07003673/*
3674 * FUNCTION: WDA_UpdateSTAParams
3675 * Translated WDA/PE BSS info into WDI BSS info..
3676 */
3677void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3678 WDI_ConfigStaReqInfoType *wdiStaParams,
3679 tAddStaParams *wdaStaParams)
3680{
3681 tANI_U8 i = 0;
3682 /* Update STA params */
3683 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3684 sizeof(tSirMacAddr)) ;
3685 wdiStaParams->usAssocId = wdaStaParams->assocId;
3686 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3687
3688 wdiStaParams->ucShortPreambleSupported =
3689 wdaStaParams->shortPreambleSupported;
3690 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3691 sizeof(tSirMacAddr)) ;
3692 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3693
3694 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3695
3696 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3697 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3698 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3699 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3700 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3701 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3702 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3703
3704 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3705 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 wdiStaParams->wdiSupportedRates.opRateMode =
3707 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003708 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3709 {
3710 wdiStaParams->wdiSupportedRates.llbRates[i] =
3711 wdaStaParams->supportedRates.llbRates[i];
3712 }
3713 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3714 {
3715 wdiStaParams->wdiSupportedRates.llaRates[i] =
3716 wdaStaParams->supportedRates.llaRates[i];
3717 }
3718 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3719 {
3720 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3721 wdaStaParams->supportedRates.aniLegacyRates[i];
3722 }
3723 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3724 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003725#ifdef WLAN_FEATURE_11AC
3726 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3727 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3728 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3729 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3730#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003731 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3732 {
3733 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3734 wdaStaParams->supportedRates.supportedMCSSet[i];
3735 }
3736 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3737 wdaStaParams->supportedRates.rxHighestDataRate;
3738
3739 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3740
3741 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3742
3743 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3744 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3745 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3746
3747 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3748 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3749 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3750 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3751#ifdef WLAN_FEATURE_P2P
3752 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3753#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003754#ifdef WLAN_FEATURE_11AC
3755 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3756 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3757#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003758 return ;
3759}
Jeff Johnson295189b2012-06-20 16:38:30 -07003760/*
3761 * -------------------------------------------------------------------------
3762 * CFG update to WDI
3763 * -------------------------------------------------------------------------
3764 */
3765
3766 /*
3767 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3768 * Convert the WNI CFG ID to HAL CFG ID
3769 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003770static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003771{
3772 switch(wniCfgId)
3773 {
3774 case WNI_CFG_STA_ID:
3775 return QWLAN_HAL_CFG_STA_ID;
3776 case WNI_CFG_CURRENT_TX_ANTENNA:
3777 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3778 case WNI_CFG_CURRENT_RX_ANTENNA:
3779 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3780 case WNI_CFG_LOW_GAIN_OVERRIDE:
3781 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3782 case WNI_CFG_POWER_STATE_PER_CHAIN:
3783 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3784 case WNI_CFG_CAL_PERIOD:
3785 return QWLAN_HAL_CFG_CAL_PERIOD;
3786 case WNI_CFG_CAL_CONTROL:
3787 return QWLAN_HAL_CFG_CAL_CONTROL;
3788 case WNI_CFG_PROXIMITY:
3789 return QWLAN_HAL_CFG_PROXIMITY;
3790 case WNI_CFG_NETWORK_DENSITY:
3791 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3792 case WNI_CFG_MAX_MEDIUM_TIME:
3793 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3794 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3795 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3796 case WNI_CFG_RTS_THRESHOLD:
3797 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3798 case WNI_CFG_SHORT_RETRY_LIMIT:
3799 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3800 case WNI_CFG_LONG_RETRY_LIMIT:
3801 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3802 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3803 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3804 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3805 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3806 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3807 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3808 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3809 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3810 case WNI_CFG_FIXED_RATE:
3811 return QWLAN_HAL_CFG_FIXED_RATE;
3812 case WNI_CFG_RETRYRATE_POLICY:
3813 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3814 case WNI_CFG_RETRYRATE_SECONDARY:
3815 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3816 case WNI_CFG_RETRYRATE_TERTIARY:
3817 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3818 case WNI_CFG_FORCE_POLICY_PROTECTION:
3819 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3820 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3821 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3822 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3823 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3824 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3825 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3826 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3827 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3828 case WNI_CFG_MAX_BA_SESSIONS:
3829 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3830 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3831 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3832 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3833 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3834 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3835 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3836 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3837 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3838 case WNI_CFG_STATS_PERIOD:
3839 return QWLAN_HAL_CFG_STATS_PERIOD;
3840 case WNI_CFG_CFP_MAX_DURATION:
3841 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3842#if 0 /*This is not part of CFG*/
3843 case WNI_CFG_FRAME_TRANS_ENABLED:
3844 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3845#endif
3846 case WNI_CFG_DTIM_PERIOD:
3847 return QWLAN_HAL_CFG_DTIM_PERIOD;
3848 case WNI_CFG_EDCA_WME_ACBK:
3849 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3850 case WNI_CFG_EDCA_WME_ACBE:
3851 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3852 case WNI_CFG_EDCA_WME_ACVI:
3853 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3854 case WNI_CFG_EDCA_WME_ACVO:
3855 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3856#if 0
3857 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3858 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3859 case WNI_CFG_TELE_BCN_TRANS_LI:
3860 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3861 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3862 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3863 case WNI_CFG_TELE_BCN_MAX_LI:
3864 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3865 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3866 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3867#endif
3868 case WNI_CFG_ENABLE_CLOSE_LOOP:
3869 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08003870 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
3871 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07003872 default:
3873 {
3874 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3875 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3876 wniCfgId);
3877 return VOS_STATUS_E_INVAL;
3878 }
3879 }
3880}
Jeff Johnson295189b2012-06-20 16:38:30 -07003881/*
3882 * FUNCTION: WDA_UpdateCfgCallback
3883 *
3884 */
3885void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3886{
3887 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3888 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3889 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 /*
3893 * currently there is no response message is expected between PE and
3894 * WDA, Failure return from WDI is a ASSERT condition
3895 */
3896 if(WDI_STATUS_SUCCESS != wdiStatus)
3897 {
3898 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003899 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003900 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3901 }
3902
3903 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3904 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3905 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 return ;
3907}
Jeff Johnson295189b2012-06-20 16:38:30 -07003908/*
3909 * FUNCTION: WDA_UpdateCfg
3910 *
3911 */
3912VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3913{
3914
3915 WDI_Status status = WDI_STATUS_SUCCESS ;
3916 tANI_U32 val =0;
3917 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3918 tHalCfg *configData;
3919 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3920 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003922 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003923 if (NULL == pMac )
3924 {
3925 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003926 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 return VOS_STATUS_E_FAILURE;
3928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003929 if(WDA_START_STATE != pWDA->wdaState)
3930 {
3931 return VOS_STATUS_E_FAILURE;
3932 }
3933
3934 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3935 {
3936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003937 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003938 VOS_ASSERT(0);
3939 return VOS_STATUS_E_FAILURE;
3940 }
3941
3942 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3943 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003944 if(NULL == wdiCfgReqParam)
3945 {
3946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003948 VOS_ASSERT(0);
3949 return VOS_STATUS_E_NOMEM;
3950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3952 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003953 if(NULL == wdiCfgReqParam->pConfigBuffer)
3954 {
3955 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003956 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003957 vos_mem_free(wdiCfgReqParam);
3958 VOS_ASSERT(0);
3959 return VOS_STATUS_E_NOMEM;
3960 }
3961
3962 /*convert the WNI CFG Id to HAL CFG Id*/
3963 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3964 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3965
3966 /*TODO: revisit this for handling string parameters */
3967 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3968 &val) != eSIR_SUCCESS)
3969 {
3970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3971 "Failed to cfg get id %d\n", cfgParam->bodyval);
3972 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3973 vos_mem_free(wdiCfgReqParam);
3974 return eSIR_FAILURE;
3975 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3977 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3978 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3979 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3980 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3981
3982 /* store Params pass it to WDI */
3983 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003984#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3985 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3986 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 if(IS_WDI_STATUS_FAILURE(status))
3988 {
3989 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3990 "Failure in Update CFG WDI API, free all the memory " );
3991 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3992 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3993 pWDA->wdaWdiCfgApiMsgParam = NULL;
3994 /* Failure is not expected */
3995 VOS_ASSERT(0) ;
3996 }
3997#else
3998 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3999 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4000 pWDA->wdaWdiCfgApiMsgParam = NULL;
4001#endif
4002 return CONVERT_WDI2VOS_STATUS(status) ;
4003}
4004
Jeff Johnson295189b2012-06-20 16:38:30 -07004005VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4006 v_U8_t *pDefaultKeyId,
4007 v_U8_t *pNumKeys,
4008 WDI_KeysType *pWdiKeys )
4009{
4010 v_U32_t i, j, defKeyId = 0;
4011 v_U32_t val = SIR_MAC_KEY_LENGTH;
4012 VOS_STATUS status = WDI_STATUS_SUCCESS;
4013 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004014 if (NULL == pMac )
4015 {
4016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004017 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 return VOS_STATUS_E_FAILURE;
4019 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004020 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4021 &defKeyId ))
4022 {
4023 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4024 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4025 }
4026
4027 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 /* Need to extract ALL of the configured WEP Keys */
4029 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4030 {
4031 val = SIR_MAC_KEY_LENGTH;
4032 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4033 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4034 pWdiKeys[j].key,
4035 &val ))
4036 {
4037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4038 "WEP Key index [%d] may not configured in CFG\n",i);
4039 }
4040 else
4041 {
4042 pWdiKeys[j].keyId = (tANI_U8) i;
4043 /*
4044 * Actually, a DC (Don't Care) because
4045 * this is determined (and set) by PE/MLME
4046 */
4047 pWdiKeys[j].unicast = 0;
4048 /*
4049 * Another DC (Don't Care)
4050 */
4051 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4052 /* Another DC (Don't Care). Unused for WEP */
4053 pWdiKeys[j].paeRole = 0;
4054 /* Determined from wlan_cfgGetStr() above.*/
4055 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 j++;
4057 *pNumKeys = (tANI_U8) j;
4058 }
4059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 return status;
4061}
Jeff Johnson295189b2012-06-20 16:38:30 -07004062/*
4063 * FUNCTION: WDA_SetBssKeyReqCallback
4064 * send SET BSS key RSP back to PE
4065 */
4066void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4067{
4068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4069 tWDA_CbContext *pWDA;
4070 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004072 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004073 if(NULL == pWdaParams)
4074 {
4075 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004076 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004077 VOS_ASSERT(0) ;
4078 return ;
4079 }
4080 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4081 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4083 vos_mem_free(pWdaParams) ;
4084 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004086 return ;
4087}
Jeff Johnson295189b2012-06-20 16:38:30 -07004088/*
4089 * FUNCTION: WDA_ProcessSetBssKeyReq
4090 * Request to WDI for programming the BSS key( key for
4091 * broadcast/multicast frames Encryption)
4092 */
4093VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4094 tSetBssKeyParams *setBssKeyParams )
4095{
4096 WDI_Status status = WDI_STATUS_SUCCESS ;
4097 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4098 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4099 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4100 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004101 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004103 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 if(NULL == wdiSetBssKeyParam)
4105 {
4106 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004107 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 VOS_ASSERT(0);
4109 return VOS_STATUS_E_NOMEM;
4110 }
4111 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4112 if(NULL == pWdaParams)
4113 {
4114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004115 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004116 VOS_ASSERT(0);
4117 vos_mem_free(wdiSetBssKeyParam);
4118 return VOS_STATUS_E_NOMEM;
4119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004120 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 /* copy set BSS params to WDI structure */
4122 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4123 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4124 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004125 if(setBssKeyParams->encType != eSIR_ED_NONE)
4126 {
4127 if( setBssKeyParams->numKeys == 0 &&
4128 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4129 setBssKeyParams->encType == eSIR_ED_WEP104))
4130 {
4131 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004132 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4133 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4134 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4135 }
4136 else
4137 {
4138 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4139 {
4140 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4141 setBssKeyParams->key[keyIndex].keyId;
4142 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4143 setBssKeyParams->key[keyIndex].unicast;
4144 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4145 setBssKeyParams->key[keyIndex].keyDirection;
4146 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4147 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4148 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4149 setBssKeyParams->key[keyIndex].paeRole;
4150 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4151 setBssKeyParams->key[keyIndex].keyLength;
4152 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4153 setBssKeyParams->key[keyIndex].key,
4154 SIR_MAC_MAX_KEY_LENGTH);
4155 }
4156 }
4157 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004158 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4159 setBssKeyParams->singleTidRc;
4160 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 /* Store set key pointer, as this will be used for response */
4162 /* store Params pass it to WDI */
4163 pWdaParams->pWdaContext = pWDA;
4164 pWdaParams->wdaMsgParam = setBssKeyParams;
4165 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004166 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4167 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4168
4169 if(IS_WDI_STATUS_FAILURE(status))
4170 {
4171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4172 "Failure in Set BSS Key Req WDI API, free all the memory " );
4173 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4174 vos_mem_free(pWdaParams) ;
4175 setBssKeyParams->status = eSIR_FAILURE ;
4176 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4177 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 return CONVERT_WDI2VOS_STATUS(status) ;
4179}
Jeff Johnson295189b2012-06-20 16:38:30 -07004180/*
4181 * FUNCTION: WDA_RemoveBssKeyReqCallback
4182 * send SET BSS key RSP back to PE
4183 */
4184void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4185{
4186 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4187 tWDA_CbContext *pWDA;
4188 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004190 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 if(NULL == pWdaParams)
4192 {
4193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004194 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004195 VOS_ASSERT(0) ;
4196 return ;
4197 }
4198 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4199 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004200 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4201 vos_mem_free(pWdaParams) ;
4202
4203 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004204 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 return ;
4206}
Jeff Johnson295189b2012-06-20 16:38:30 -07004207/*
4208 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4209 * Request to WDI to remove the BSS key( key for broadcast/multicast
4210 * frames Encryption)
4211 */
4212VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4213 tRemoveBssKeyParams *removeBssKeyParams )
4214{
4215 WDI_Status status = WDI_STATUS_SUCCESS ;
4216 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4217 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4218 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4219 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004221 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004222 if(NULL == wdiRemoveBssKeyParam)
4223 {
4224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004225 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 VOS_ASSERT(0);
4227 return VOS_STATUS_E_NOMEM;
4228 }
4229 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4230 if(NULL == pWdaParams)
4231 {
4232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004233 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 VOS_ASSERT(0);
4235 vos_mem_free(wdiRemoveBssKeyParam);
4236 return VOS_STATUS_E_NOMEM;
4237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004238 /* copy Remove BSS key params to WDI structure*/
4239 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4240 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4241 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4242 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4243 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004244 /* Store remove key pointer, as this will be used for response */
4245 /* store Params pass it to WDI */
4246 pWdaParams->pWdaContext = pWDA;
4247 pWdaParams->wdaMsgParam = removeBssKeyParams;
4248 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004249 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4250 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004251 if(IS_WDI_STATUS_FAILURE(status))
4252 {
4253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4254 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4255 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4256 vos_mem_free(pWdaParams) ;
4257 removeBssKeyParams->status = eSIR_FAILURE ;
4258 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 return CONVERT_WDI2VOS_STATUS(status) ;
4261}
Jeff Johnson295189b2012-06-20 16:38:30 -07004262/*
4263 * FUNCTION: WDA_SetBssKeyReqCallback
4264 * send SET BSS key RSP back to PE
4265 */
4266void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4267{
4268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4269 tWDA_CbContext *pWDA;
4270 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004272 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004273 if(NULL == pWdaParams)
4274 {
4275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004276 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004277 VOS_ASSERT(0) ;
4278 return ;
4279 }
4280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4281 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4283 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004286 return ;
4287}
Jeff Johnson295189b2012-06-20 16:38:30 -07004288/*
4289 * FUNCTION: WDA_ProcessSetStaKeyReq
4290 * Request to WDI for programming the STA key( key for Unicast frames
4291 * Encryption)
4292 */
4293VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4294 tSetStaKeyParams *setStaKeyParams )
4295{
4296 WDI_Status status = WDI_STATUS_SUCCESS ;
4297 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4298 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4299 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4300 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004301 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004303 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 if(NULL == wdiSetStaKeyParam)
4305 {
4306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004307 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 VOS_ASSERT(0);
4309 return VOS_STATUS_E_NOMEM;
4310 }
4311 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4312 if(NULL == pWdaParams)
4313 {
4314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004315 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 VOS_ASSERT(0);
4317 vos_mem_free(wdiSetStaKeyParam);
4318 return VOS_STATUS_E_NOMEM;
4319 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004320 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004321 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004322 /* copy set STA key params to WDI structure */
4323 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4324 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4325 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4326 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 if(setStaKeyParams->encType != eSIR_ED_NONE)
4328 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004329 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004330 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4331 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4332 {
4333 WDA_GetWepKeysFromCfg( pWDA,
4334 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4335 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4336 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4337 }
4338 else
4339 {
4340#ifdef WLAN_SOFTAP_FEATURE
4341 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4342 keyIndex++)
4343 {
4344 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4345 setStaKeyParams->key[keyIndex].keyId;
4346 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4347 setStaKeyParams->key[keyIndex].unicast;
4348 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4349 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004350 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4351 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4352 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4353 setStaKeyParams->key[keyIndex].paeRole;
4354 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4355 setStaKeyParams->key[keyIndex].keyLength;
4356 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4357 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4358 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4359 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4360 {
4361 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4362 }
4363 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004364 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4365 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4366#else
4367 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4368 setStaKeyParams->key.keyId;
4369 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4370 setStaKeyParams->key.unicast;
4371 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4372 setStaKeyParams->key.keyDirection;
4373 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4374 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4375 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4376 setStaKeyParams->key.paeRole;
4377 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4378 setStaKeyParams->key.keyLength;
4379 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4380 setStaKeyParams->key[keyIndex].key,
4381 SIR_MAC_MAX_KEY_LENGTH);
4382 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4383#endif
4384 }
4385 }
4386 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4387 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004388 /* Store set key pointer, as this will be used for response */
4389 /* store Params pass it to WDI */
4390 pWdaParams->pWdaContext = pWDA;
4391 pWdaParams->wdaMsgParam = setStaKeyParams;
4392 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004393 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4394 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004395 if(IS_WDI_STATUS_FAILURE(status))
4396 {
4397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4398 "Failure in set STA Key Req WDI API, free all the memory " );
4399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4400 vos_mem_free(pWdaParams) ;
4401 setStaKeyParams->status = eSIR_FAILURE ;
4402 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 return CONVERT_WDI2VOS_STATUS(status) ;
4405}
Jeff Johnson295189b2012-06-20 16:38:30 -07004406/*
4407 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4408 * send SET Bcast STA key RSP back to PE
4409 */
4410void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4411{
4412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4413 tWDA_CbContext *pWDA;
4414 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004417 if(NULL == pWdaParams)
4418 {
4419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004421 VOS_ASSERT(0) ;
4422 return ;
4423 }
4424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4425 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004426 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4427 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004428 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 return ;
4431}
4432
Jeff Johnson295189b2012-06-20 16:38:30 -07004433/*
4434 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4435 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4436 * Encryption)
4437 */
4438VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4439 tSetStaKeyParams *setStaKeyParams )
4440{
4441 WDI_Status status = WDI_STATUS_SUCCESS ;
4442 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4443 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4444 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 if(NULL == wdiSetStaKeyParam)
4450 {
4451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004452 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004453 VOS_ASSERT(0);
4454 return VOS_STATUS_E_NOMEM;
4455 }
4456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4457 if(NULL == pWdaParams)
4458 {
4459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004461 VOS_ASSERT(0);
4462 vos_mem_free(wdiSetStaKeyParam);
4463 return VOS_STATUS_E_NOMEM;
4464 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004465 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 /* copy set STA key params to WDI structure */
4468 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4469 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4470 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4471 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004472 if(setStaKeyParams->encType != eSIR_ED_NONE)
4473 {
4474#ifdef WLAN_SOFTAP_FEATURE
4475 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4476 keyIndex++)
4477 {
4478 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4479 setStaKeyParams->key[keyIndex].keyId;
4480 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4481 setStaKeyParams->key[keyIndex].unicast;
4482 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4483 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004484 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4485 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4486 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4487 setStaKeyParams->key[keyIndex].paeRole;
4488 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4489 setStaKeyParams->key[keyIndex].keyLength;
4490 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4491 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4494 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4495#else
4496 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4497 setStaKeyParams->key.keyId;
4498 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4499 setStaKeyParams->key.unicast;
4500 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4501 setStaKeyParams->key.keyDirection;
4502 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4503 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4504 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4505 setStaKeyParams->key.paeRole;
4506 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4507 setStaKeyParams->key.keyLength;
4508 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4509 setStaKeyParams->key[keyIndex].key,
4510 SIR_MAC_MAX_KEY_LENGTH);
4511 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4512#endif
4513 }
4514 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004515 /* Store set key pointer, as this will be used for response */
4516 /* store Params pass it to WDI */
4517 pWdaParams->pWdaContext = pWDA;
4518 pWdaParams->wdaMsgParam = setStaKeyParams;
4519 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004520 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4521 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 if(IS_WDI_STATUS_FAILURE(status))
4523 {
4524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4525 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4527 vos_mem_free(pWdaParams) ;
4528 setStaKeyParams->status = eSIR_FAILURE ;
4529 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4530 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 return CONVERT_WDI2VOS_STATUS(status) ;
4532}
Jeff Johnson295189b2012-06-20 16:38:30 -07004533/*
4534 * FUNCTION: WDA_RemoveStaKeyReqCallback
4535 * send SET BSS key RSP back to PE
4536 */
4537void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4538{
4539 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4540 tWDA_CbContext *pWDA;
4541 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004543 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004544 if(NULL == pWdaParams)
4545 {
4546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004547 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 VOS_ASSERT(0) ;
4549 return ;
4550 }
4551 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4552 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4554 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 return ;
4558}
4559
Jeff Johnson295189b2012-06-20 16:38:30 -07004560/*
4561 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4562 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4563 */
4564VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4565 tRemoveStaKeyParams *removeStaKeyParams )
4566{
4567 WDI_Status status = WDI_STATUS_SUCCESS ;
4568 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4569 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4570 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4571 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004573 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 if(NULL == wdiRemoveStaKeyParam)
4575 {
4576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004577 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004578 VOS_ASSERT(0);
4579 return VOS_STATUS_E_NOMEM;
4580 }
4581 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4582 if(NULL == pWdaParams)
4583 {
4584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004585 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 VOS_ASSERT(0);
4587 vos_mem_free(wdiRemoveStaKeyParam);
4588 return VOS_STATUS_E_NOMEM;
4589 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 /* copy remove STA key params to WDI structure*/
4591 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4592 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4593 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4594 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4595 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 /* Store remove key pointer, as this will be used for response */
4597 /* store Params pass it to WDI */
4598 pWdaParams->pWdaContext = pWDA;
4599 pWdaParams->wdaMsgParam = removeStaKeyParams;
4600 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004601 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4602 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004603 if(IS_WDI_STATUS_FAILURE(status))
4604 {
4605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4606 "Failure in remove STA Key Req WDI API, free all the memory " );
4607 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4608 vos_mem_free(pWdaParams) ;
4609 removeStaKeyParams->status = eSIR_FAILURE ;
4610 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004612 return CONVERT_WDI2VOS_STATUS(status) ;
4613}
Jeff Johnson295189b2012-06-20 16:38:30 -07004614/*
4615 * FUNCTION: WDA_IsHandleSetLinkStateReq
4616 * Update the WDA state and return the status to handle this message or not
4617 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004618WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4619 tWDA_CbContext *pWDA,
4620 tLinkStateParams *linkStateParams)
4621{
4622 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 switch(linkStateParams->state)
4624 {
4625 case eSIR_LINK_PREASSOC_STATE:
4626 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4627 /*
4628 * set the WDA state to PRE ASSOC
4629 * copy the BSSID into pWDA to use it in join request and return,
4630 * No need to handle these messages.
4631 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004632 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4633 {
4634 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004635 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004636 }
4637 else
4638 {
4639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004640 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004641 VOS_ASSERT(0);
4642 }
4643
4644 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4645 {
4646 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004647 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004648 }
4649 else
4650 {
4651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004652 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004653 VOS_ASSERT(0);
4654 }
4655
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4657 *channel and after ) so reset the WDA state to ready when the second
4658 * time UMAC issue the link state with PREASSOC
4659 */
4660 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4661 {
4662 /* RESET WDA state back to WDA_READY_STATE */
4663 pWDA->wdaState = WDA_READY_STATE;
4664 }
4665 else
4666 {
4667 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4668 }
4669 //populate linkState info in WDACbCtxt
4670 pWDA->linkState = linkStateParams->state;
4671 status = WDA_IGNORE_SET_LINK_STATE;
4672 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 default:
4674 if(pWDA->wdaState != WDA_READY_STATE)
4675 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004676 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4677 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4678 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4679 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4680 *the ASSERT in WDA_Stop during module unload.*/
4681 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4682 {
4683 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004684 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004685 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004686 else
4687 {
4688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004689 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004690 status = WDA_IGNORE_SET_LINK_STATE;
4691 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 }
4693 break;
4694 }
4695
4696 return status;
4697}
Jeff Johnson295189b2012-06-20 16:38:30 -07004698/*
4699 * FUNCTION: WDA_SetLinkStateCallback
4700 * call back function for set link state from WDI
4701 */
4702void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4703{
4704 tWDA_CbContext *pWDA;
4705 tLinkStateParams *linkStateParams;
4706 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004708 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 if(NULL == pWdaParams)
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 VOS_ASSERT(0) ;
4714 return ;
4715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004717 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 /*
4719 * In STA mode start the BA activity check timer after association
4720 * and in AP mode start BA activity check timer after BSS start */
4721 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4722 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4723 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4724 {
4725 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4726 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004727 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004728 /*
4729 * No respone required for WDA_SET_LINK_STATE so free the request
4730 * param here
4731 */
4732 if( pWdaParams != NULL )
4733 {
4734 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4735 {
4736 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4737 }
4738 vos_mem_free(pWdaParams);
4739 }
4740 return ;
4741}
Jeff Johnson295189b2012-06-20 16:38:30 -07004742/*
4743 * FUNCTION: WDA_ProcessSetLinkState
4744 * Request to WDI to set the link status.
4745 */
4746VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4747 tLinkStateParams *linkStateParams)
4748{
4749 WDI_Status status = WDI_STATUS_SUCCESS ;
4750 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4751 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4752 sizeof(WDI_SetLinkReqParamsType)) ;
4753 tWDA_ReqParams *pWdaParams ;
4754 tpAniSirGlobal pMac;
4755 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4756
4757 if(NULL == pMac)
4758 {
4759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004760 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004762 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 return VOS_STATUS_E_FAILURE;
4764 }
4765
4766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004767 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004768 if(NULL == wdiSetLinkStateParam)
4769 {
4770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 VOS_ASSERT(0);
4773 return VOS_STATUS_E_NOMEM;
4774 }
4775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4776 if(NULL == pWdaParams)
4777 {
4778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 VOS_ASSERT(0);
4781 vos_mem_free(wdiSetLinkStateParam);
4782 return VOS_STATUS_E_NOMEM;
4783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004784 if(WDA_IGNORE_SET_LINK_STATE ==
4785 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4786 {
4787 status = WDI_STATUS_E_FAILURE;
4788 }
4789 else
4790 {
4791 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4792 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004793 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4794 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004795 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4796 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004797 pWdaParams->pWdaContext = pWDA;
4798 /* Store remove key pointer, as this will be used for response */
4799 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 /* store Params pass it to WDI */
4801 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4802 /* Stop Timer only other than GO role and concurrent session */
4803 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4804 && !vos_concurrent_sessions_running() &&
4805 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4806 {
4807 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4810 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004811 if(IS_WDI_STATUS_FAILURE(status))
4812 {
4813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4814 "Failure in set link state Req WDI API, free all the memory " );
4815 }
4816 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004817 if(IS_WDI_STATUS_FAILURE(status))
4818 {
4819 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004820 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 vos_mem_free(pWdaParams);
4822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004823 return CONVERT_WDI2VOS_STATUS(status) ;
4824}
Jeff Johnson295189b2012-06-20 16:38:30 -07004825/*
4826 * FUNCTION: WDA_GetStatsReqParamsCallback
4827 * send the response to PE with Stats received from WDI
4828 */
4829void WDA_GetStatsReqParamsCallback(
4830 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4831 void* pUserData)
4832{
4833 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4834 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4835
4836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004837 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004838 pGetPEStatsRspParams =
4839 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4840 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4841
4842 if(NULL == pGetPEStatsRspParams)
4843 {
4844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 VOS_ASSERT(0);
4847 return;
4848 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4850 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4851 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4852 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4853 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4854
4855 //Fill the Session Id Properly in PE
4856 pGetPEStatsRspParams->sessionId = 0;
4857 pGetPEStatsRspParams->rc =
4858 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4859 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4860 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004861 vos_mem_copy( pGetPEStatsRspParams + 1,
4862 wdiGetStatsRsp + 1,
4863 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004864 /* send response to UMAC*/
4865 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4866
4867 return;
4868}
4869
Jeff Johnson295189b2012-06-20 16:38:30 -07004870/*
4871 * FUNCTION: WDA_ProcessGetStatsReq
4872 * Request to WDI to get the statistics
4873 */
4874VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4875 tAniGetPEStatsReq *pGetStatsParams)
4876{
4877 WDI_Status status = WDI_STATUS_SUCCESS ;
4878 WDI_GetStatsReqParamsType wdiGetStatsParam;
4879 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4883 pGetStatsParams->staId;
4884 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4885 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 status = WDI_GetStatsReq(&wdiGetStatsParam,
4888 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004889 if(IS_WDI_STATUS_FAILURE(status))
4890 {
4891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4892 "Failure in Get Stats Req WDI API, free all the memory " );
4893 pGetPEStatsRspParams =
4894 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4895 if(NULL == pGetPEStatsRspParams)
4896 {
4897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004898 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004899 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004900 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004901 return VOS_STATUS_E_NOMEM;
4902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004903 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4904 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4905 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4906 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4907 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4908 (void *)pGetPEStatsRspParams, 0) ;
4909 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004910 /* Free the request message */
4911 vos_mem_free(pGetStatsParams);
4912 return CONVERT_WDI2VOS_STATUS(status);
4913}
Jeff Johnson295189b2012-06-20 16:38:30 -07004914/*
4915 * FUNCTION: WDA_UpdateEDCAParamCallback
4916 * call back function for Update EDCA params from WDI
4917 */
4918void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4919{
4920 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4921 tEdcaParams *pEdcaParams;
4922
4923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004924 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 if(NULL == pWdaParams)
4926 {
4927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004928 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004929 VOS_ASSERT(0) ;
4930 return ;
4931 }
4932 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4934 vos_mem_free(pWdaParams);
4935 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004936 return ;
4937}
Jeff Johnson295189b2012-06-20 16:38:30 -07004938/*
4939 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4940 * Request to WDI to Update the EDCA params.
4941 */
4942VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4943 tEdcaParams *pEdcaParams)
4944{
4945 WDI_Status status = WDI_STATUS_SUCCESS ;
4946 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4947 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4948 sizeof(WDI_UpdateEDCAParamsType)) ;
4949 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004951 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004952 if(NULL == wdiEdcaParam)
4953 {
4954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004957 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 return VOS_STATUS_E_NOMEM;
4959 }
4960 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4961 if(NULL == pWdaParams)
4962 {
4963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004964 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 VOS_ASSERT(0);
4966 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004967 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 return VOS_STATUS_E_NOMEM;
4969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4971 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4972 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4973 &pEdcaParams->acbe);
4974 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4975 &pEdcaParams->acbk);
4976 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4977 &pEdcaParams->acvi);
4978 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4979 &pEdcaParams->acvo);
4980 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 pWdaParams->pWdaContext = pWDA;
4982 /* Store remove key pointer, as this will be used for response */
4983 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004984 /* store Params pass it to WDI */
4985 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004986 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4987 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004988 if(IS_WDI_STATUS_FAILURE(status))
4989 {
4990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4991 "Failure in Update EDCA Params WDI API, free all the memory " );
4992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4993 vos_mem_free(pWdaParams);
4994 vos_mem_free(pEdcaParams);
4995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004996 return CONVERT_WDI2VOS_STATUS(status) ;
4997}
Jeff Johnson295189b2012-06-20 16:38:30 -07004998/*
4999 * FUNCTION: WDA_AddBAReqCallback
5000 * send ADD BA RSP back to PE
5001 */
5002void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5003 void* pUserData)
5004{
5005 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5006 tWDA_CbContext *pWDA;
5007 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005009 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005010 if(NULL == pWdaParams)
5011 {
5012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005013 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 VOS_ASSERT(0) ;
5015 return ;
5016 }
5017 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5018 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5020 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005022 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 return ;
5024}
5025
Jeff Johnson295189b2012-06-20 16:38:30 -07005026/*
5027 * FUNCTION: WDA_ProcessAddBAReq
5028 * Request to WDI to Update the ADDBA REQ params.
5029 */
5030VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5031 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5032{
Jeff Johnson43971f52012-07-17 12:26:56 -07005033 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005034 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5035 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5036 sizeof(WDI_AddBAReqParamsType)) ;
5037 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005039 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005040 if(NULL == wdiAddBAReqParam)
5041 {
5042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005043 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 VOS_ASSERT(0);
5045 return VOS_STATUS_E_NOMEM;
5046 }
5047 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5048 if(NULL == pWdaParams)
5049 {
5050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005051 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 VOS_ASSERT(0);
5053 vos_mem_free(wdiAddBAReqParam);
5054 return VOS_STATUS_E_NOMEM;
5055 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 do
5057 {
5058 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005059 wdiAddBaInfo->ucSTAIdx = staIdx ;
5060 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5061 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 } while(0) ;
5063 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005064 pWdaParams->pWdaContext = pWDA;
5065 /* store Params pass it to WDI */
5066 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5067 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005068 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5069 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005070
Jeff Johnson43971f52012-07-17 12:26:56 -07005071 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 {
5073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005074 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5075 status = CONVERT_WDI2VOS_STATUS(wstatus);
5076 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 vos_mem_free(pWdaParams);
5078 pAddBAReqParams->status = eSIR_FAILURE;
5079 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5080 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005081 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082}
Jeff Johnson295189b2012-06-20 16:38:30 -07005083/*
5084 * FUNCTION: WDA_AddBASessionReqCallback
5085 * send ADD BA SESSION RSP back to PE/(or TL)
5086 */
5087void WDA_AddBASessionReqCallback(
5088 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5089{
5090 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5091 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5092 tWDA_CbContext *pWDA;
5093 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005095 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005096 if(NULL == pWdaParams)
5097 {
5098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005099 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 VOS_ASSERT(0) ;
5101 return ;
5102 }
5103 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5104 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005105 if( NULL == pAddBAReqParams )
5106 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005108 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5111 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005112 return ;
5113 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5115 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 /*
5117 * if WDA in update TL state, update TL with BA session parama and send
5118 * another request to HAL(/WDI) (ADD_BA_REQ)
5119 */
5120
5121 if((VOS_STATUS_SUCCESS ==
5122 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5123 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5124 {
5125 /* Update TL with BA info received from HAL/WDI */
5126 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5127 wdiAddBaSession->usBaSessionID,
5128 wdiAddBaSession->ucSTAIdx,
5129 wdiAddBaSession->ucBaTID,
5130 wdiAddBaSession->ucBaBufferSize,
5131 wdiAddBaSession->ucWinSize,
5132 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5134 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5135 }
5136 else
5137 {
5138 pAddBAReqParams->status =
5139 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5140
5141 /* Setting Flag to indicate that Set BA is success */
5142 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5143 {
5144 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5145 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5146 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5147 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005148 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5149 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 /*Reset the WDA state to READY */
5151 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 return ;
5153}
5154
Jeff Johnson295189b2012-06-20 16:38:30 -07005155/*
5156 * FUNCTION: WDA_ProcessAddBASessionReq
5157 * Request to WDI to Update the ADDBA REQ params.
5158 */
5159VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5160 tAddBAParams *pAddBAReqParams)
5161{
5162 WDI_Status status = WDI_STATUS_SUCCESS ;
5163 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5164 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5165 sizeof(WDI_AddBASessionReqParamsType)) ;
5166 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005168 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005169 if(NULL == wdiAddBASessionReqParam)
5170 {
5171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005172 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005173 VOS_ASSERT(0);
5174 return VOS_STATUS_E_NOMEM;
5175 }
5176 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5177 if(NULL == pWdaParams)
5178 {
5179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005181 VOS_ASSERT(0);
5182 vos_mem_free(wdiAddBASessionReqParam);
5183 return VOS_STATUS_E_NOMEM;
5184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005185 /*
5186 * Populate ADD BA parameters and pass these paarmeters to WDI.
5187 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5188 * the state to track if these is BA recipient case or BA initiator
5189 * case.
5190 */
5191 do
5192 {
5193 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5194 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5195 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5196 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5197 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5198 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5199 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005200 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5202 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5203 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5204 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5205 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005206 /* check the BA direction and update state accordingly */
5207 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5208 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5209 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5210
5211 }while(0) ;
5212 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005213 pWdaParams->pWdaContext = pWDA;
5214 /* Store ADD BA pointer, as this will be used for response */
5215 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5216 /* store Params pass it to WDI */
5217 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005218 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5219 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005220 if(IS_WDI_STATUS_FAILURE(status))
5221 {
5222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5223 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5224 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5225 vos_mem_free(pWdaParams->wdaMsgParam);
5226 vos_mem_free(pWdaParams);
5227 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005229}
Jeff Johnson295189b2012-06-20 16:38:30 -07005230/*
5231 * FUNCTION: WDA_DelBANotifyTL
5232 * send DEL BA IND to TL
5233 */
5234void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5235 tDelBAParams *pDelBAReqParams)
5236{
5237 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5238 //tSirMsgQ msg;
5239 vos_msg_t vosMsg;
5240 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005241 if(NULL == pDelBAInd)
5242 {
5243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005245 VOS_ASSERT(0) ;
5246 return;
5247 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005248 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5249 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5250 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5251 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005252
Jeff Johnson295189b2012-06-20 16:38:30 -07005253
5254 vosMsg.type = WDA_DELETEBA_IND;
5255 vosMsg.bodyptr = pDelBAInd;
5256 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5257 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5258 {
5259 vosStatus = VOS_STATUS_E_BADMSG;
5260 }
5261}
Jeff Johnson295189b2012-06-20 16:38:30 -07005262/*
5263 * FUNCTION: WDA_DelBAReqCallback
5264 * send DEL BA RSP back to PE
5265 */
5266void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5267{
5268 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5269 tWDA_CbContext *pWDA;
5270 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005272 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 if(NULL == pWdaParams)
5274 {
5275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005276 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005277 VOS_ASSERT(0) ;
5278 return ;
5279 }
5280 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5281 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 /* Notify TL about DEL BA in case of recipinet */
5283 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5284 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5285 {
5286 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5287 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005288 /*
5289 * No respone required for WDA_DELBA_IND so just free the request
5290 * param here
5291 */
5292 vos_mem_free(pDelBAReqParams);
5293 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5294 vos_mem_free(pWdaParams);
5295 return ;
5296}
5297
Jeff Johnson295189b2012-06-20 16:38:30 -07005298/*
5299 * FUNCTION: WDA_ProcessDelBAReq
5300 * Request to WDI to Update the DELBA REQ params.
5301 */
5302VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5303 tDelBAParams *pDelBAReqParams)
5304{
5305 WDI_Status status = WDI_STATUS_SUCCESS ;
5306 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5307 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5308 sizeof(WDI_DelBAReqParamsType)) ;
5309 tWDA_ReqParams *pWdaParams ;
5310 tANI_U16 staIdx = 0;
5311 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005313 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005314 if(NULL == wdiDelBAReqParam)
5315 {
5316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005318 VOS_ASSERT(0);
5319 return VOS_STATUS_E_NOMEM;
5320 }
5321 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5322 if(NULL == pWdaParams)
5323 {
5324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005325 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005326 VOS_ASSERT(0);
5327 vos_mem_free(wdiDelBAReqParam);
5328 return VOS_STATUS_E_NOMEM;
5329 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5331 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5332 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5333 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005334 pWdaParams->pWdaContext = pWDA;
5335 /* Store DEL BA pointer, as this will be used for response */
5336 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005337 /* store Params pass it to WDI */
5338 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005339 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5340 * maintained in WDA, so that WDA can retry for another BA session
5341 */
5342 staIdx = pDelBAReqParams->staIdx;
5343 tid = pDelBAReqParams->baTID;
5344 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 status = WDI_DelBAReq(wdiDelBAReqParam,
5346 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005347 if(IS_WDI_STATUS_FAILURE(status))
5348 {
5349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5350 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5351 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5352 vos_mem_free(pWdaParams->wdaMsgParam);
5353 vos_mem_free(pWdaParams);
5354 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005355 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005356}
Jeff Johnson295189b2012-06-20 16:38:30 -07005357/*
5358 * FUNCTION: WDA_AddTSReqCallback
5359 * send ADD TS RSP back to PE
5360 */
5361void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5362{
5363 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5364 tWDA_CbContext *pWDA;
5365 tAddTsParams *pAddTsReqParams;
5366
5367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005368 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005369 if(NULL == pWdaParams)
5370 {
5371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005372 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 VOS_ASSERT(0) ;
5374 return ;
5375 }
5376 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5377 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5378 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5379 vos_mem_free(pWdaParams);
5380
5381 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005382 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 return ;
5384}
5385
Jeff Johnson295189b2012-06-20 16:38:30 -07005386/*
5387 * FUNCTION: WDA_ProcessAddTSReq
5388 * Request to WDI to Update the ADD TS REQ params.
5389 */
5390VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5391 tAddTsParams *pAddTsReqParams)
5392{
5393 WDI_Status status = WDI_STATUS_SUCCESS ;
5394 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5395 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5396 sizeof(WDI_AddTSReqParamsType)) ;
5397 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005400 if(NULL == wdiAddTSReqParam)
5401 {
5402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005404 VOS_ASSERT(0);
5405 return VOS_STATUS_E_NOMEM;
5406 }
5407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5408 if(NULL == pWdaParams)
5409 {
5410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 VOS_ASSERT(0);
5413 vos_mem_free(wdiAddTSReqParam);
5414 return VOS_STATUS_E_NOMEM;
5415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005416 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5417 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005418 //TS IE
5419 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5420 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5421 pAddTsReqParams->tspec.length;
5422
5423 //TS IE : TS INFO : TRAFFIC
5424 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5425 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5426 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5427 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5428 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5429 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5430 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5431 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5432 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5433 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5434 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5435 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5436 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5437 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5438 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5439 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5440
5441 //TS IE : TS INFO : SCHEDULE
5442 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5443 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5445 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005446 //TS IE
5447 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5448 pAddTsReqParams->tspec.nomMsduSz;
5449 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5450 pAddTsReqParams->tspec.maxMsduSz;
5451 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5452 pAddTsReqParams->tspec.minSvcInterval;
5453 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5454 pAddTsReqParams->tspec.maxSvcInterval;
5455 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5456 pAddTsReqParams->tspec.inactInterval;
5457 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5458 pAddTsReqParams->tspec.suspendInterval;
5459 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5460 pAddTsReqParams->tspec.svcStartTime;
5461 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5462 pAddTsReqParams->tspec.minDataRate;
5463 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5464 pAddTsReqParams->tspec.meanDataRate;
5465 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5466 pAddTsReqParams->tspec.peakDataRate;
5467 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5468 pAddTsReqParams->tspec.maxBurstSz;
5469 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5470 pAddTsReqParams->tspec.delayBound;
5471 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5472 pAddTsReqParams->tspec.minPhyRate;
5473 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5474 pAddTsReqParams->tspec.surplusBw;
5475 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5476 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 /* TODO: tAddTsParams doesn't have the following fields */
5478#if 0
5479 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5480 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5481 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5482 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5483#endif
5484 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5485
5486 pWdaParams->pWdaContext = pWDA;
5487 /* Store ADD TS pointer, as this will be used for response */
5488 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 /* store Params pass it to WDI */
5490 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005491 status = WDI_AddTSReq(wdiAddTSReqParam,
5492 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005493 if(IS_WDI_STATUS_FAILURE(status))
5494 {
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5496 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5498 vos_mem_free(pWdaParams);
5499 pAddTsReqParams->status = eSIR_FAILURE ;
5500 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5501 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005502 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005503}
5504
Jeff Johnson295189b2012-06-20 16:38:30 -07005505/*
5506 * FUNCTION: WDA_DelTSReqCallback
5507 * send DEL TS RSP back to PE
5508 */
5509void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5510{
5511 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005513 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005514 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5515 vos_mem_free(pWdaParams->wdaMsgParam) ;
5516 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005517 /*
5518 * No respone required for WDA_DEL_TS_REQ so just free the request
5519 * param here
5520 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 return ;
5522}
5523
Jeff Johnson295189b2012-06-20 16:38:30 -07005524/*
5525 * FUNCTION: WDA_ProcessDelTSReq
5526 * Request to WDI to Update the DELTS REQ params.
5527 */
5528VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5529 tDelTsParams *pDelTSReqParams)
5530{
5531 WDI_Status status = WDI_STATUS_SUCCESS ;
5532 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5533 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5534 sizeof(WDI_DelTSReqParamsType)) ;
5535 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005537 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005538 if(NULL == wdiDelTSReqParam)
5539 {
5540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 VOS_ASSERT(0);
5543 return VOS_STATUS_E_NOMEM;
5544 }
5545 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5546 if(NULL == pWdaParams)
5547 {
5548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005549 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005550 VOS_ASSERT(0);
5551 vos_mem_free(wdiDelTSReqParam);
5552 return VOS_STATUS_E_NOMEM;
5553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005554 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5555 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5556 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5557 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5558 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005559 pWdaParams->pWdaContext = pWDA;
5560 /* Store DEL TS pointer, as this will be used for response */
5561 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005562 /* store Params pass it to WDI */
5563 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 status = WDI_DelTSReq(wdiDelTSReqParam,
5565 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 if(IS_WDI_STATUS_FAILURE(status))
5567 {
5568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5569 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5571 vos_mem_free(pWdaParams->wdaMsgParam);
5572 vos_mem_free(pWdaParams);
5573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005574 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005575}
Jeff Johnson295189b2012-06-20 16:38:30 -07005576/*
5577 * FUNCTION: WDA_UpdateBeaconParamsCallback
5578 * Free the memory. No need to send any response to PE in this case
5579 */
5580void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5581{
5582 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005584 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005585 if(NULL == pWdaParams)
5586 {
5587 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005588 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005589 VOS_ASSERT(0) ;
5590 return ;
5591 }
5592 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5593 vos_mem_free(pWdaParams->wdaMsgParam) ;
5594 vos_mem_free(pWdaParams);
5595 /*
5596 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5597 * param here
5598 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005599 return ;
5600}
Jeff Johnson295189b2012-06-20 16:38:30 -07005601/*
5602 * FUNCTION: WDA_ProcessUpdateBeaconParams
5603 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5604 */
5605VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5606 tUpdateBeaconParams *pUpdateBeaconParams)
5607{
5608 WDI_Status status = WDI_STATUS_SUCCESS ;
5609 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5610 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5611 sizeof(WDI_UpdateBeaconParamsType)) ;
5612 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005614 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005615 if(NULL == wdiUpdateBeaconParams)
5616 {
5617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005618 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005619 VOS_ASSERT(0);
5620 return VOS_STATUS_E_NOMEM;
5621 }
5622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5623 if(NULL == pWdaParams)
5624 {
5625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005626 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005627 VOS_ASSERT(0);
5628 vos_mem_free(wdiUpdateBeaconParams);
5629 return VOS_STATUS_E_NOMEM;
5630 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005631 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5632 pUpdateBeaconParams->bssIdx;
5633 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5634 pUpdateBeaconParams->fShortPreamble;
5635 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5636 pUpdateBeaconParams->fShortSlotTime;
5637 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5638 pUpdateBeaconParams->beaconInterval;
5639 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5640 pUpdateBeaconParams->llaCoexist;
5641 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5642 pUpdateBeaconParams->llbCoexist;
5643 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5644 pUpdateBeaconParams->llgCoexist;
5645 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5646 pUpdateBeaconParams->ht20MhzCoexist;
5647 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5648 pUpdateBeaconParams->llnNonGFCoexist;
5649 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5650 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5651 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5652 pUpdateBeaconParams->fRIFSMode;
5653 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5654 pUpdateBeaconParams->paramChangeBitmap;
5655 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5656
5657 pWdaParams->pWdaContext = pWDA;
5658 /* Store UpdateBeacon Req pointer, as this will be used for response */
5659 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005660 /* store Params pass it to WDI */
5661 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5663 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5664 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 if(IS_WDI_STATUS_FAILURE(status))
5666 {
5667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5668 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5669 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5670 vos_mem_free(pWdaParams->wdaMsgParam);
5671 vos_mem_free(pWdaParams);
5672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005673 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005674}
Jeff Johnson295189b2012-06-20 16:38:30 -07005675#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005676/*
5677 * FUNCTION: WDA_TSMStatsReqCallback
5678 * send TSM Stats RSP back to PE
5679 */
5680void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5681{
5682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5683 tWDA_CbContext *pWDA = NULL;
5684 tTSMStats *pTsmRspParams = NULL;
5685
5686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005687 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005688 if(NULL == pWdaParams)
5689 {
5690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005691 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 VOS_ASSERT(0) ;
5693 return ;
5694 }
5695 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5696 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005697 if( NULL == pTsmRspParams )
5698 {
5699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005700 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 VOS_ASSERT( 0 );
5702 return ;
5703 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5705 vos_mem_free(pWdaParams);
5706
5707 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5708 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5709 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5710 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5711 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5712 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5713 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5714 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5715 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5716 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005718 return ;
5719}
5720
5721
Jeff Johnson295189b2012-06-20 16:38:30 -07005722/*
5723 * FUNCTION: WDA_ProcessTsmStatsReq
5724 * Request to WDI to get the TSM Stats params.
5725 */
5726VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5727 tTSMStats *pTsmStats)
5728{
5729 WDI_Status status = WDI_STATUS_SUCCESS ;
5730 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5731 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005733 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005734 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5735 sizeof(WDI_TSMStatsReqParamsType));
5736 if(NULL == wdiTSMReqParam)
5737 {
5738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005739 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 VOS_ASSERT(0);
5741 return VOS_STATUS_E_NOMEM;
5742 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005743 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5744 if(NULL == pWdaParams)
5745 {
5746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005747 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 VOS_ASSERT(0);
5749 vos_mem_free(wdiTSMReqParam);
5750 return VOS_STATUS_E_NOMEM;
5751 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5753 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5754 pTsmStats->bssId,
5755 sizeof(wpt_macAddr));
5756 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5757
5758 pWdaParams->pWdaContext = pWDA;
5759 /* Store TSM Stats pointer, as this will be used for response */
5760 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005761 /* store Params pass it to WDI */
5762 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 status = WDI_TSMStatsReq(wdiTSMReqParam,
5764 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 if(IS_WDI_STATUS_FAILURE(status))
5766 {
5767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5768 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5770 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005771 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 return CONVERT_WDI2VOS_STATUS(status) ;
5774}
5775#endif
5776/*
5777 * FUNCTION: WDA_SendBeaconParamsCallback
5778 * No need to send any response to PE in this case
5779 */
5780void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5781{
5782
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005784 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005785 return ;
5786}
Jeff Johnson295189b2012-06-20 16:38:30 -07005787/*
5788 * FUNCTION: WDA_ProcessSendBeacon
5789 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5790 * start beacon trasmission
5791 */
5792VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5793 tSendbeaconParams *pSendbeaconParams)
5794{
5795 WDI_Status status = WDI_STATUS_SUCCESS ;
5796 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5800 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5801 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5802 pSendbeaconParams->beaconLength;
5803#ifdef WLAN_SOFTAP_FEATURE
5804 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5805 pSendbeaconParams->timIeOffset;
5806#endif
5807#ifdef WLAN_FEATURE_P2P
5808 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5809 pSendbeaconParams->p2pIeOffset;
5810#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 /* Copy the beacon template to local buffer */
5812 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5813 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5814 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5815
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5817 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 if(IS_WDI_STATUS_FAILURE(status))
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5821 "Failure in SEND BEACON REQ Params WDI API" );
5822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005823 vos_mem_free(pSendbeaconParams);
5824 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005825}
Jeff Johnson295189b2012-06-20 16:38:30 -07005826/*
5827 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5828 * No need to send any response to PE in this case
5829 */
5830void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5831{
Jeff Johnson295189b2012-06-20 16:38:30 -07005832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005833 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 return ;
5835}
5836
Jeff Johnson295189b2012-06-20 16:38:30 -07005837/*
5838 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5839 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5840 * send probe response
5841 */
5842VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5843 tSendProbeRespParams *pSendProbeRspParams)
5844{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005845 WDI_Status status = WDI_STATUS_SUCCESS;
5846 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5847 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005849 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005850
5851 if (!wdiSendProbeRspParam)
5852 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5853
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005855 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005857 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005859 /* Copy the Probe Response template to local buffer */
5860 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005861 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005862 pSendProbeRspParams->pProbeRespTemplate,
5863 pSendProbeRspParams->probeRespTemplateLen);
5864 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005865 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005866 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5867 WDI_PROBE_REQ_BITMAP_IE_LEN);
5868
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005869 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005870
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005871 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005872 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005873 if(IS_WDI_STATUS_FAILURE(status))
5874 {
5875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5876 "Failure in SEND Probe RSP Params WDI API" );
5877 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005878 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005879 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005880 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005881}
Jeff Johnson295189b2012-06-20 16:38:30 -07005882#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5883/*
5884 * FUNCTION: WDA_SetMaxTxPowerCallBack
5885 * send the response to PE with power value received from WDI
5886 */
5887void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5888 void* pUserData)
5889{
5890 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5891 tWDA_CbContext *pWDA = NULL;
5892 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5893
5894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005896 if(NULL == pWdaParams)
5897 {
5898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005899 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005900 VOS_ASSERT(0) ;
5901 return ;
5902 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5904 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005905 if( NULL == pMaxTxPowerParams )
5906 {
5907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005908 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005909 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5911 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005912 return ;
5913 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005914
Jeff Johnson295189b2012-06-20 16:38:30 -07005915
5916 /*need to free memory for the pointers used in the
5917 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005918 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5919 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005921
Jeff Johnson295189b2012-06-20 16:38:30 -07005922
5923 /* send response to UMAC*/
5924 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5925
5926 return;
5927}
Jeff Johnson295189b2012-06-20 16:38:30 -07005928/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005929 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 * Request to WDI to send set Max Tx Power Request
5931 */
5932 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5933 tMaxTxPowerParams *MaxTxPowerParams)
5934{
5935 WDI_Status status = WDI_STATUS_SUCCESS;
5936 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5937 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005938
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005940 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005941
Jeff Johnson295189b2012-06-20 16:38:30 -07005942 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5943 sizeof(WDI_SetMaxTxPowerParamsType));
5944 if(NULL == wdiSetMaxTxPowerParams)
5945 {
5946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005948 VOS_ASSERT(0);
5949 return VOS_STATUS_E_NOMEM;
5950 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005951 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5952 if(NULL == pWdaParams)
5953 {
5954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005955 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 vos_mem_free(wdiSetMaxTxPowerParams);
5957 VOS_ASSERT(0);
5958 return VOS_STATUS_E_NOMEM;
5959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 /* Copy.Max.Tx.Power Params to WDI structure */
5961 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5962 MaxTxPowerParams->bssId,
5963 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005964 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5965 MaxTxPowerParams->selfStaMacAddr,
5966 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5968 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005969 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005970 pWdaParams->pWdaContext = pWDA;
5971 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 /* store Params pass it to WDI */
5973 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005974 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5975 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 if(IS_WDI_STATUS_FAILURE(status))
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5979 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5981 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005982 /* send response to UMAC*/
5983 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 }
5985 return CONVERT_WDI2VOS_STATUS(status);
5986
5987}
Jeff Johnson295189b2012-06-20 16:38:30 -07005988#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005989#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005990/*
5991 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5992 * Free the memory. No need to send any response to PE in this case
5993 */
5994void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5995{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005996 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5997
Jeff Johnson295189b2012-06-20 16:38:30 -07005998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005999 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006000
6001 if(NULL == pWdaParams)
6002 {
6003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006004 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006005 VOS_ASSERT(0) ;
6006 return ;
6007 }
6008
6009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6010 vos_mem_free(pWdaParams->wdaMsgParam) ;
6011 vos_mem_free(pWdaParams);
6012
Jeff Johnson295189b2012-06-20 16:38:30 -07006013 /*
6014 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6015 * so just free the request param here
6016 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 return ;
6018}
6019
Jeff Johnson295189b2012-06-20 16:38:30 -07006020/*
6021 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6022 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6023 */
6024VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6025 tP2pPsParams *pP2pPsConfigParams)
6026{
6027 WDI_Status status = WDI_STATUS_SUCCESS ;
6028 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6029 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6030 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006031 tWDA_ReqParams *pWdaParams = NULL;
6032
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006035 if(NULL == wdiSetP2PGONOAReqParam)
6036 {
6037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006039 VOS_ASSERT(0);
6040 return VOS_STATUS_E_NOMEM;
6041 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006042
6043 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6044 if(NULL == pWdaParams)
6045 {
6046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006047 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006048 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006049 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006050 VOS_ASSERT(0);
6051 return VOS_STATUS_E_NOMEM;
6052 }
6053
Jeff Johnson295189b2012-06-20 16:38:30 -07006054 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6055 pP2pPsConfigParams->opp_ps;
6056 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6057 pP2pPsConfigParams->ctWindow;
6058 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6059 pP2pPsConfigParams->count;
6060 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6061 pP2pPsConfigParams->duration;
6062 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6063 pP2pPsConfigParams->interval;
6064 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6065 pP2pPsConfigParams->single_noa_duration;
6066 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6067 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006068
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6070 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006071 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6072
Jeff Johnson295189b2012-06-20 16:38:30 -07006073 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006074 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6075 pWdaParams->pWdaContext = pWDA;
6076
Jeff Johnson295189b2012-06-20 16:38:30 -07006077 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006078 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6079
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 if(IS_WDI_STATUS_FAILURE(status))
6081 {
6082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6083 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006084 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6085 vos_mem_free(pWdaParams->wdaMsgParam);
6086 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006088 return CONVERT_WDI2VOS_STATUS(status);
6089
Jeff Johnson295189b2012-06-20 16:38:30 -07006090}
6091#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006092#ifdef WLAN_FEATURE_VOWIFI_11R
6093/*
6094 * FUNCTION: WDA_AggrAddTSReqCallback
6095 * send ADD AGGREGATED TS RSP back to PE
6096 */
6097void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6098{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6100 tWDA_CbContext *pWDA;
6101 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006102 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006104 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006105 if(NULL == pWdaParams)
6106 {
6107 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006108 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006109 VOS_ASSERT(0) ;
6110 return ;
6111 }
6112
6113 pWDA = pWdaParams->pWdaContext;
6114 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006115
6116 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6117 {
6118 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6119 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006120 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006121
6122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6123 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 return ;
6125}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006126/*
6127 * FUNCTION: WDA_ProcessAddTSReq
6128 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6129 */
6130VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6131 tAggrAddTsParams *pAggrAddTsReqParams)
6132{
6133 WDI_Status status = WDI_STATUS_SUCCESS ;
6134 int i;
6135 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006136 tWDA_ReqParams *pWdaParams = NULL;
6137
6138
Jeff Johnson295189b2012-06-20 16:38:30 -07006139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006140 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006141 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6142 sizeof(WDI_AggrAddTSReqParamsType)) ;
6143 if(NULL == wdiAggrAddTSReqParam)
6144 {
6145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006147 VOS_ASSERT(0);
6148 return VOS_STATUS_E_NOMEM;
6149 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006150
6151
6152 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6153 if(NULL == pWdaParams)
6154 {
6155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006156 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006157 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006158 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006159 VOS_ASSERT(0);
6160 return VOS_STATUS_E_NOMEM;
6161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006162 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6163 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6164 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006165 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6166 {
6167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6168 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6169 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006170 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6171 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6172 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6173 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6174 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6175 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6176 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6177 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6178 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6179 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6180 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6181 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6182 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6183 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6184 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6185 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6187 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006188 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6189 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6190 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6191 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6192 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6193 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6194 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6195 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6196 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6197 pAggrAddTsReqParams->tspec[i].inactInterval;
6198 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6199 pAggrAddTsReqParams->tspec[i].suspendInterval;
6200 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6201 pAggrAddTsReqParams->tspec[i].svcStartTime;
6202 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6203 pAggrAddTsReqParams->tspec[i].minDataRate;
6204 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6205 pAggrAddTsReqParams->tspec[i].meanDataRate;
6206 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6207 pAggrAddTsReqParams->tspec[i].peakDataRate;
6208 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6209 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6210 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6211 pAggrAddTsReqParams->tspec[i].delayBound;
6212 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6213 pAggrAddTsReqParams->tspec[i].minPhyRate;
6214 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6215 pAggrAddTsReqParams->tspec[i].surplusBw;
6216 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6217 pAggrAddTsReqParams->tspec[i].mediumTime;
6218 }
6219
6220 /* TODO: tAggrAddTsParams doesn't have the following fields */
6221#if 0
6222 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6223 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6224 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6225 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6226#endif
6227 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6228
6229 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006230 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006231 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006232 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6233
6234 pWdaParams->pWdaContext = pWDA;
6235
Jeff Johnson295189b2012-06-20 16:38:30 -07006236 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006237 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6238
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 if(IS_WDI_STATUS_FAILURE(status))
6240 {
6241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6242 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006243 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6244 vos_mem_free(pWdaParams);
6245
6246 /* send the failure response back to PE*/
6247 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6248 {
6249 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6250 }
6251
6252 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6253 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 return CONVERT_WDI2VOS_STATUS(status) ;
6256}
6257#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006258/*
6259 * FUNCTION: WDA_EnterImpsReqCallback
6260 * send Enter IMPS RSP back to PE
6261 */
6262void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6263{
6264 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006266 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006267 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 return ;
6269}
Jeff Johnson295189b2012-06-20 16:38:30 -07006270/*
6271 * FUNCTION: WDA_ProcessEnterImpsReq
6272 * Request to WDI to Enter IMPS power state.
6273 */
6274VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6275{
6276 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006278 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006279 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 if(IS_WDI_STATUS_FAILURE(status))
6281 {
6282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6283 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006284 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006286 return CONVERT_WDI2VOS_STATUS(status) ;
6287}
Jeff Johnson295189b2012-06-20 16:38:30 -07006288/*
6289 * FUNCTION: WDA_ExitImpsReqCallback
6290 * send Exit IMPS RSP back to PE
6291 */
6292void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6293{
6294 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006296 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006297 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 return ;
6299}
Jeff Johnson295189b2012-06-20 16:38:30 -07006300/*
6301 * FUNCTION: WDA_ProcessExitImpsReq
6302 * Request to WDI to Exit IMPS power state.
6303 */
6304VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6305{
6306 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006308 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006309 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 if(IS_WDI_STATUS_FAILURE(status))
6311 {
6312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6313 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006314 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 return CONVERT_WDI2VOS_STATUS(status) ;
6317}
Jeff Johnson295189b2012-06-20 16:38:30 -07006318/*
6319 * FUNCTION: WDA_EnterBmpsReqCallback
6320 * send Enter BMPS RSP back to PE
6321 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006322void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006323{
6324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6325 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006326 tEnterBmpsParams *pEnterBmpsRspParams;
6327
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006329 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006330 if(NULL == pWdaParams)
6331 {
6332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006333 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 VOS_ASSERT(0) ;
6335 return ;
6336 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006337
6338 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6339 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6340
6341 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6342 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6343
6344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006346 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6347
Jeff Johnson295189b2012-06-20 16:38:30 -07006348 return ;
6349}
Jeff Johnson295189b2012-06-20 16:38:30 -07006350/*
6351 * FUNCTION: WDA_ProcessEnterBmpsReq
6352 * Request to WDI to Enter BMPS power state.
6353 */
6354VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6355 tEnterBmpsParams *pEnterBmpsReqParams)
6356{
6357 WDI_Status status = WDI_STATUS_SUCCESS;
6358 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6359 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006361 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6363 {
6364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006365 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006366 VOS_ASSERT(0);
6367 return VOS_STATUS_E_FAILURE;
6368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006369 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6370 if (NULL == wdiEnterBmpsReqParams)
6371 {
6372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006375 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6376 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 return VOS_STATUS_E_NOMEM;
6378 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006379 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6380 if (NULL == pWdaParams)
6381 {
6382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006383 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006384 VOS_ASSERT(0);
6385 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006386 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6387 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 return VOS_STATUS_E_NOMEM;
6389 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6391 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6392 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6393 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 // For CCX and 11R Roaming
6395 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6396 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6397 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6398 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006399
Jeff Johnson295189b2012-06-20 16:38:30 -07006400 /* Store param pointer as passed in by caller */
6401 /* store Params pass it to WDI */
6402 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006403 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006405 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6406 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006407 if (IS_WDI_STATUS_FAILURE(status))
6408 {
6409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6410 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6411 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006412 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006414 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006416 return CONVERT_WDI2VOS_STATUS(status);
6417}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006418
6419
6420static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6421 WDI_Status wdiStatus,
6422 tExitBmpsParams *pExitBmpsReqParams)
6423{
6424 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6425
6426 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6427}
6428
6429
Jeff Johnson295189b2012-06-20 16:38:30 -07006430/*
6431 * FUNCTION: WDA_ExitBmpsReqCallback
6432 * send Exit BMPS RSP back to PE
6433 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006434void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006435{
6436 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6437 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006438 tExitBmpsParams *pExitBmpsRspParams;
6439
Jeff Johnson295189b2012-06-20 16:38:30 -07006440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006441 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006442 if(NULL == pWdaParams)
6443 {
6444 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006445 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 VOS_ASSERT(0) ;
6447 return ;
6448 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006449
6450 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6451 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6452
6453 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6454 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006455
Jeff Johnson295189b2012-06-20 16:38:30 -07006456 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6457 vos_mem_free(pWdaParams) ;
6458
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006459 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 return ;
6461}
Jeff Johnson295189b2012-06-20 16:38:30 -07006462/*
6463 * FUNCTION: WDA_ProcessExitBmpsReq
6464 * Request to WDI to Exit BMPS power state.
6465 */
6466VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6467 tExitBmpsParams *pExitBmpsReqParams)
6468{
6469 WDI_Status status = WDI_STATUS_SUCCESS ;
6470 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6471 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6472 sizeof(WDI_ExitBmpsReqParamsType)) ;
6473 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006475 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 if(NULL == wdiExitBmpsReqParams)
6477 {
6478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006481 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006482 return VOS_STATUS_E_NOMEM;
6483 }
6484 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6485 if(NULL == pWdaParams)
6486 {
6487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006488 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 VOS_ASSERT(0);
6490 vos_mem_free(wdiExitBmpsReqParams);
6491 return VOS_STATUS_E_NOMEM;
6492 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006494
6495 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6496
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6498
6499 /* Store param pointer as passed in by caller */
6500 /* store Params pass it to WDI */
6501 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6502 pWdaParams->pWdaContext = pWDA;
6503 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006504 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6505 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006506 if(IS_WDI_STATUS_FAILURE(status))
6507 {
6508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6509 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006510 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6511 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006512 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 return CONVERT_WDI2VOS_STATUS(status) ;
6515}
Jeff Johnson295189b2012-06-20 16:38:30 -07006516/*
6517 * FUNCTION: WDA_EnterUapsdReqCallback
6518 * send Enter UAPSD RSP back to PE
6519 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006520void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006521{
6522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6523 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006524 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006526 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 if(NULL == pWdaParams)
6528 {
6529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006531 VOS_ASSERT(0) ;
6532 return ;
6533 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006534
6535 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6536 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6537
6538 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6539 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6540
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6542 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006543 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006544 return ;
6545}
Jeff Johnson295189b2012-06-20 16:38:30 -07006546/*
6547 * FUNCTION: WDA_ProcessEnterUapsdReq
6548 * Request to WDI to Enter UAPSD power state.
6549 */
6550VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6551 tUapsdParams *pEnterUapsdReqParams)
6552{
6553 WDI_Status status = WDI_STATUS_SUCCESS ;
6554 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6555 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6556 sizeof(WDI_EnterUapsdReqParamsType)) ;
6557 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006560 if(NULL == wdiEnterUapsdReqParams)
6561 {
6562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006564 VOS_ASSERT(0);
6565 return VOS_STATUS_E_NOMEM;
6566 }
6567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6568 if(NULL == pWdaParams)
6569 {
6570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006571 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006572 VOS_ASSERT(0);
6573 vos_mem_free(wdiEnterUapsdReqParams);
6574 return VOS_STATUS_E_NOMEM;
6575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006576 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6577 pEnterUapsdReqParams->beDeliveryEnabled;
6578 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6579 pEnterUapsdReqParams->beTriggerEnabled;
6580 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6581 pEnterUapsdReqParams->bkDeliveryEnabled;
6582 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6583 pEnterUapsdReqParams->bkTriggerEnabled;
6584 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6585 pEnterUapsdReqParams->viDeliveryEnabled;
6586 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6587 pEnterUapsdReqParams->viTriggerEnabled;
6588 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6589 pEnterUapsdReqParams->voDeliveryEnabled;
6590 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6591 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006592 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006593
6594 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6595
Jeff Johnson295189b2012-06-20 16:38:30 -07006596 /* Store param pointer as passed in by caller */
6597 /* store Params pass it to WDI */
6598 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6599 pWdaParams->pWdaContext = pWDA;
6600 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006601 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6602 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006603 if(IS_WDI_STATUS_FAILURE(status))
6604 {
6605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6606 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6607 vos_mem_free(pWdaParams->wdaMsgParam) ;
6608 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6609 vos_mem_free(pWdaParams) ;
6610 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006611 return CONVERT_WDI2VOS_STATUS(status) ;
6612}
Jeff Johnson295189b2012-06-20 16:38:30 -07006613/*
6614 * FUNCTION: WDA_ExitUapsdReqCallback
6615 * send Exit UAPSD RSP back to PE
6616 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006617void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006618{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006619
6620 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6621 tWDA_CbContext *pWDA;
6622 tExitUapsdParams *pExitUapsdRspParams;
6623
Jeff Johnson295189b2012-06-20 16:38:30 -07006624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006625 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006626 if(NULL == pWdaParams)
6627 {
6628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006629 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006630 VOS_ASSERT(0);
6631 return;
6632 }
6633
6634 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6635 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6636
6637 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6638 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6639
6640 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6641 vos_mem_free(pWdaParams) ;
6642
6643 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006644 return ;
6645}
Jeff Johnson295189b2012-06-20 16:38:30 -07006646/*
6647 * FUNCTION: WDA_ProcessExitUapsdReq
6648 * Request to WDI to Exit UAPSD power state.
6649 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006650VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6651 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006652{
6653 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006654 tWDA_ReqParams *pWdaParams ;
6655 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6656 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6657 sizeof(WDI_ExitUapsdReqParamsType)) ;
6658
Jeff Johnson295189b2012-06-20 16:38:30 -07006659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006660 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006661
6662 if(NULL == wdiExitUapsdReqParams)
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006665 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006666 VOS_ASSERT(0);
6667 return VOS_STATUS_E_NOMEM;
6668 }
6669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6670 if(NULL == pWdaParams)
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006673 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006674 VOS_ASSERT(0);
6675 vos_mem_free(wdiExitUapsdReqParams);
6676 return VOS_STATUS_E_NOMEM;
6677 }
6678
6679 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6680 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6681
6682 /* Store param pointer as passed in by caller */
6683 /* store Params pass it to WDI */
6684 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6685 pWdaParams->pWdaContext = pWDA;
6686 pWdaParams->wdaMsgParam = pExitUapsdParams;
6687
6688 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006689 if(IS_WDI_STATUS_FAILURE(status))
6690 {
6691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6692 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006693 vos_mem_free(pWdaParams->wdaMsgParam) ;
6694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6695 vos_mem_free(pWdaParams) ;
6696
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006698 return CONVERT_WDI2VOS_STATUS(status) ;
6699}
6700
Jeff Johnson295189b2012-06-20 16:38:30 -07006701/*
6702 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6703 *
6704 */
6705void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6706{
6707 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006709 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006710 if(NULL == pWdaParams)
6711 {
6712 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006713 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006714 VOS_ASSERT(0) ;
6715 return ;
6716 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006717 if( pWdaParams != NULL )
6718 {
6719 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6720 {
6721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6722 }
6723 if( pWdaParams->wdaMsgParam != NULL )
6724 {
6725 vos_mem_free(pWdaParams->wdaMsgParam) ;
6726 }
6727 vos_mem_free(pWdaParams) ;
6728 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 return ;
6730}
Jeff Johnson295189b2012-06-20 16:38:30 -07006731/*
6732 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6733 * Request to WDI to set the power save params at start.
6734 */
6735VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6736 tSirPowerSaveCfg *pPowerSaveCfg)
6737{
6738 WDI_Status status = WDI_STATUS_SUCCESS ;
6739 tHalCfg *tlvStruct = NULL ;
6740 tANI_U8 *tlvStructStart = NULL ;
6741 v_PVOID_t *configParam;
6742 tANI_U32 configParamSize;
6743 tANI_U32 *configDataValue;
6744 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6745 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006747 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006748 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6749 {
6750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006751 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006752 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006753 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 return VOS_STATUS_E_FAILURE;
6755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6757 if (NULL == wdiPowerSaveCfg)
6758 {
6759 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006760 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006762 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 return VOS_STATUS_E_NOMEM;
6764 }
6765 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6766 if(NULL == pWdaParams)
6767 {
6768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006769 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 VOS_ASSERT(0);
6771 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006772 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006773 return VOS_STATUS_E_NOMEM;
6774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006775 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6776 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 if(NULL == configParam)
6778 {
6779 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006780 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006781 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006782 vos_mem_free(pWdaParams);
6783 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006784 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006785 return VOS_STATUS_E_NOMEM;
6786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006787 vos_mem_set(configParam, configParamSize, 0);
6788 wdiPowerSaveCfg->pConfigBuffer = configParam;
6789 tlvStruct = (tHalCfg *)configParam;
6790 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006791 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6792 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6793 tlvStruct->length = sizeof(tANI_U32);
6794 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6795 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006796 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6797 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006798 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6799 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6800 tlvStruct->length = sizeof(tANI_U32);
6801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6802 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6804 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006805 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6806 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6807 tlvStruct->length = sizeof(tANI_U32);
6808 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6809 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006810 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6811 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006812 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6813 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6814 tlvStruct->length = sizeof(tANI_U32);
6815 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6816 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6818 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006819 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6820 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6821 tlvStruct->length = sizeof(tANI_U32);
6822 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6823 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006824 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6825 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006826 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6827 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6828 tlvStruct->length = sizeof(tANI_U32);
6829 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6830 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6832 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006833 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6834 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6835 tlvStruct->length = sizeof(tANI_U32);
6836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6837 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006838 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6839 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006840 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6841 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6842 tlvStruct->length = sizeof(tANI_U32);
6843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6844 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6845 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6846 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006847 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6848 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6849 tlvStruct->length = sizeof(tANI_U32);
6850 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6851 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006854 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6855 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6856 tlvStruct->length = sizeof(tANI_U32);
6857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6858 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6860 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006861 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6862 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6863 tlvStruct->length = sizeof(tANI_U32);
6864 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6865 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006866 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6867 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006869 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006870 /* store Params pass it to WDI */
6871 pWdaParams->wdaMsgParam = configParam;
6872 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6873 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006874 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6875 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006876 if(IS_WDI_STATUS_FAILURE(status))
6877 {
6878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6879 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6880 vos_mem_free(pWdaParams->wdaMsgParam);
6881 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6882 vos_mem_free(pWdaParams);
6883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006885 return CONVERT_WDI2VOS_STATUS(status);
6886}
Jeff Johnson295189b2012-06-20 16:38:30 -07006887/*
6888 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6889 *
6890 */
6891void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6892{
6893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6897 vos_mem_free(pWdaParams);
6898
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 return ;
6900}
Jeff Johnson295189b2012-06-20 16:38:30 -07006901/*
6902 * FUNCTION: WDA_SetUapsdAcParamsReq
6903 * Request to WDI to set the UAPSD params for an ac (sta mode).
6904 */
6905VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6906 tUapsdInfo *pUapsdInfo)
6907{
6908 WDI_Status status = WDI_STATUS_SUCCESS;
6909 tWDA_CbContext *pWDA = NULL ;
6910 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6911 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6912 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6913 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006916 if(NULL == wdiUapsdParams)
6917 {
6918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006919 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 VOS_ASSERT(0);
6921 return VOS_STATUS_E_NOMEM;
6922 }
6923 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6924 if(NULL == pWdaParams)
6925 {
6926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 VOS_ASSERT(0);
6929 vos_mem_free(wdiUapsdParams);
6930 return VOS_STATUS_E_NOMEM;
6931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006932 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6933 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6934 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6935 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6936 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6937 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006939 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006940 pWdaParams->pWdaContext = pWDA;
6941 /* Store param pointer as passed in by caller */
6942 pWdaParams->wdaMsgParam = pUapsdInfo;
6943 /* store Params pass it to WDI */
6944 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006945 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6946 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6947 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006948 if(IS_WDI_STATUS_FAILURE(status))
6949 {
6950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6951 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6952 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6953 vos_mem_free(pWdaParams);
6954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006955 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6956 return VOS_STATUS_SUCCESS;
6957 else
6958 return VOS_STATUS_E_FAILURE;
6959
Jeff Johnson295189b2012-06-20 16:38:30 -07006960}
6961/*
6962 * FUNCTION: WDA_ClearUapsdAcParamsReq
6963 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6964 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6965 * and again enter the UPASD with the modified params. Hence the disable
6966 * function was kept empty.
6967 *
6968 */
6969VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6970{
6971 /* do nothing */
6972 return VOS_STATUS_SUCCESS;
6973}
Jeff Johnson295189b2012-06-20 16:38:30 -07006974/*
6975 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6976 *
6977 */
6978void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6979{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6981
Jeff Johnson295189b2012-06-20 16:38:30 -07006982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006983 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006984
6985 if(NULL == pWdaParams)
6986 {
6987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006988 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006989 VOS_ASSERT(0) ;
6990 return ;
6991 }
6992
6993 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6994 vos_mem_free(pWdaParams->wdaMsgParam);
6995 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006996
Jeff Johnson295189b2012-06-20 16:38:30 -07006997 //print a msg, nothing else to do
6998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6999 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007000 return ;
7001}
Jeff Johnson295189b2012-06-20 16:38:30 -07007002/*
7003 * FUNCTION: WDA_UpdateUapsdParamsReq
7004 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7005 */
7006VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
7007 tUpdateUapsdParams* pUpdateUapsdInfo)
7008{
7009 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007010 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007011 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
7012 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
7013 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007014 tWDA_ReqParams *pWdaParams = NULL;
7015
Jeff Johnson295189b2012-06-20 16:38:30 -07007016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007018 if(NULL == wdiUpdateUapsdParams)
7019 {
7020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 VOS_ASSERT(0);
7023 return VOS_STATUS_E_NOMEM;
7024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007025 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7026 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7027 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007028
7029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7030 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007031 {
7032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007034 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007035 vos_mem_free(pUpdateUapsdInfo);
7036 vos_mem_free(wdiUpdateUapsdParams);
7037 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007039 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007040 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007041 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007042 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7043 pWdaParams->pWdaContext = pWDA;
7044
Jeff Johnson43971f52012-07-17 12:26:56 -07007045 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007046 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7047 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007048
Jeff Johnson43971f52012-07-17 12:26:56 -07007049 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 {
7051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7052 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007053 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7055 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007056 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007058 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007059}
Jeff Johnson295189b2012-06-20 16:38:30 -07007060/*
7061 * FUNCTION: WDA_ConfigureRxpFilterCallback
7062 *
7063 */
7064void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7065{
7066 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007068 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007069 if(WDI_STATUS_SUCCESS != wdiStatus)
7070 {
7071 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007072 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007074 if(NULL == pWdaParams)
7075 {
7076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 VOS_ASSERT(0) ;
7079 return ;
7080 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007081 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7082 vos_mem_free(pWdaParams->wdaMsgParam);
7083 vos_mem_free(pWdaParams);
7084 return ;
7085}
Jeff Johnson295189b2012-06-20 16:38:30 -07007086/*
7087 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7088 *
7089 */
7090VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7091 tSirWlanSetRxpFilters *pWlanSuspendParam)
7092{
Jeff Johnson295189b2012-06-20 16:38:30 -07007093 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007094 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007095 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7096 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7097 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7098 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007100 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 if(NULL == wdiRxpFilterParams)
7102 {
7103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007104 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007105 VOS_ASSERT(0);
7106 vos_mem_free(pWlanSuspendParam);
7107 return VOS_STATUS_E_NOMEM;
7108 }
7109 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7110 if(NULL == pWdaParams)
7111 {
7112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007113 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007114 VOS_ASSERT(0);
7115 vos_mem_free(wdiRxpFilterParams);
7116 vos_mem_free(pWlanSuspendParam);
7117 return VOS_STATUS_E_NOMEM;
7118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7120 pWlanSuspendParam->setMcstBcstFilter;
7121 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7122 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7123
7124 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007125 pWdaParams->pWdaContext = pWDA;
7126 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7127 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007128 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7130 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007131 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007132 {
7133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7134 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007135 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007136 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7137 vos_mem_free(pWdaParams->wdaMsgParam);
7138 vos_mem_free(pWdaParams);
7139 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007140 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007141}
Jeff Johnson295189b2012-06-20 16:38:30 -07007142/*
7143 * FUNCTION: WDA_WdiIndicationCallback
7144 *
7145 */
7146void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7147 void* pUserData)
7148{
7149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151}
Jeff Johnson295189b2012-06-20 16:38:30 -07007152/*
7153 * FUNCTION: WDA_ProcessWlanSuspendInd
7154 *
7155 */
7156VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7157 tSirWlanSuspendParam *pWlanSuspendParam)
7158{
7159 WDI_Status wdiStatus;
7160 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007162 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7164 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7165 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7166 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007168 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7169 if(WDI_STATUS_PENDING == wdiStatus)
7170 {
7171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007172 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007173 }
7174 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7175 {
7176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007177 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007179 vos_mem_free(pWlanSuspendParam);
7180 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7181}
7182
Jeff Johnson295189b2012-06-20 16:38:30 -07007183/*
7184 * FUNCTION: WDA_ProcessWlanResumeCallback
7185 *
7186 */
7187void WDA_ProcessWlanResumeCallback(
7188 WDI_SuspendResumeRspParamsType *resumeRspParams,
7189 void* pUserData)
7190{
7191 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007193 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007194 if(NULL == pWdaParams)
7195 {
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007197 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007198 VOS_ASSERT(0) ;
7199 return ;
7200 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007201 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7202 {
7203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007204 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7207 vos_mem_free(pWdaParams->wdaMsgParam);
7208 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007209 return ;
7210}
Jeff Johnson295189b2012-06-20 16:38:30 -07007211/*
7212 * FUNCTION: WDA_ProcessWlanResumeReq
7213 *
7214 */
7215VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7216 tSirWlanResumeParam *pWlanResumeParam)
7217{
7218 WDI_Status wdiStatus;
7219 WDI_ResumeParamsType *wdiResumeParams =
7220 (WDI_ResumeParamsType *)vos_mem_malloc(
7221 sizeof(WDI_ResumeParamsType) ) ;
7222 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007224 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007225 if(NULL == wdiResumeParams)
7226 {
7227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007228 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007229 VOS_ASSERT(0);
7230 return VOS_STATUS_E_NOMEM;
7231 }
7232 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7233 if(NULL == pWdaParams)
7234 {
7235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007236 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 VOS_ASSERT(0);
7238 vos_mem_free(wdiResumeParams);
7239 return VOS_STATUS_E_NOMEM;
7240 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007241 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7242 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007244 wdiResumeParams->wdiReqStatusCB = NULL;
7245 pWdaParams->wdaMsgParam = pWlanResumeParam;
7246 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7247 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007248 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7249 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7250 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007251 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7252 {
7253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7254 "Failure in Host Resume REQ WDI API, free all the memory " );
7255 VOS_ASSERT(0);
7256 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7257 vos_mem_free(pWdaParams->wdaMsgParam);
7258 vos_mem_free(pWdaParams);
7259 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007260 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7261}
7262
Jeff Johnson295189b2012-06-20 16:38:30 -07007263/*
7264 * FUNCTION: WDA_SetBeaconFilterReqCallback
7265 *
7266 */
7267void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7268{
7269 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007271 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007272 if(NULL == pWdaParams)
7273 {
7274 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007275 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007276 VOS_ASSERT(0) ;
7277 return ;
7278 }
7279
7280 vos_mem_free(pWdaParams->wdaMsgParam) ;
7281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7282 vos_mem_free(pWdaParams) ;
7283 /*
7284 * No respone required for SetBeaconFilter req so just free the request
7285 * param here
7286 */
7287
Jeff Johnson295189b2012-06-20 16:38:30 -07007288 return ;
7289}
Jeff Johnson295189b2012-06-20 16:38:30 -07007290/*
7291 * FUNCTION: WDA_SetBeaconFilterReq
7292 * Request to WDI to send the beacon filtering related information.
7293 */
7294VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7295 tBeaconFilterMsg* pBeaconFilterInfo)
7296{
7297 WDI_Status status = WDI_STATUS_SUCCESS;
7298 tANI_U8 *dstPtr, *srcPtr;
7299 tANI_U8 filterLength;
7300 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7301 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7302 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7303 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007305 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007306 if(NULL == wdiBeaconFilterInfo)
7307 {
7308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007309 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007310 VOS_ASSERT(0);
7311 return VOS_STATUS_E_NOMEM;
7312 }
7313 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7314 if(NULL == pWdaParams)
7315 {
7316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007317 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007318 VOS_ASSERT(0);
7319 vos_mem_free(wdiBeaconFilterInfo);
7320 return VOS_STATUS_E_NOMEM;
7321 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007322 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7323 pBeaconFilterInfo->beaconInterval;
7324 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7325 pBeaconFilterInfo->capabilityInfo;
7326 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7327 pBeaconFilterInfo->capabilityMask;
7328 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007329
7330 //Fill the BssIdx
7331 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7332
Jeff Johnson295189b2012-06-20 16:38:30 -07007333 //Fill structure with info contained in the beaconFilterTable
7334 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7335 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7336 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7337 if(WDI_BEACON_FILTER_LEN < filterLength)
7338 {
7339 filterLength = WDI_BEACON_FILTER_LEN;
7340 }
7341 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7343 /* Store param pointer as passed in by caller */
7344 /* store Params pass it to WDI */
7345 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7346 pWdaParams->pWdaContext = pWDA;
7347 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7348
Jeff Johnson295189b2012-06-20 16:38:30 -07007349 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7350 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007351 if(IS_WDI_STATUS_FAILURE(status))
7352 {
7353 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7354 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7355 vos_mem_free(pWdaParams->wdaMsgParam) ;
7356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7357 vos_mem_free(pWdaParams) ;
7358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 return CONVERT_WDI2VOS_STATUS(status) ;
7360}
Jeff Johnson295189b2012-06-20 16:38:30 -07007361/*
7362 * FUNCTION: WDA_RemBeaconFilterReqCallback
7363 *
7364 */
7365void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7366{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007367 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7368
Jeff Johnson295189b2012-06-20 16:38:30 -07007369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007370 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007371
7372 if(NULL == pWdaParams)
7373 {
7374 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007375 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007376 VOS_ASSERT(0) ;
7377 return ;
7378 }
7379
7380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7381 vos_mem_free(pWdaParams->wdaMsgParam);
7382 vos_mem_free(pWdaParams);
7383
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 //print a msg, nothing else to do
7385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7386 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007387 return ;
7388}
Jeff Johnson295189b2012-06-20 16:38:30 -07007389 // TODO: PE does not have this feature for now implemented,
7390 // but the support for removing beacon filter exists between
7391 // HAL and FW. This function can be called whenever PE defines
7392 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007393/*
7394 * FUNCTION: WDA_RemBeaconFilterReq
7395 * Request to WDI to send the removal of beacon filtering related information.
7396 */
7397VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7398 tRemBeaconFilterMsg* pBeaconFilterInfo)
7399{
7400 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007401 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007402 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7403 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7404 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007405 tWDA_ReqParams *pWdaParams ;
7406
Jeff Johnson295189b2012-06-20 16:38:30 -07007407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007408 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 if(NULL == wdiBeaconFilterInfo)
7410 {
7411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007413 VOS_ASSERT(0);
7414 return VOS_STATUS_E_NOMEM;
7415 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7417 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 //Fill structure with info contained in the ucRemIeId
7419 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7420 pBeaconFilterInfo->ucRemIeId,
7421 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7422 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007423
7424 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7425 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 {
7427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007428 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007429 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007430 vos_mem_free(wdiBeaconFilterInfo);
7431 vos_mem_free(pBeaconFilterInfo);
7432 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007433 }
7434
7435 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007436 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007437 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007438 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7439
7440 pWdaParams->pWdaContext = pWDA;
7441
Jeff Johnson43971f52012-07-17 12:26:56 -07007442 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007443 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007444 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 {
7446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7447 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007448 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007449 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7450 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007451 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007453 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007454}
Jeff Johnson295189b2012-06-20 16:38:30 -07007455/*
7456 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7457 *
7458 */
7459void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7460{
7461 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007463 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 if(NULL == pWdaParams)
7465 {
7466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007467 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 VOS_ASSERT(0) ;
7469 return ;
7470 }
7471
7472 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7473 vos_mem_free(pWdaParams) ;
7474
Jeff Johnson295189b2012-06-20 16:38:30 -07007475 return ;
7476}
Jeff Johnson295189b2012-06-20 16:38:30 -07007477/*
7478 * FUNCTION: WDA_SetRSSIThresholdsReq
7479 * Request to WDI to set the RSSI thresholds (sta mode).
7480 */
7481VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7482{
7483 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007484 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 tWDA_CbContext *pWDA = NULL ;
7486 v_PVOID_t pVosContext = NULL;
7487 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7488 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7489 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7490 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007492 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 if(NULL == wdiRSSIThresholdsInfo)
7494 {
7495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007496 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007497 VOS_ASSERT(0);
7498 return VOS_STATUS_E_NOMEM;
7499 }
7500 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7501 if(NULL == pWdaParams)
7502 {
7503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007505 VOS_ASSERT(0);
7506 vos_mem_free(wdiRSSIThresholdsInfo);
7507 return VOS_STATUS_E_NOMEM;
7508 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007509 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7511 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7512 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7514 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7515 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007516 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7517 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7518 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007519 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007520 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7521 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7522
Jeff Johnson295189b2012-06-20 16:38:30 -07007523 /* Store param pointer as passed in by caller */
7524 /* store Params pass it to WDI */
7525 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7526 pWdaParams->pWdaContext = pWDA;
7527 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007528 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007529 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007530 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007531 {
7532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7533 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007534 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7536 vos_mem_free(pWdaParams) ;
7537 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007538 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007539
7540}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007541/*
7542 * FUNCTION: WDA_HostOffloadReqCallback
7543 *
7544 */
7545void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7546{
7547 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7548
7549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007550 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007551 if(NULL == pWdaParams)
7552 {
7553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007554 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007555 VOS_ASSERT(0) ;
7556 return ;
7557 }
7558
7559 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7560 vos_mem_free(pWdaParams->wdaMsgParam);
7561 vos_mem_free(pWdaParams) ;
7562
7563 //print a msg, nothing else to do
7564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7565 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007566 return ;
7567}
Jeff Johnson295189b2012-06-20 16:38:30 -07007568/*
7569 * FUNCTION: WDA_ProcessHostOffloadReq
7570 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7571 * to broadcast traffic (sta mode).
7572 */
7573VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7574 tSirHostOffloadReq *pHostOffloadParams)
7575{
7576 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007577 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007578 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7579 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7580 sizeof(WDI_HostOffloadReqParamsType)) ;
7581 tWDA_ReqParams *pWdaParams ;
7582
7583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007584 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007585
7586 if(NULL == wdiHostOffloadInfo)
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007589 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007590 VOS_ASSERT(0);
7591 return VOS_STATUS_E_NOMEM;
7592 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7594 if(NULL == pWdaParams)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007598 VOS_ASSERT(0);
7599 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007600 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007601 return VOS_STATUS_E_NOMEM;
7602 }
7603
7604 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7605 pHostOffloadParams->offloadType;
7606 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7607 pHostOffloadParams->enableOrDisable;
7608
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007609 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7610 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7611
Jeff Johnson295189b2012-06-20 16:38:30 -07007612 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7613 {
7614 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7615 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7616 pHostOffloadParams->params.hostIpv4Addr,
7617 4);
7618 break;
7619 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7620 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7621 pHostOffloadParams->params.hostIpv6Addr,
7622 16);
7623 break;
7624 case SIR_IPV6_NS_OFFLOAD:
7625 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7626 pHostOffloadParams->params.hostIpv6Addr,
7627 16);
7628
7629#ifdef WLAN_NS_OFFLOAD
7630 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7631 {
7632 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7633 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7634 16);
7635 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7636 }
7637 else
7638 {
7639 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7640 }
7641
7642 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7643 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7644 16);
7645 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7646 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7647 6);
7648
7649 //Only two are supported so let's go through them without a loop
7650 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7651 {
7652 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7653 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7654 16);
7655 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7656 }
7657 else
7658 {
7659 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7660 }
7661
7662 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7663 {
7664 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7665 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7666 16);
7667 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7668 }
7669 else
7670 {
7671 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7672 }
7673 break;
7674#endif //WLAN_NS_OFFLOAD
7675 default:
7676 {
7677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7678 "No Handling for Offload Type %x in WDA "
7679 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7680 //WDA_VOS_ASSERT(0) ;
7681 }
7682 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007684
Jeff Johnson295189b2012-06-20 16:38:30 -07007685 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007686 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007687 /* store Params pass it to WDI */
7688 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7689 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007690
Jeff Johnson295189b2012-06-20 16:38:30 -07007691
Jeff Johnson43971f52012-07-17 12:26:56 -07007692 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007693 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7694
Jeff Johnson43971f52012-07-17 12:26:56 -07007695 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 {
7697 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7698 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007699 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7701 vos_mem_free(pWdaParams->wdaMsgParam);
7702 vos_mem_free(pWdaParams) ;
7703 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007704 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007705
7706}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007707/*
7708 * FUNCTION: WDA_KeepAliveReqCallback
7709 *
7710 */
7711void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7712{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7714
Jeff Johnson295189b2012-06-20 16:38:30 -07007715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007716 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007717
7718 if(NULL == pWdaParams)
7719 {
7720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007721 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007722 VOS_ASSERT(0) ;
7723 return ;
7724 }
7725
7726 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7727 vos_mem_free(pWdaParams->wdaMsgParam);
7728 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007729
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 //print a msg, nothing else to do
7731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7732 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 return ;
7734}
Jeff Johnson295189b2012-06-20 16:38:30 -07007735/*
7736 * FUNCTION: WDA_ProcessKeepAliveReq
7737 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7738 * wakeup due to broadcast traffic (sta mode).
7739 */
7740VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7741 tSirKeepAliveReq *pKeepAliveParams)
7742{
7743 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007744 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007745 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7746 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7747 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007748 tWDA_ReqParams *pWdaParams;
7749
Jeff Johnson295189b2012-06-20 16:38:30 -07007750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007751 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 if(NULL == wdiKeepAliveInfo)
7753 {
7754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007755 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007757 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 return VOS_STATUS_E_NOMEM;
7759 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007760
7761 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7762 if(NULL == pWdaParams)
7763 {
7764 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007765 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007766 VOS_ASSERT(0);
7767 vos_mem_free(wdiKeepAliveInfo);
7768 vos_mem_free(pKeepAliveParams);
7769 return VOS_STATUS_E_NOMEM;
7770 }
7771
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7773 pKeepAliveParams->packetType;
7774 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7775 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007776
7777 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7778 pKeepAliveParams->bssId,
7779 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007780
7781 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7782 {
7783 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7784 pKeepAliveParams->hostIpv4Addr,
7785 SIR_IPV4_ADDR_LEN);
7786 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7787 pKeepAliveParams->destIpv4Addr,
7788 SIR_IPV4_ADDR_LEN);
7789 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7790 pKeepAliveParams->destMacAddr,
7791 SIR_MAC_ADDR_LEN);
7792 }
7793 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7794 {
7795 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7796 SIR_IPV4_ADDR_LEN,
7797 0);
7798 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7799 SIR_IPV4_ADDR_LEN,
7800 0);
7801 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7802 SIR_MAC_ADDR_LEN,
7803 0);
7804 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007805 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007806
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007808 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007810 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7811 pWdaParams->pWdaContext = pWDA;
7812
Jeff Johnson295189b2012-06-20 16:38:30 -07007813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7814 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7815 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7816 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7817 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7819 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7820 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7821 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7822 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7824 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7825 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7826 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7827 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7828 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7829 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7830 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7832 "TimePeriod %d PacketType %d",
7833 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7834 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007835 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007836 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7837
Jeff Johnson43971f52012-07-17 12:26:56 -07007838 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007839 {
7840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7841 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007842 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007843 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7844 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007845 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007846 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007847 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007848
7849}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007850/*
7851 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7852 *
7853 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007854void WDA_WowlAddBcPtrnReqCallback(
7855 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7856 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007857{
7858 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007859 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007860 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007861 if(NULL == pWdaParams)
7862 {
7863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007864 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 VOS_ASSERT(0) ;
7866 return ;
7867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7869 vos_mem_free(pWdaParams->wdaMsgParam);
7870 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 return ;
7872}
Jeff Johnson295189b2012-06-20 16:38:30 -07007873/*
7874 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7875 * Request to WDI to add WOWL Bcast pattern
7876 */
7877VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7878 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7879{
7880 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007881 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007882 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7883 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7884 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7885 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007886 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007887 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007888 if(NULL == wdiWowlAddBcPtrnInfo)
7889 {
7890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007891 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007892 VOS_ASSERT(0);
7893 return VOS_STATUS_E_NOMEM;
7894 }
7895 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7896 if(NULL == pWdaParams)
7897 {
7898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007899 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 VOS_ASSERT(0);
7901 vos_mem_free(wdiWowlAddBcPtrnInfo);
7902 return VOS_STATUS_E_NOMEM;
7903 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7905 pWowlAddBcPtrnParams->ucPatternId;
7906 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7907 pWowlAddBcPtrnParams->ucPatternByteOffset;
7908 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7909 pWowlAddBcPtrnParams->ucPatternMaskSize;
7910 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7911 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7913 {
7914 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7915 pWowlAddBcPtrnParams->ucPattern,
7916 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7917 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7918 pWowlAddBcPtrnParams->ucPatternMask,
7919 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7920 }
7921 else
7922 {
7923 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7924 pWowlAddBcPtrnParams->ucPattern,
7925 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7926 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7927 pWowlAddBcPtrnParams->ucPatternMask,
7928 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7929
7930 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7931 pWowlAddBcPtrnParams->ucPatternExt,
7932 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7933 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7934 pWowlAddBcPtrnParams->ucPatternMaskExt,
7935 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7936 }
7937
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007938 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7939 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7940
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 /* Store param pointer as passed in by caller */
7943 /* store Params pass it to WDI */
7944 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7945 pWdaParams->pWdaContext = pWDA;
7946 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007947 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007949 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007950 {
7951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7952 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007953 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007954 vos_mem_free(pWdaParams->wdaMsgParam) ;
7955 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7956 vos_mem_free(pWdaParams) ;
7957 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007958 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007959
7960}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007961/*
7962 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7963 *
7964 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007965void WDA_WowlDelBcPtrnReqCallback(
7966 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7967 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007968{
7969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007971 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007972 if(NULL == pWdaParams)
7973 {
7974 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007975 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 VOS_ASSERT(0) ;
7977 return ;
7978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7980 vos_mem_free(pWdaParams->wdaMsgParam);
7981 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 return ;
7983}
Jeff Johnson295189b2012-06-20 16:38:30 -07007984/*
7985 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7986 * Request to WDI to delete WOWL Bcast pattern
7987 */
7988VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7989 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7990{
7991 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007992 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007993 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7994 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7995 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7996 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007998 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007999 if(NULL == wdiWowlDelBcPtrnInfo)
8000 {
8001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008002 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008003 VOS_ASSERT(0);
8004 return VOS_STATUS_E_NOMEM;
8005 }
8006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8007 if(NULL == pWdaParams)
8008 {
8009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008010 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 VOS_ASSERT(0);
8012 vos_mem_free(wdiWowlDelBcPtrnInfo);
8013 return VOS_STATUS_E_NOMEM;
8014 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008015 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
8016 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008017
8018 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8019 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8020
Jeff Johnson295189b2012-06-20 16:38:30 -07008021 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008022 /* Store param pointer as passed in by caller */
8023 /* store Params pass it to WDI */
8024 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8025 pWdaParams->pWdaContext = pWDA;
8026 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008027 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008028 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008029 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 {
8031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8032 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008033 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 vos_mem_free(pWdaParams->wdaMsgParam) ;
8035 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8036 vos_mem_free(pWdaParams) ;
8037 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008038 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008039
8040}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008041/*
8042 * FUNCTION: WDA_WowlEnterReqCallback
8043 *
8044 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008045void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008046{
8047 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8048 tWDA_CbContext *pWDA;
8049 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008051 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 if(NULL == pWdaParams)
8053 {
8054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008055 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008056 VOS_ASSERT(0) ;
8057 return ;
8058 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008059 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8060 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8061
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008062 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8063
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8065 vos_mem_free(pWdaParams) ;
8066
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008067 pWowlEnterParams->status =
8068 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 return ;
8071}
Jeff Johnson295189b2012-06-20 16:38:30 -07008072/*
8073 * FUNCTION: WDA_ProcessWowlEnterReq
8074 * Request to WDI to enter WOWL
8075 */
8076VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8077 tSirHalWowlEnterParams *pWowlEnterParams)
8078{
8079 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008080 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008081 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8082 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8083 sizeof(WDI_WowlEnterReqParamsType)) ;
8084 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008086 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008087 if(NULL == wdiWowlEnterInfo)
8088 {
8089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 VOS_ASSERT(0);
8092 return VOS_STATUS_E_NOMEM;
8093 }
8094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8095 if(NULL == pWdaParams)
8096 {
8097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 VOS_ASSERT(0);
8100 vos_mem_free(wdiWowlEnterInfo);
8101 return VOS_STATUS_E_NOMEM;
8102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8104 pWowlEnterParams->magicPtrn,
8105 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8107 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008108 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8109 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008110 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8111 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8113 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008114 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8115 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008116 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8117 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8119 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8121 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008122#ifdef WLAN_WAKEUP_EVENTS
8123 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8124 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8125
8126 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8127 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8128
8129 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8130 pWowlEnterParams->ucWowNetScanOffloadMatch;
8131
8132 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8133 pWowlEnterParams->ucWowGTKRekeyError;
8134
8135 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8136 pWowlEnterParams->ucWoWBSSConnLoss;
8137#endif // WLAN_WAKEUP_EVENTS
8138
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008139 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8140 pWowlEnterParams->bssIdx;
8141
Jeff Johnson295189b2012-06-20 16:38:30 -07008142 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143 /* Store param pointer as passed in by caller */
8144 /* store Params pass it to WDI */
8145 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8146 pWdaParams->pWdaContext = pWDA;
8147 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008148 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008149 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008150 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008151 {
8152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8153 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008154 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008155 vos_mem_free(pWdaParams->wdaMsgParam) ;
8156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8157 vos_mem_free(pWdaParams) ;
8158 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008159 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008160
8161}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008162/*
8163 * FUNCTION: WDA_WowlExitReqCallback
8164 *
8165 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008166void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008167{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008168 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8169 tWDA_CbContext *pWDA;
8170 tSirHalWowlExitParams *pWowlExitParams;
8171 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008172 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008173 if(NULL == pWdaParams)
8174 {
8175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008176 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008177 VOS_ASSERT(0) ;
8178 return ;
8179 }
8180 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8181 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8182
8183 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8184 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8185
8186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8187 vos_mem_free(pWdaParams) ;
8188
Jeff Johnson295189b2012-06-20 16:38:30 -07008189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008190 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008191 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008192 return ;
8193}
Jeff Johnson295189b2012-06-20 16:38:30 -07008194/*
8195 * FUNCTION: WDA_ProcessWowlExitReq
8196 * Request to WDI to add WOWL Bcast pattern
8197 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008198VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8199 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008200{
8201 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008202 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008203 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8204 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8205 sizeof(WDI_WowlExitReqParamsType)) ;
8206 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008208 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008209 if(NULL == wdiWowlExitInfo)
8210 {
8211 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008212 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008213 VOS_ASSERT(0);
8214 return VOS_STATUS_E_NOMEM;
8215 }
8216 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8217 if(NULL == pWdaParams)
8218 {
8219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008220 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008221 VOS_ASSERT(0);
8222 vos_mem_free(wdiWowlExitInfo);
8223 return VOS_STATUS_E_NOMEM;
8224 }
8225
8226 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8227 pWowlExitParams->bssIdx;
8228
8229 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8230
8231 /* Store param pointer as passed in by caller */
8232 /* store Params pass it to WDI */
8233 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8234 pWdaParams->pWdaContext = pWDA;
8235 pWdaParams->wdaMsgParam = pWowlExitParams;
8236
8237 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8238 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008239
Jeff Johnson43971f52012-07-17 12:26:56 -07008240 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008241 {
8242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8243 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008244 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008245 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8246 vos_mem_free(pWdaParams->wdaMsgParam);
8247 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008248 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008249 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008250}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008251/*
8252 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8253 * Request to WDI to determine whether a given station is capable of
8254 * using HW-based frame translation
8255 */
8256v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8257 tANI_U8 staIdx)
8258{
8259 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8260}
Jeff Johnson295189b2012-06-20 16:38:30 -07008261/*
8262 * FUNCTION: WDA_NvDownloadReqCallback
8263 * send NV Download RSP back to PE
8264 */
8265void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8266 void* pUserData)
8267{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008268
8269 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8270 tWDA_CbContext *pWDA;
8271
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008273 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008274
8275 if(NULL == pWdaParams)
8276 {
8277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008278 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008279 VOS_ASSERT(0) ;
8280 return ;
8281 }
8282
8283 pWDA = pWdaParams->pWdaContext;
8284
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8287 vos_mem_free(pWdaParams);
8288
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008290 return ;
8291}
Jeff Johnson295189b2012-06-20 16:38:30 -07008292/*
8293 * FUNCTION: WDA_ProcessNvDownloadReq
8294 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8295 */
8296VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8297{
8298 /* Initialize the local Variables*/
8299 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8300 v_VOID_t *pNvBuffer=NULL;
8301 v_SIZE_t bufferSize = 0;
8302 WDI_Status status = WDI_STATUS_E_FAILURE;
8303 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008304 tWDA_ReqParams *pWdaParams ;
8305
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008307 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 if(NULL == pWDA)
8309 {
8310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008311 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008312 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 return VOS_STATUS_E_FAILURE;
8314 }
8315
8316 /* Get the NV structure base address and size from VOS */
8317 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008318 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8319 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 if(NULL == wdiNvDownloadReqParam)
8321 {
8322 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008323 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 VOS_ASSERT(0);
8325 return VOS_STATUS_E_NOMEM;
8326 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 /* Copy Params to wdiNvDownloadReqParam*/
8328 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8329 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008330
8331 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8332 if(NULL == pWdaParams)
8333 {
8334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008335 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008336 VOS_ASSERT(0);
8337 vos_mem_free(wdiNvDownloadReqParam);
8338 return VOS_STATUS_E_NOMEM;
8339 }
8340
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008342 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8343 pWdaParams->wdaMsgParam = NULL;
8344 pWdaParams->pWdaContext = pWDA;
8345
8346
Jeff Johnson295189b2012-06-20 16:38:30 -07008347 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008348
Jeff Johnson295189b2012-06-20 16:38:30 -07008349 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008350 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8351
Jeff Johnson295189b2012-06-20 16:38:30 -07008352 if(IS_WDI_STATUS_FAILURE(status))
8353 {
8354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8355 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008356 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8357 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008359 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008360}
8361/*
8362 * FUNCTION: WDA_FlushAcReqCallback
8363 * send Flush AC RSP back to TL
8364 */
8365void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8366{
8367 vos_msg_t wdaMsg = {0} ;
8368 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8369 tFlushACReq *pFlushACReqParams;
8370 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008372 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008373 if(NULL == pWdaParams)
8374 {
8375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008376 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008377 VOS_ASSERT(0) ;
8378 return ;
8379 }
8380
8381 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8382 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8383 if(NULL == pFlushACRspParams)
8384 {
8385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008387 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008388 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008389 return ;
8390 }
8391 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8392 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8393 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8394 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8395 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8396 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008397 vos_mem_free(pWdaParams->wdaMsgParam) ;
8398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8399 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008400 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8401 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8402 // POST message to TL
8403 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 return ;
8406}
Jeff Johnson295189b2012-06-20 16:38:30 -07008407/*
8408 * FUNCTION: WDA_ProcessFlushAcReq
8409 * Request to WDI to Update the DELBA REQ params.
8410 */
8411VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8412 tFlushACReq *pFlushAcReqParams)
8413{
8414 WDI_Status status = WDI_STATUS_SUCCESS ;
8415 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8416 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8417 sizeof(WDI_FlushAcReqParamsType)) ;
8418 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 if(NULL == wdiFlushAcReqParam)
8420 {
8421 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008422 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008423 VOS_ASSERT(0);
8424 return VOS_STATUS_E_NOMEM;
8425 }
8426 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8427 if(NULL == pWdaParams)
8428 {
8429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008430 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 VOS_ASSERT(0);
8432 vos_mem_free(wdiFlushAcReqParam);
8433 return VOS_STATUS_E_NOMEM;
8434 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008436 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8438 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8439 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8440 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008441 /* Store Flush AC pointer, as this will be used for response */
8442 /* store Params pass it to WDI */
8443 pWdaParams->pWdaContext = pWDA;
8444 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8445 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008446 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8447 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008448 if(IS_WDI_STATUS_FAILURE(status))
8449 {
8450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8451 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8452 vos_mem_free(pWdaParams->wdaMsgParam) ;
8453 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8454 vos_mem_free(pWdaParams) ;
8455 //TODO: respond to TL with failure
8456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008458}
Jeff Johnson295189b2012-06-20 16:38:30 -07008459/*
8460 * FUNCTION: WDA_BtAmpEventReqCallback
8461 *
8462 */
8463void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8464{
8465 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8466 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008467 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008468
8469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008470 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008471 if(NULL == pWdaParams)
8472 {
8473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008474 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 VOS_ASSERT(0) ;
8476 return ;
8477 }
8478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8479 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8480 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8481 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8482 {
8483 pWDA->wdaAmpSessionOn = VOS_FALSE;
8484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008485 vos_mem_free(pWdaParams->wdaMsgParam) ;
8486 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8487 vos_mem_free(pWdaParams) ;
8488 /*
8489 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8490 * param here
8491 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 return ;
8493}
8494
Jeff Johnson295189b2012-06-20 16:38:30 -07008495/*
8496 * FUNCTION: WDA_ProcessBtAmpEventReq
8497 * Request to WDI to Update with BT AMP events.
8498 */
8499VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8500 tSmeBtAmpEvent *pBtAmpEventParams)
8501{
8502 WDI_Status status = WDI_STATUS_SUCCESS ;
8503 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8504 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8505 sizeof(WDI_BtAmpEventParamsType)) ;
8506 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008508 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008509 if(NULL == wdiBtAmpEventParam)
8510 {
8511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008513 VOS_ASSERT(0);
8514 return VOS_STATUS_E_NOMEM;
8515 }
8516 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8517 if(NULL == pWdaParams)
8518 {
8519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008520 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008521 VOS_ASSERT(0);
8522 vos_mem_free(wdiBtAmpEventParam);
8523 return VOS_STATUS_E_NOMEM;
8524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8526 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008527 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008528 /* Store BT AMP event pointer, as this will be used for response */
8529 /* store Params pass it to WDI */
8530 pWdaParams->pWdaContext = pWDA;
8531 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8532 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008533 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8534 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008535 if(IS_WDI_STATUS_FAILURE(status))
8536 {
8537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8538 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8539 vos_mem_free(pWdaParams->wdaMsgParam) ;
8540 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8541 vos_mem_free(pWdaParams) ;
8542 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8544 {
8545 pWDA->wdaAmpSessionOn = VOS_TRUE;
8546 }
8547 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008548}
8549
Jeff Johnson295189b2012-06-20 16:38:30 -07008550#ifdef ANI_MANF_DIAG
8551/*
8552 * FUNCTION: WDA_FTMCommandReqCallback
8553 * Handle FTM CMD response came from HAL
8554 * Route responce to HDD FTM
8555 */
8556void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8557 void *usrData)
8558{
8559 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008560 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8561 {
8562 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008563 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008564 return;
8565 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008566 /* Release Current FTM Command Request */
8567 vos_mem_free(pWDA->wdaFTMCmdReq);
8568 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008569#ifndef WLAN_FTM_STUB
8570 /* Post FTM Responce to HDD FTM */
8571 wlan_sys_ftm(ftmCmdRspData);
8572#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008573 return;
8574}
Jeff Johnson295189b2012-06-20 16:38:30 -07008575/*
8576 * FUNCTION: WDA_ProcessFTMCommand
8577 * Send FTM command to WDI
8578 */
8579VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8580 tPttMsgbuffer *pPTTFtmCmd)
8581{
8582 WDI_Status status = WDI_STATUS_SUCCESS;
8583 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008584 ftmCMDReq = (WDI_FTMCommandReqType *)
8585 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8586 if(NULL == ftmCMDReq)
8587 {
8588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8589 "WDA FTM Command buffer alloc fail");
8590 return VOS_STATUS_E_NOMEM;
8591 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8593 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008594 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 /* Send command to WDI */
8596 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 return status;
8598}
8599#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008600#ifdef FEATURE_OEM_DATA_SUPPORT
8601/*
8602 * FUNCTION: WDA_StartOemDataReqCallback
8603 *
8604 */
8605void WDA_StartOemDataReqCallback(
8606 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8607 void* pUserData)
8608{
8609 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008610 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8611 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008612 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008613
Jeff Johnsone7245742012-09-05 17:12:55 -07008614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008615 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008616
8617 if(NULL == pWdaParams)
8618 {
8619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008620 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621 VOS_ASSERT(0) ;
8622 return ;
8623 }
8624 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8625
Jeff Johnsone7245742012-09-05 17:12:55 -07008626 if(NULL == pWDA)
8627 {
8628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008629 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008630 VOS_ASSERT(0);
8631 return ;
8632 }
8633
8634 /*
8635 * Allocate memory for response params sent to PE
8636 */
8637 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8638
8639 // Check if memory is allocated for OemdataMeasRsp Params.
8640 if(NULL == pOemDataRspParams)
8641 {
8642 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8643 "OEM DATA WDA callback alloc fail");
8644 VOS_ASSERT(0) ;
8645 return;
8646 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008647
Jeff Johnsone7245742012-09-05 17:12:55 -07008648 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8650 vos_mem_free(pWdaParams->wdaMsgParam);
8651 vos_mem_free(pWdaParams) ;
8652
Jeff Johnsone7245742012-09-05 17:12:55 -07008653 /*
8654 * Now go ahead and copy other stuff for PE in incase of sucess only
8655 * Also, here success always means that we have atleast one BSSID.
8656 */
8657 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8658
8659 //enable Tx
8660 status = WDA_ResumeDataTx(pWDA);
8661 if(status != VOS_STATUS_SUCCESS)
8662 {
8663 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8664 }
8665 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8666 return ;
8667}
8668/*
8669 * FUNCTION: WDA_ProcessStartOemDataReq
8670 * Send Start Oem Data Req to WDI
8671 */
8672VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8673 tStartOemDataReq *pOemDataReqParams)
8674{
8675 WDI_Status status = WDI_STATUS_SUCCESS;
8676 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008677 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008678
8679 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8680
8681 if(NULL == wdiOemDataReqParams)
8682 {
8683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008684 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008685 VOS_ASSERT(0);
8686 return VOS_STATUS_E_NOMEM;
8687 }
8688
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008689 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8690 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8691 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8692 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008693
8694 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8695
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008696 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8697 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008698 {
8699 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008700 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008701 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008702 vos_mem_free(pOemDataReqParams);
8703 VOS_ASSERT(0);
8704 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008705 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008706
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008707 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8708 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8709
8710 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8711 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008712
8713 if(IS_WDI_STATUS_FAILURE(status))
8714 {
8715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8716 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008717 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8718 vos_mem_free(pWdaParams->wdaMsgParam);
8719 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008720 }
8721 return CONVERT_WDI2VOS_STATUS(status) ;
8722}
8723#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008724/*
8725 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8726 *
8727 */
8728void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8729{
8730 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008732 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 if(NULL == pWdaParams)
8734 {
8735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008736 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008737 VOS_ASSERT(0) ;
8738 return ;
8739 }
8740
8741 if(NULL != pWdaParams->wdaMsgParam)
8742 {
8743 vos_mem_free(pWdaParams->wdaMsgParam);
8744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008745 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8746 {
8747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8748 }
8749
8750 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 return ;
8752}
Jeff Johnson295189b2012-06-20 16:38:30 -07008753#ifdef WLAN_FEATURE_GTK_OFFLOAD
8754/*
8755 * FUNCTION: WDA_HostOffloadReqCallback
8756 *
8757 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008758void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8759 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008760{
8761 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8762
8763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008764 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008765
8766 VOS_ASSERT(NULL != pWdaParams);
8767
8768 vos_mem_free(pWdaParams->wdaMsgParam) ;
8769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8770 vos_mem_free(pWdaParams) ;
8771
8772 //print a msg, nothing else to do
8773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8774 "WDA_GTKOffloadReqCallback invoked " );
8775
8776 return ;
8777}
8778
8779/*
8780 * FUNCTION: WDA_ProcessGTKOffloadReq
8781 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8782 * to broadcast traffic (sta mode).
8783 */
8784VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8785 tpSirGtkOffloadParams pGtkOffloadParams)
8786{
8787 VOS_STATUS status = VOS_STATUS_SUCCESS;
8788 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8789 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8790 sizeof(WDI_GtkOffloadReqMsg)) ;
8791 tWDA_ReqParams *pWdaParams ;
8792
8793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008794 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008795
8796 if(NULL == wdiGtkOffloadReqMsg)
8797 {
8798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008799 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 VOS_ASSERT(0);
8801 return VOS_STATUS_E_NOMEM;
8802 }
8803
8804 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8805 if(NULL == pWdaParams)
8806 {
8807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008808 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008809 VOS_ASSERT(0);
8810 vos_mem_free(wdiGtkOffloadReqMsg);
8811 return VOS_STATUS_E_NOMEM;
8812 }
8813
8814 //
8815 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8816 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008817
8818 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8819 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8820
Jeff Johnson295189b2012-06-20 16:38:30 -07008821 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8822 // Copy KCK
8823 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8824 // Copy KEK
8825 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8826 // Copy KeyReplayCounter
8827 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8828 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8829
8830 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8831
8832 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8833 (NULL == pWDA->wdaWdiApiMsgParam));
8834
8835 /* Store Params pass it to WDI */
8836 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8837 pWdaParams->pWdaContext = pWDA;
8838 /* Store param pointer as passed in by caller */
8839 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8840
8841 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8842
8843 if(IS_WDI_STATUS_FAILURE(status))
8844 {
8845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8846 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8847 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8848 vos_mem_free(pWdaParams->wdaMsgParam);
8849 vos_mem_free(pWdaParams);
8850 }
8851
8852 return CONVERT_WDI2VOS_STATUS(status) ;
8853}
8854
8855/*
8856 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8857 *
8858 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008859void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8860 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008861{
8862 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8863 tWDA_CbContext *pWDA;
8864 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8865 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8866 tANI_U8 i;
8867 vos_msg_t vosMsg;
8868
8869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008870 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008871
8872 VOS_ASSERT(NULL != pWdaParams);
8873
8874 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8875 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8876
8877 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8878 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8879
8880 /* Message Header */
8881 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8882 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8883
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008884 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8885 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8886 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8887 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8888 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8889 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008890
8891 /* VOS message wrapper */
8892 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8893 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8894 vosMsg.bodyval = 0;
8895
8896 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8897 {
8898 /* free the mem and return */
8899 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8900 }
8901
8902 vos_mem_free(pWdaParams->wdaMsgParam) ;
8903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8904 vos_mem_free(pWdaParams) ;
8905}
8906#endif
8907
8908/*
8909 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8910 * Request to WDI to set Tx Per Tracking configurations
8911 */
8912VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8913{
8914 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008915 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008916 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8917 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8918 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8919 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 if(NULL == pwdiSetTxPerTrackingReqParams)
8923 {
8924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008926 vos_mem_free(pTxPerTrackingParams);
8927 VOS_ASSERT(0);
8928 return VOS_STATUS_E_NOMEM;
8929 }
8930 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8931 if(NULL == pWdaParams)
8932 {
8933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008934 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008935 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8936 vos_mem_free(pTxPerTrackingParams);
8937 VOS_ASSERT(0);
8938 return VOS_STATUS_E_NOMEM;
8939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008940 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8941 pTxPerTrackingParams->ucTxPerTrackingEnable;
8942 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8943 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8944 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8945 pTxPerTrackingParams->ucTxPerTrackingRatio;
8946 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8947 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008948 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008949 /* Store param pointer as passed in by caller */
8950 /* store Params pass it to WDI
8951 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8952 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8953 pWdaParams->pWdaContext = pWDA;
8954 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008955 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008956 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008957 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008958 {
8959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8960 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008961 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 vos_mem_free(pWdaParams->wdaMsgParam) ;
8963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8964 vos_mem_free(pWdaParams) ;
8965 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008966 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008967
8968}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008969/*
8970 * FUNCTION: WDA_HALDumpCmdCallback
8971 * Send the VOS complete .
8972 */
8973void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8974 void* pUserData)
8975{
8976 tANI_U8 *buffer = NULL;
8977 tWDA_CbContext *pWDA = NULL;
8978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008979 if(NULL == pWdaParams)
8980 {
8981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008982 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008983 VOS_ASSERT(0) ;
8984 return ;
8985 }
8986
8987 pWDA = pWdaParams->pWdaContext;
8988 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008989 if(wdiRspParams->usBufferLen > 0)
8990 {
8991 /*Copy the Resp data to UMAC supplied buffer*/
8992 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8993 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008994 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8995 vos_mem_free(pWdaParams);
8996
8997 /* Indicate VOSS about the start complete */
8998 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 return ;
9000}
9001
Jeff Johnson295189b2012-06-20 16:38:30 -07009002/*
9003 * FUNCTION: WDA_ProcessHALDumpCmdReq
9004 * Send Dump command to WDI
9005 */
9006VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
9007 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
9008 tANI_U32 arg4, tANI_U8 *pBuffer)
9009{
9010 WDI_Status status = WDI_STATUS_SUCCESS;
9011 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
9012 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
9013 tWDA_ReqParams *pWdaParams ;
9014 pVosContextType pVosContext = NULL;
9015 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009016 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9017 (void *)pMac);
9018
9019 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9020 if(NULL == pWdaParams)
9021 {
9022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009023 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 return VOS_STATUS_E_NOMEM;
9025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 /* Allocate memory WDI request structure*/
9027 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9028 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9029 if(NULL == wdiHALDumpCmdReqParam)
9030 {
9031 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9032 "WDA HAL DUMP Command buffer alloc fail");
9033 vos_mem_free(pWdaParams);
9034 return WDI_STATUS_E_FAILURE;
9035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 /* Extract the arguments */
9038 wdiHalDumpCmdInfo->command = cmd;
9039 wdiHalDumpCmdInfo->argument1 = arg1;
9040 wdiHalDumpCmdInfo->argument2 = arg2;
9041 wdiHalDumpCmdInfo->argument3 = arg3;
9042 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009044 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9045
9046 /* Response message will be passed through the buffer */
9047 pWdaParams->wdaMsgParam = (void *)pBuffer;
9048
9049 /* store Params pass it to WDI */
9050 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 /* Send command to WDI */
9052 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009053 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 if ( vStatus != VOS_STATUS_SUCCESS )
9055 {
9056 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9057 {
9058 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009059 "%s: Timeout occured before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009060 }
9061 else
9062 {
9063 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009064 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009065 }
9066 VOS_ASSERT(0);
9067 }
9068 return status;
9069}
Jeff Johnson295189b2012-06-20 16:38:30 -07009070#ifdef WLAN_FEATURE_GTK_OFFLOAD
9071/*
9072 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9073 * Request to WDI to get GTK Offload Information
9074 */
9075VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9076 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9077{
9078 VOS_STATUS status = VOS_STATUS_SUCCESS;
9079 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9080 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9081 tWDA_ReqParams *pWdaParams ;
9082
9083 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9084 {
9085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009086 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009087 VOS_ASSERT(0);
9088 return VOS_STATUS_E_NOMEM;
9089 }
9090
9091 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9092 if(NULL == pWdaParams)
9093 {
9094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009095 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009096 VOS_ASSERT(0);
9097 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9098 return VOS_STATUS_E_NOMEM;
9099 }
9100
9101 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9102
9103 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9104 (NULL == pWDA->wdaWdiApiMsgParam));
9105
9106 /* Store Params pass it to WDI */
9107 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9108 pWdaParams->pWdaContext = pWDA;
9109 /* Store param pointer as passed in by caller */
9110 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9111
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009112 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9113 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9114
Jeff Johnson295189b2012-06-20 16:38:30 -07009115 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9116
9117 if(IS_WDI_STATUS_FAILURE(status))
9118 {
9119 /* failure returned by WDI API */
9120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9121 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9123 vos_mem_free(pWdaParams) ;
9124 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9125 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9126 }
9127
9128 return CONVERT_WDI2VOS_STATUS(status) ;
9129}
9130#endif // WLAN_FEATURE_GTK_OFFLOAD
9131
9132/*
9133 * -------------------------------------------------------------------------
9134 * DATA interface with WDI for Mgmt Frames
9135 * -------------------------------------------------------------------------
9136 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009137/*
9138 * FUNCTION: WDA_TxComplete
9139 * Callback function for the WDA_TxPacket
9140 */
9141VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9142 VOS_STATUS status )
9143{
9144
9145 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9146 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009147 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009148
9149 if(NULL == wdaContext)
9150 {
9151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9152 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009153 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009154 VOS_ASSERT(0);
9155 return VOS_STATUS_E_FAILURE;
9156 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009157
9158 /*Check if frame was timed out or not*/
9159 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9160 (v_PVOID_t)&uUserData);
9161
9162 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9163 {
9164 /*Discard frame - no further processing is needed*/
9165 vos_pkt_return_packet(pData);
9166 return VOS_STATUS_SUCCESS;
9167 }
9168
Jeff Johnson295189b2012-06-20 16:38:30 -07009169 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9170 if( NULL!=wdaContext->pTxCbFunc)
9171 {
9172 /*check if packet is freed already*/
9173 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9174 {
9175 wdaContext->pTxCbFunc(pMac, pData);
9176 }
9177 else
9178 {
9179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9180 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009181 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 //Return from here since we reaching here because the packet already timeout
9183 return status;
9184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009185 }
9186
9187 /*
9188 * Trigger the event to bring the HAL TL Tx complete function to come
9189 * out of wait
9190 * Let the coe above to complete the packet first. When this event is set,
9191 * the thread waiting for the event may run and set Vospacket_freed causing the original
9192 * packet not being freed.
9193 */
9194 status = vos_event_set(&wdaContext->txFrameEvent);
9195 if(!VOS_IS_STATUS_SUCCESS(status))
9196 {
9197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9198 "NEW VOS Event Set failed - status = %d \n", status);
9199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 return status;
9201}
Jeff Johnson295189b2012-06-20 16:38:30 -07009202/*
9203 * FUNCTION: WDA_TxPacket
9204 * Forward TX management frame to WDI
9205 */
9206VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9207 void *pFrmBuf,
9208 tANI_U16 frmLen,
9209 eFrameType frmType,
9210 eFrameTxDir txDir,
9211 tANI_U8 tid,
9212 pWDATxRxCompFunc pCompFunc,
9213 void *pData,
9214 pWDAAckFnTxComp pAckTxComp,
9215 tANI_U8 txFlag)
9216{
9217 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9218 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9219 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9220 tANI_U8 eventIdx = 0;
9221 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9222 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009223 if((NULL == pWDA)||(NULL == pFrmBuf))
9224 {
9225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9226 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009227 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 VOS_ASSERT(0);
9229 return VOS_STATUS_E_FAILURE;
9230 }
9231
9232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9233 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009234 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9235 if(NULL == pMac)
9236 {
9237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009238 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 VOS_ASSERT(0);
9240 return VOS_STATUS_E_FAILURE;
9241 }
9242
9243
9244
9245 /* store the call back function in WDA context */
9246 pWDA->pTxCbFunc = pCompFunc;
9247 /* store the call back for the function of ackTxComplete */
9248 if( pAckTxComp )
9249 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009250 if( NULL != pWDA->pAckTxCbFunc )
9251 {
9252 /* Already TxComp is active no need to active again */
9253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9254 "There is already one request pending for tx complete\n");
9255 pWDA->pAckTxCbFunc( pMac, 0);
9256 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009257
Jeff Johnsone7245742012-09-05 17:12:55 -07009258 if( VOS_STATUS_SUCCESS !=
9259 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9260 {
9261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9262 "Tx Complete timeout Timer Stop Failed ");
9263 }
9264 else
9265 {
9266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9267 "Tx Complete timeout Timer Stop Sucess ");
9268 }
9269 }
9270
9271 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9272 pWDA->pAckTxCbFunc = pAckTxComp;
9273 if( VOS_STATUS_SUCCESS !=
9274 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9275 {
9276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9277 "Tx Complete Timer Start Failed ");
9278 pWDA->pAckTxCbFunc = NULL;
9279 return eHAL_STATUS_FAILURE;
9280 }
9281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 /* Reset the event to be not signalled */
9283 status = vos_event_reset(&pWDA->txFrameEvent);
9284 if(!VOS_IS_STATUS_SUCCESS(status))
9285 {
9286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9287 "VOS Event reset failed - status = %d\n",status);
9288 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9289 if( pAckTxComp )
9290 {
9291 pWDA->pAckTxCbFunc = NULL;
9292 if( VOS_STATUS_SUCCESS !=
9293 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9294 {
9295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9296 "Tx Complete timeout Timer Stop Failed ");
9297 }
9298 }
9299 return VOS_STATUS_E_FAILURE;
9300 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009301
9302 /* If Peer Sta mask is set don't overwrite to self sta */
9303 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009304 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009305 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009307 else
9308 {
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009309 /* Get system role, use the self station if in unknown role or STA role */
9310 systemRole = wdaGetGlobalSystemRole(pMac);
9311 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9312 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009313#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009314 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009315#endif
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08009316 ))
9317 {
9318 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9319 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009320 }
9321
Jeff Johnson295189b2012-06-20 16:38:30 -07009322
Jeff Johnsone7245742012-09-05 17:12:55 -07009323 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9324 disassoc frame reaches the HW, HAL has already deleted the peer station */
9325 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009327 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009328 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009329 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009330 /*Send Probe request frames on self sta idx*/
9331 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009332 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009333 /* Since we donot want probe responses to be retried, send probe responses
9334 through the NO_ACK queues */
9335 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9336 {
9337 //probe response is sent out using self station and no retries options.
9338 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9339 }
9340 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9341 {
9342 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9343 }
9344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9346
9347 /*Set frame tag to 0
9348 We will use the WDA user data in order to tag a frame as expired*/
9349 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9350 (v_PVOID_t)0);
9351
9352
9353 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9354 frmLen, ucTypeSubType, tid,
9355 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9356 {
9357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9358 "Sending Mgmt Frame failed - status = %d\n", status);
9359 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9360 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9361 if( pAckTxComp )
9362 {
9363 pWDA->pAckTxCbFunc = NULL;
9364 if( VOS_STATUS_SUCCESS !=
9365 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9366 {
9367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9368 "Tx Complete timeout Timer Stop Failed ");
9369 }
9370 }
9371 return VOS_STATUS_E_FAILURE;
9372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009373 /*
9374 * Wait for the event to be set by the TL, to get the response of TX
9375 * complete, this event should be set by the Callback function called by TL
9376 */
9377 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9378 &eventIdx);
9379 if(!VOS_IS_STATUS_SUCCESS(status))
9380 {
9381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9382 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009383 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9385 after the packet gets completed(packet freed once)*/
9386
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009387 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9388 WDA_TransportChannelDebug(0, 1);
9389
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009390 /*Tag Frame as timed out for later deletion*/
9391 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9392 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9393
Jeff Johnson295189b2012-06-20 16:38:30 -07009394 /* check whether the packet was freed already,so need not free again when
9395 * TL calls the WDA_Txcomplete routine
9396 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009397 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9398 /*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 -07009399 {
9400 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009401 } */
9402
Jeff Johnson295189b2012-06-20 16:38:30 -07009403 if( pAckTxComp )
9404 {
9405 pWDA->pAckTxCbFunc = NULL;
9406 if( VOS_STATUS_SUCCESS !=
9407 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9408 {
9409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9410 "Tx Complete timeout Timer Stop Failed ");
9411 }
9412 }
9413 status = VOS_STATUS_E_FAILURE;
9414 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009415 return status;
9416}
Jeff Johnson295189b2012-06-20 16:38:30 -07009417/*
9418 * FUNCTION: WDA_McProcessMsg
9419 * Trigger DAL-AL to start CFG download
9420 */
9421VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9422{
9423 VOS_STATUS status = VOS_STATUS_SUCCESS;
9424 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009425 if(NULL == pMsg)
9426 {
9427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009428 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009429 VOS_ASSERT(0);
9430 return VOS_STATUS_E_FAILURE;
9431 }
9432
9433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009434 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009435
9436 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9437 if(NULL == pWDA )
9438 {
9439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009440 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009441 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009442 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009443 return VOS_STATUS_E_FAILURE;
9444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009445 /* Process all the WDA messages.. */
9446 switch( pMsg->type )
9447 {
9448 case WNI_CFG_DNLD_REQ:
9449 {
9450 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 /* call WDA complete event if config download success */
9452 if( VOS_IS_STATUS_SUCCESS(status) )
9453 {
9454 vos_WDAComplete_cback(pVosContext);
9455 }
9456 else
9457 {
9458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9459 "WDA Config Download failure" );
9460 }
9461 break ;
9462 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009463 /*
9464 * Init SCAN request from PE, convert it into DAL format
9465 * and send it to DAL
9466 */
9467 case WDA_INIT_SCAN_REQ:
9468 {
9469 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9470 break ;
9471 }
9472 /* start SCAN request from PE */
9473 case WDA_START_SCAN_REQ:
9474 {
9475 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9476 break ;
9477 }
9478 /* end SCAN request from PE */
9479 case WDA_END_SCAN_REQ:
9480 {
9481 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9482 break ;
9483 }
9484 /* end SCAN request from PE */
9485 case WDA_FINISH_SCAN_REQ:
9486 {
9487 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9488 break ;
9489 }
9490 /* join request from PE */
9491 case WDA_CHNL_SWITCH_REQ:
9492 {
9493 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9494 {
9495 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9496 }
9497 else
9498 {
9499 WDA_ProcessChannelSwitchReq(pWDA,
9500 (tSwitchChannelParams*)pMsg->bodyptr) ;
9501 }
9502 break ;
9503 }
9504 /* ADD BSS request from PE */
9505 case WDA_ADD_BSS_REQ:
9506 {
9507 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9508 break ;
9509 }
9510 case WDA_ADD_STA_REQ:
9511 {
9512 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9513 break ;
9514 }
9515 case WDA_DELETE_BSS_REQ:
9516 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009517 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9518 break ;
9519 }
9520 case WDA_DELETE_STA_REQ:
9521 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009522 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9523 break ;
9524 }
9525 case WDA_CONFIG_PARAM_UPDATE_REQ:
9526 {
9527 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9528 break ;
9529 }
9530 case WDA_SET_BSSKEY_REQ:
9531 {
9532 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9533 break ;
9534 }
9535 case WDA_SET_STAKEY_REQ:
9536 {
9537 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9538 break ;
9539 }
9540 case WDA_SET_STA_BCASTKEY_REQ:
9541 {
9542 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9543 break ;
9544 }
9545 case WDA_REMOVE_BSSKEY_REQ:
9546 {
9547 WDA_ProcessRemoveBssKeyReq(pWDA,
9548 (tRemoveBssKeyParams *)pMsg->bodyptr);
9549 break ;
9550 }
9551 case WDA_REMOVE_STAKEY_REQ:
9552 {
9553 WDA_ProcessRemoveStaKeyReq(pWDA,
9554 (tRemoveStaKeyParams *)pMsg->bodyptr);
9555 break ;
9556 }
9557 case WDA_REMOVE_STA_BCASTKEY_REQ:
9558 {
9559 /* TODO: currently UMAC is not sending this request, Add the code for
9560 handling this request when UMAC supports */
9561 break;
9562 }
9563#ifdef FEATURE_WLAN_CCX
9564 case WDA_TSM_STATS_REQ:
9565 {
9566 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9567 break;
9568 }
9569#endif
9570 case WDA_UPDATE_EDCA_PROFILE_IND:
9571 {
9572 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9573 break;
9574 }
9575 case WDA_ADD_TS_REQ:
9576 {
9577 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9578 break;
9579 }
9580 case WDA_DEL_TS_REQ:
9581 {
9582 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9583 break;
9584 }
9585 case WDA_ADDBA_REQ:
9586 {
9587 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9588 break;
9589 }
9590 case WDA_DELBA_IND:
9591 {
9592 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9593 break;
9594 }
9595 case WDA_SET_LINK_STATE:
9596 {
9597 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9598 break;
9599 }
9600 case WDA_GET_STATISTICS_REQ:
9601 {
9602 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9603 break;
9604 }
9605 case WDA_PWR_SAVE_CFG:
9606 {
9607 if(pWDA->wdaState == WDA_READY_STATE)
9608 {
9609 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9610 }
9611 else
9612 {
9613 if(NULL != pMsg->bodyptr)
9614 {
9615 vos_mem_free(pMsg->bodyptr);
9616 }
9617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9618 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9619 }
9620 break;
9621 }
9622 case WDA_ENTER_IMPS_REQ:
9623 {
9624 if(pWDA->wdaState == WDA_READY_STATE)
9625 {
9626 WDA_ProcessEnterImpsReq(pWDA);
9627 }
9628 else
9629 {
9630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9631 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9632 }
9633 break;
9634 }
9635 case WDA_EXIT_IMPS_REQ:
9636 {
9637 if(pWDA->wdaState == WDA_READY_STATE)
9638 {
9639 WDA_ProcessExitImpsReq(pWDA);
9640 }
9641 else
9642 {
9643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9644 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9645 }
9646 break;
9647 }
9648 case WDA_ENTER_BMPS_REQ:
9649 {
9650 if(pWDA->wdaState == WDA_READY_STATE)
9651 {
9652 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9653 }
9654 else
9655 {
9656 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9657 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9658 }
9659 break;
9660 }
9661 case WDA_EXIT_BMPS_REQ:
9662 {
9663 if(pWDA->wdaState == WDA_READY_STATE)
9664 {
9665 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9666 }
9667 else
9668 {
9669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9670 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9671 }
9672 break;
9673 }
9674 case WDA_ENTER_UAPSD_REQ:
9675 {
9676 if(pWDA->wdaState == WDA_READY_STATE)
9677 {
9678 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9679 }
9680 else
9681 {
9682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9683 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9684 }
9685 break;
9686 }
9687 case WDA_EXIT_UAPSD_REQ:
9688 {
9689 if(pWDA->wdaState == WDA_READY_STATE)
9690 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009691 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009692 }
9693 else
9694 {
9695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9696 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9697 }
9698 break;
9699 }
9700 case WDA_UPDATE_UAPSD_IND:
9701 {
9702 if(pWDA->wdaState == WDA_READY_STATE)
9703 {
9704 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9705 }
9706 else
9707 {
9708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9709 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9710 }
9711 break;
9712 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 case WDA_REGISTER_PE_CALLBACK :
9714 {
9715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9716 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9717 /*TODO: store the PE callback */
9718 /* Do Nothing? MSG Body should be freed at here */
9719 if(NULL != pMsg->bodyptr)
9720 {
9721 vos_mem_free(pMsg->bodyptr);
9722 }
9723 break;
9724 }
9725 case WDA_SYS_READY_IND :
9726 {
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9728 "Handling msg type WDA_SYS_READY_IND " );
9729 pWDA->wdaState = WDA_READY_STATE;
9730 if(NULL != pMsg->bodyptr)
9731 {
9732 vos_mem_free(pMsg->bodyptr);
9733 }
9734 break;
9735 }
9736 case WDA_BEACON_FILTER_IND :
9737 {
9738 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9739 break;
9740 }
9741 case WDA_BTC_SET_CFG:
9742 {
9743 /*TODO: handle this while dealing with BTC */
9744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9745 "Handling msg type WDA_BTC_SET_CFG " );
9746 /* Do Nothing? MSG Body should be freed at here */
9747 if(NULL != pMsg->bodyptr)
9748 {
9749 vos_mem_free(pMsg->bodyptr);
9750 }
9751 break;
9752 }
9753 case WDA_SIGNAL_BT_EVENT:
9754 {
9755 /*TODO: handle this while dealing with BTC */
9756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9757 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9758 /* Do Nothing? MSG Body should be freed at here */
9759 if(NULL != pMsg->bodyptr)
9760 {
9761 vos_mem_free(pMsg->bodyptr);
9762 }
9763 break;
9764 }
9765 case WDA_CFG_RXP_FILTER_REQ:
9766 {
9767 WDA_ProcessConfigureRxpFilterReq(pWDA,
9768 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9769 break;
9770 }
9771 case WDA_SET_HOST_OFFLOAD:
9772 {
9773 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9774 break;
9775 }
9776 case WDA_SET_KEEP_ALIVE:
9777 {
9778 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9779 break;
9780 }
9781#ifdef WLAN_NS_OFFLOAD
9782 case WDA_SET_NS_OFFLOAD:
9783 {
9784 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9785 break;
9786 }
9787#endif //WLAN_NS_OFFLOAD
9788 case WDA_ADD_STA_SELF_REQ:
9789 {
9790 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9791 break;
9792 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 case WDA_DEL_STA_SELF_REQ:
9794 {
9795 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9796 break;
9797 }
9798 case WDA_WOWL_ADD_BCAST_PTRN:
9799 {
9800 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9801 break;
9802 }
9803 case WDA_WOWL_DEL_BCAST_PTRN:
9804 {
9805 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9806 break;
9807 }
9808 case WDA_WOWL_ENTER_REQ:
9809 {
9810 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9811 break;
9812 }
9813 case WDA_WOWL_EXIT_REQ:
9814 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009815 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 break;
9817 }
9818 case WDA_TL_FLUSH_AC_REQ:
9819 {
9820 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9821 break;
9822 }
9823 case WDA_SIGNAL_BTAMP_EVENT:
9824 {
9825 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9826 break;
9827 }
9828#ifdef WDA_UT
9829 case WDA_WDI_EVENT_MSG:
9830 {
9831 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9832 break ;
9833 }
9834#endif
9835 case WDA_UPDATE_BEACON_IND:
9836 {
9837 WDA_ProcessUpdateBeaconParams(pWDA,
9838 (tUpdateBeaconParams *)pMsg->bodyptr);
9839 break;
9840 }
9841 case WDA_SEND_BEACON_REQ:
9842 {
9843 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9844 break;
9845 }
9846 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9847 {
9848 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9849 (tSendProbeRespParams *)pMsg->bodyptr);
9850 break;
9851 }
9852#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9853 case WDA_SET_MAX_TX_POWER_REQ:
9854 {
9855 WDA_ProcessSetMaxTxPowerReq(pWDA,
9856 (tMaxTxPowerParams *)pMsg->bodyptr);
9857 break;
9858 }
9859#endif
9860#ifdef WLAN_FEATURE_P2P
9861 case WDA_SET_P2P_GO_NOA_REQ:
9862 {
9863 WDA_ProcessSetP2PGONOAReq(pWDA,
9864 (tP2pPsParams *)pMsg->bodyptr);
9865 break;
9866 }
9867#endif
9868 /* timer related messages */
9869 case WDA_TIMER_BA_ACTIVITY_REQ:
9870 {
9871 WDA_BaCheckActivity(pWDA) ;
9872 break ;
9873 }
9874#ifdef WLAN_FEATURE_VOWIFI_11R
9875 case WDA_AGGR_QOS_REQ:
9876 {
9877 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9878 break;
9879 }
9880#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009881#ifdef ANI_MANF_DIAG
9882 case WDA_FTM_CMD_REQ:
9883 {
9884 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9885 break ;
9886 }
9887#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009888#ifdef FEATURE_OEM_DATA_SUPPORT
9889 case WDA_START_OEM_DATA_REQ:
9890 {
9891 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9892 break;
9893 }
9894#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009895 /* Tx Complete Time out Indication */
9896 case WDA_TX_COMPLETE_TIMEOUT_IND:
9897 {
9898 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9899 break;
9900 }
9901 case WDA_WLAN_SUSPEND_IND:
9902 {
9903 WDA_ProcessWlanSuspendInd(pWDA,
9904 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9905 break;
9906 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009907 case WDA_WLAN_RESUME_REQ:
9908 {
9909 WDA_ProcessWlanResumeReq(pWDA,
9910 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9911 break;
9912 }
9913
9914 case WDA_UPDATE_CF_IND:
9915 {
9916 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9917 pMsg->bodyptr = NULL;
9918 break;
9919 }
9920#ifdef FEATURE_WLAN_SCAN_PNO
9921 case WDA_SET_PNO_REQ:
9922 {
9923 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9924 break;
9925 }
9926 case WDA_UPDATE_SCAN_PARAMS_REQ:
9927 {
9928 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9929 break;
9930 }
9931 case WDA_SET_RSSI_FILTER_REQ:
9932 {
9933 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9934 break;
9935 }
9936#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 case WDA_SET_TX_PER_TRACKING_REQ:
9938 {
9939 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9940 break;
9941 }
9942
9943#ifdef WLAN_FEATURE_PACKET_FILTERING
9944 case WDA_8023_MULTICAST_LIST_REQ:
9945 {
9946 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9947 break;
9948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009949 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9950 {
9951 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9952 break;
9953 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009954 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9955 {
9956 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9957 break;
9958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009959 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9960 {
9961 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9962 break;
9963 }
9964#endif // WLAN_FEATURE_PACKET_FILTERING
9965
9966
9967 case WDA_TRANSMISSION_CONTROL_IND:
9968 {
9969 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9970 break;
9971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009972 case WDA_SET_POWER_PARAMS_REQ:
9973 {
9974 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9975 break;
9976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009977#ifdef WLAN_FEATURE_GTK_OFFLOAD
9978 case WDA_GTK_OFFLOAD_REQ:
9979 {
9980 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9981 break;
9982 }
9983
9984 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9985 {
9986 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9987 break;
9988 }
9989#endif //WLAN_FEATURE_GTK_OFFLOAD
9990
9991 case WDA_SET_TM_LEVEL_REQ:
9992 {
9993 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9994 break;
9995 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009996#ifdef WLAN_FEATURE_11AC
9997 case WDA_UPDATE_OP_MODE:
9998 {
9999 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
10000 {
10001 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
10002 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
10003 else
10004 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10005 " VHT OpMode Feature is Not Supported \n");
10006 }
10007 else
10008 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10009 " 11AC Feature is Not Supported \n");
10010 break;
10011 }
10012#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010013 default:
10014 {
10015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10016 "No Handling for msg type %x in WDA "
10017 ,pMsg->type);
10018 /* Do Nothing? MSG Body should be freed at here */
10019 if(NULL != pMsg->bodyptr)
10020 {
10021 vos_mem_free(pMsg->bodyptr);
10022 }
10023 //WDA_VOS_ASSERT(0) ;
10024 }
10025 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 return status ;
10027}
10028
Jeff Johnson295189b2012-06-20 16:38:30 -070010029/*
10030 * FUNCTION: WDA_LowLevelIndCallback
10031 * IND API callback from WDI, send Ind to PE
10032 */
10033void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10034 void* pUserData )
10035{
10036 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10037#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10038 tSirRSSINotification rssiNotification;
10039#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010040 if(NULL == pWDA)
10041 {
10042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010043 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010044 VOS_ASSERT(0);
10045 return ;
10046 }
10047
10048 switch(wdiLowLevelInd->wdiIndicationType)
10049 {
10050 case WDI_RSSI_NOTIFICATION_IND:
10051 {
10052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10053 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010054#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10055 rssiNotification.bReserved =
10056 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10057 rssiNotification.bRssiThres1NegCross =
10058 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10059 rssiNotification.bRssiThres1PosCross =
10060 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10061 rssiNotification.bRssiThres2NegCross =
10062 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10063 rssiNotification.bRssiThres2PosCross =
10064 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10065 rssiNotification.bRssiThres3NegCross =
10066 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10067 rssiNotification.bRssiThres3PosCross =
10068 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
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,
11702 "Failure set thernal mitigation level free all the memory " );
11703 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}