blob: 39d8ce71bec17f1498eab63fd9867f0d2e0119b0 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Jeff Johnson32d95a32012-09-10 13:15:23 -07002 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -07003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070023 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070024 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070025 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070026 The functions externalized by this module are to be called ONLY by other
27 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070028 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070029 Are listed for each API below.
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031 Copyright (c) 2010-2011 QUALCOMM Incorporated.
32 All Rights Reserved.
33 Qualcomm Confidential and Proprietary
34===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070035/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070036 EDIT HISTORY FOR FILE
37
Jeff Johnson295189b2012-06-20 16:38:30 -070038 This section contains comments describing changes made to the module.
39 Notice that changes are listed in reverse chronological order.
40
Jeff Johnson295189b2012-06-20 16:38:30 -070041 $Header$$DateTime$$Author$
42
Jeff Johnson295189b2012-06-20 16:38:30 -070043 when who what, where, why
44---------- --- -------------------------------------------------
4510/05/2011 haparna Adding support for Keep Alive Feature
462010-12-30 smiryala UMAC convergence changes
472010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
48===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070049#if defined( FEATURE_WLAN_INTEGRATED_SOC )
Jeff Johnson295189b2012-06-20 16:38:30 -070050#include "vos_mq.h"
51#include "vos_api.h"
52#include "vos_packet.h"
53#include "vos_nvitem.h"
54#include "sirApi.h"
55#include "wlan_qct_pal_packet.h"
56#include "wlan_qct_wda.h"
57#include "wlan_qct_wda_msg.h"
58#include "wlan_qct_wdi_cfg.h"
59#include "wlan_qct_wdi.h"
60#include "wlan_qct_wdi_ds.h"
61#include "wlan_hal_cfg.h"
62/**********************/
63#include "wniApi.h"
64#include "cfgApi.h"
65#include "limApi.h"
66#include "wlan_qct_tl.h"
67#include "wlan_qct_tli_ba.h"
68#include "limUtils.h"
69#include "btcApi.h"
70#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070071#ifdef ANI_MANF_DIAG
72#include "pttMsgApi.h"
73#include "wlan_qct_sys.h"
74#endif /* ANI_MANF_DIAG */
Jeff Johnson295189b2012-06-20 16:38:30 -070075/* Used MACRO's */
76/* Get WDA context from vOSS module */
77#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
78#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
79#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
80#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070081#define CONVERT_WDI2SIR_STATUS(x) \
82 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
83
84#define IS_WDI_STATUS_FAILURE(status) \
85 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define CONVERT_WDI2VOS_STATUS(x) \
87 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
88
89/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070090#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070091#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define WDA_GET_BA_TXFLAG(a, b, c) \
93 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
94
95#define WDA_SET_BA_TXFLAG(a, b, c) \
96 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
97
98#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700100#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
101 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700102/* timer related Macros */
103#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
104 tx_timer_create(a, b, c, d, e, f, g)
105#define WDA_START_TIMER(a) tx_timer_activate(a)
106#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
107#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700108#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109
110#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
111 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700112#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700114#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700115#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
116
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700117#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700118
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700119#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700120#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
121 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
122 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
123
124#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
125#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Jeff Johnson295189b2012-06-20 16:38:30 -0700126/* extern declarations */
127extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -0700128/* forward declarations */
129void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
130 void *pBodyptr, tANI_U32 bodyVal) ;
131VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
132 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700133VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
134VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
135
136extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
137 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
138void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
139 tANI_U32 *pConfig) ;
140void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
141 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
142void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
143 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
144void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
145 void* pUserData ) ;
146static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
147static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
148void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
149void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700150#ifdef WLAN_FEATURE_VOWIFI_11R
151VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
152#endif /* WLAN_FEATURE_VOWIFI_11R */
153
Jeff Johnson295189b2012-06-20 16:38:30 -0700154void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
155void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
156VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700157#ifdef FEATURE_WLAN_SCAN_PNO
158static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
159static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
160static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
161#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_PACKET_FILTERING
163static VOS_STATUS WDA_Process8023MulticastListReq (
164 tWDA_CbContext *pWDA,
165 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
166 );
167static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
168 tWDA_CbContext *pWDA,
169 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
170 );
171static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
172 tWDA_CbContext *pWDA,
173 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
174 );
175static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
176 tWDA_CbContext *pWDA,
177 tSirRcvFltPktClearParam *pRcvFltPktClearParam
178 );
179#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700180VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700181static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
182 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700183VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
184 v_U8_t *pDefaultKeyId,
185 v_U8_t *pNumKeys,
186 WDI_KeysType *pWdiKeys );
187
188#ifdef WLAN_FEATURE_GTK_OFFLOAD
189static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
190static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
191#endif // WLAN_FEATURE_GTK_OFFLOAD
192
193VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
194 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700195#ifdef WLAN_FEATURE_11AC
196VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
197 tUpdateVHTOpMode *pData);
198#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700199/*
200 * FUNCTION: WDA_open
201 * Allocate the WDA context
202 */
203VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
204 tMacOpenParameters *pMacParams )
205{
206 tWDA_CbContext *wdaContext;
207 VOS_STATUS status;
208 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700209 /* Allocate WDA context */
210 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
211 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
212 if(!VOS_IS_STATUS_SUCCESS(status))
213 {
214 return VOS_STATUS_E_NOMEM;
215 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700216 /*__asm int 3;*/
217 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
218
219 /* Initialize data structures */
220 wdaContext->pVosContext = pVosContext;
221 wdaContext->wdaState = WDA_INIT_STATE;
222 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
223
224 /* Initialize WDA-WDI synchronization event */
225 status = vos_event_init(&wdaContext->wdaWdiEvent);
226 if(!VOS_IS_STATUS_SUCCESS(status))
227 {
228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
229 "WDI Sync Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800230 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700231 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700232 /* Init Frame transfer event */
233 status = vos_event_init(&wdaContext->txFrameEvent);
234 if(!VOS_IS_STATUS_SUCCESS(status))
235 {
236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
237 "VOS Mgmt Frame Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800238 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700239 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700240 status = vos_event_init(&wdaContext->suspendDataTxEvent);
241 if(!VOS_IS_STATUS_SUCCESS(status))
242 {
243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
244 "VOS suspend data tx Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800245 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700246 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700247 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
248 if(!VOS_IS_STATUS_SUCCESS(status))
249 {
250 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
251 "VOS wait On Wdi Ind Event init failed - status = %d\n", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800252 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700253 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700254 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700255 wdaContext->driverMode = pMacParams->driverType;
256 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
257 &wdiDevCapability, pMacParams->driverType))
258 {
259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
260 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800261 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700262 }
263 else
264 {
265 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
266 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
267 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700268 /* update max STA in WDA used for BA */
269 wdaContext->wdaMaxSta = pMacParams->maxStation;
270 /* store the frameTransRequired flag in wdaContext, to send this to HAL
271 * in WDA_Start
272 */
273 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
274 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700275 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800276
277error:
278 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
279 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280}
281
Jeff Johnson295189b2012-06-20 16:38:30 -0700282/*
283 * FUNCTION: WDA_preStart
284 * Trigger DAL-AL to start CFG download
285 */
286VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
287{
288 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
289 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700290 /*
291 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
292 */
293 wdaMsg.type = WNI_CFG_DNLD_REQ ;
294 wdaMsg.bodyptr = NULL;
295 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 /* post the message.. */
297 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
298 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
299 {
300 vosStatus = VOS_STATUS_E_BADMSG;
301 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 return( vosStatus );
303}
Jeff Johnson295189b2012-06-20 16:38:30 -0700304/*
305 * FUNCTION: WDA_wdiStartCallback
306 * Once WDI_Start is finished, WDI start callback will be called by WDI
307 * to indicate completion of WDI_Start.
308 */
309void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
310 void *pVosContext)
311{
312 tWDA_CbContext *wdaContext;
313 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314 if (NULL == pVosContext)
315 {
316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700317 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700318 return;
319 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700320 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
321 if (NULL == wdaContext)
322 {
323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700324 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700325 return;
326 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700327 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
328 {
329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700330 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700331 }
332 else
333 {
334 wdaContext->wdaState = WDA_START_STATE;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 /* extract and save version information from the Start Response */
337 wdaContext->wcnssWlanCompiledVersion.major =
338 wdiRspParams->wlanCompiledVersion.major;
339 wdaContext->wcnssWlanCompiledVersion.minor =
340 wdiRspParams->wlanCompiledVersion.minor;
341 wdaContext->wcnssWlanCompiledVersion.version =
342 wdiRspParams->wlanCompiledVersion.version;
343 wdaContext->wcnssWlanCompiledVersion.revision =
344 wdiRspParams->wlanCompiledVersion.revision;
345 wdaContext->wcnssWlanReportedVersion.major =
346 wdiRspParams->wlanReportedVersion.major;
347 wdaContext->wcnssWlanReportedVersion.minor =
348 wdiRspParams->wlanReportedVersion.minor;
349 wdaContext->wcnssWlanReportedVersion.version =
350 wdiRspParams->wlanReportedVersion.version;
351 wdaContext->wcnssWlanReportedVersion.revision =
352 wdiRspParams->wlanReportedVersion.revision;
353 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
354 wdiRspParams->wcnssSoftwareVersion,
355 sizeof(wdaContext->wcnssSoftwareVersionString));
356 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
357 wdiRspParams->wcnssHardwareVersion,
358 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 /* Notify WDA_start that WDI_Start has completed */
360 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700361 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700366 return;
367}
368
Jeff Johnson295189b2012-06-20 16:38:30 -0700369/*
370 * FUNCTION: WDA_start
371 * Prepare TLV configuration and call WDI_Start.
372 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700373VOS_STATUS WDA_start(v_PVOID_t pVosContext)
374{
375 tWDA_CbContext *wdaContext;
376 VOS_STATUS status;
377 WDI_Status wdiStatus;
378 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700379 if (NULL == pVosContext)
380 {
381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700382 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 return VOS_STATUS_E_FAILURE;
384 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
386 if (NULL == wdaContext)
387 {
388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700389 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700390 return VOS_STATUS_E_FAILURE;
391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 /* Non-FTM mode, WDA status for START must be INIT
393 * FTM mode, WDA Status for START can be INIT or STOP */
394 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
395 (WDA_STOP_STATE != wdaContext->wdaState) )
396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
398 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700399 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return VOS_STATUS_E_FAILURE;
401 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700402 /* initialize the wdiStartParam. Note that we can create this on
403 the stack since we won't exit until WDI_Start() completes or
404 times out */
405 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700406 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700407 /* prepare the config TLV for the WDI */
408 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
409 if ( !VOS_IS_STATUS_SUCCESS(status) )
410 {
411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700412 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 return VOS_STATUS_E_FAILURE;
414 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700415 /* note from here onwards if an error occurs we must
416 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
418 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
419 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700420 /* initialize the WDA-WDI synchronization event */
421 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 /* call WDI start */
423 wdiStatus = WDI_Start(&wdiStartParam,
424 (WDI_StartRspCb)WDA_wdiStartCallback,
425 (v_VOID_t *)pVosContext);
426 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
427 {
428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700429 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700430 vos_mem_free(wdiStartParam.pConfigBuffer);
431 return VOS_STATUS_E_FAILURE;
432 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 /* wait for WDI start to invoke our callback */
434 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
435 WDA_WDI_START_TIMEOUT );
436 if ( !VOS_IS_STATUS_SUCCESS(status) )
437 {
438 if ( VOS_STATUS_E_TIMEOUT == status )
439 {
440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700441 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700442 }
443 else
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
446 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700447 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 }
449 vos_mem_free(wdiStartParam.pConfigBuffer);
450 return VOS_STATUS_E_FAILURE;
451 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700452 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700453 /* we no longer need the config TLV */
454 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700455 /* if we are not in the START state then WDI_Start() failed */
456 if (WDA_START_STATE != wdaContext->wdaState)
457 {
458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700459 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700460 return VOS_STATUS_E_FAILURE;
461 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700462 /* FTM mode does not need to monitor BA activity */
463 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
464 {
465 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800466 if(VOS_STATUS_SUCCESS == status)
467 {
468 wdaContext->wdaTimersCreated = VOS_TRUE;
469 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700470 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700471 return status;
472}
473
Jeff Johnson295189b2012-06-20 16:38:30 -0700474/*
475 * FUNCTION: WDA_prepareConfigTLV
476 * Function to prepare CFG for DAL(WDA)
477 */
478VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
479 WDI_StartReqParamsType *wdiStartParams )
480{
481 /* get pMac to acess CFG data base */
482 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
483 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
484 tHalCfg *tlvStruct = NULL ;
485 tANI_U8 *tlvStructStart = NULL ;
486 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
487 v_PVOID_t *configParam;
488 tANI_U32 configParamSize;
489 tANI_U32 *configDataValue;
490 WDI_WlanVersionType wcnssCompiledApiVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -0700491 if ((NULL == pMac)||(NULL == wdaContext))
492 {
493 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700494 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700495 VOS_ASSERT(0);
496 return VOS_STATUS_E_FAILURE;
497 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700498 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
499 WNI_CFG_STA_ID_LEN +
500 WNI_CFG_EDCA_WME_ACBK_LEN +
501 WNI_CFG_EDCA_WME_ACBE_LEN +
502 WNI_CFG_EDCA_WME_ACVI_LEN +
503 WNI_CFG_EDCA_WME_ACVO_LEN +
504 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700505 /* malloc memory for all configs in one shot */
506 configParam = vos_mem_malloc(configParamSize);
507
508 if(NULL == configParam )
509 {
510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700511 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700512 VOS_ASSERT(0) ;
513 return VOS_STATUS_E_NOMEM;
514 }
515 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700516 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700517 tlvStruct = (tHalCfg *)configParam;
518 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700519 /* TODO: Remove Later */
520 /* QWLAN_HAL_CFG_STA_ID */
521 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
522 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
523 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
524 eSIR_SUCCESS)
525 {
526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
527 "Failed to get value for WNI_CFG_STA_ID");
528 goto handle_failure;
529 }
530 tlvStruct->length = strLength ;
531 /* calculate the pad bytes to have the CFG in aligned format */
532 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
533 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700534 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
535 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700536 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
537 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
538 tlvStruct->length = sizeof(tANI_U32);
539 configDataValue = (tANI_U32 *)(tlvStruct + 1);
540 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
541 != eSIR_SUCCESS)
542 {
543 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
544 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
545 goto handle_failure;
546 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700547 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
548 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
550 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
551 tlvStruct->length = sizeof(tANI_U32);
552 configDataValue = (tANI_U32 *)(tlvStruct + 1);
553 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
554 eSIR_SUCCESS)
555 {
556 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
557 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
558 goto handle_failure;
559 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700560 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
561 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700562 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
563 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
564 tlvStruct->length = sizeof(tANI_U32);
565 configDataValue = (tANI_U32 *)(tlvStruct + 1);
566 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
567 != eSIR_SUCCESS)
568 {
569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
570 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
571 goto handle_failure;
572 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700573 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
574 + sizeof(tHalCfg) + tlvStruct->length)) ;
575
576 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
577 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
581 configDataValue ) != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
585 goto handle_failure;
586 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700587 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
588 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700589 /* QWLAN_HAL_CFG_CAL_PERIOD */
590 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
594 != eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CAL_PERIOD");
598 goto handle_failure;
599 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700600 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
601 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700602 /* QWLAN_HAL_CFG_CAL_CONTROL */
603 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_CAL_CONTROL");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700615 /* QWLAN_HAL_CFG_PROXIMITY */
616 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
617 tlvStruct->length = sizeof(tANI_U32);
618 configDataValue = (tANI_U32 *)(tlvStruct + 1);
619 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
620 != eSIR_SUCCESS)
621 {
622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
623 "Failed to get value for WNI_CFG_PROXIMITY");
624 goto handle_failure;
625 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700626 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
627 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700628 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
629 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
630 tlvStruct->length = sizeof(tANI_U32);
631 configDataValue = (tANI_U32 *)(tlvStruct + 1);
632 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
633 != eSIR_SUCCESS)
634 {
635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
636 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
637 goto handle_failure;
638 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700639 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
640 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700641 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
642 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
643 tlvStruct->length = sizeof(tANI_U32);
644 configDataValue = (tANI_U32 *)(tlvStruct + 1);
645 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
646 eSIR_SUCCESS)
647 {
648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
649 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
650 goto handle_failure;
651 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700652 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
653 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700654 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
655 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
656 tlvStruct->length = sizeof(tANI_U32);
657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
658 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
659 configDataValue ) != eSIR_SUCCESS)
660 {
661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
662 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
663 goto handle_failure;
664 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700665 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
666 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700667 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
668 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
669 tlvStruct->length = sizeof(tANI_U32);
670 configDataValue = (tANI_U32 *)(tlvStruct + 1);
671 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
672 eSIR_SUCCESS)
673 {
674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
675 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
676 goto handle_failure;
677 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700678 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
679 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700680 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
681 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
682 tlvStruct->length = sizeof(tANI_U32);
683 configDataValue = (tANI_U32 *)(tlvStruct + 1);
684 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
685 eSIR_SUCCESS)
686 {
687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
688 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
689 goto handle_failure;
690 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700691 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
692 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700693 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
694 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
695 tlvStruct->length = sizeof(tANI_U32);
696 configDataValue = (tANI_U32 *)(tlvStruct + 1);
697 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
698 eSIR_SUCCESS)
699 {
700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
701 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
702 goto handle_failure;
703 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700704 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
705 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700706 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
707 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
708 tlvStruct->length = sizeof(tANI_U32);
709 configDataValue = (tANI_U32 *)(tlvStruct + 1);
710 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
711 configDataValue ) != eSIR_SUCCESS)
712 {
713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
714 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
715 goto handle_failure;
716 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700717 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
718 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700719 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
720 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
721 tlvStruct->length = sizeof(tANI_U32);
722 configDataValue = (tANI_U32 *)(tlvStruct + 1);
723 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
724 configDataValue ) != eSIR_SUCCESS)
725 {
726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
727 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
728 goto handle_failure;
729 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700730 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
731 + sizeof(tHalCfg) + tlvStruct->length));
732
733 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
734 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
738 configDataValue ) != eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
742 goto handle_failure;
743 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700744 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
745 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700746 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
747 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length));
759
760 /* QWLAN_HAL_CFG_FIXED_RATE */
761 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
762 tlvStruct->length = sizeof(tANI_U32);
763 configDataValue = (tANI_U32 *)(tlvStruct + 1);
764 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
765 != eSIR_SUCCESS)
766 {
767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
768 "Failed to get value for WNI_CFG_FIXED_RATE");
769 goto handle_failure;
770 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700771 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
772 + sizeof(tHalCfg) + tlvStruct->length));
773
774 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
775 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
776 tlvStruct->length = sizeof(tANI_U32);
777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
778 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
779 != eSIR_SUCCESS)
780 {
781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
782 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
783 goto handle_failure;
784 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700785 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
786 + sizeof(tHalCfg) + tlvStruct->length));
787
788 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
789 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
790 tlvStruct->length = sizeof(tANI_U32);
791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
792 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
793 configDataValue ) != eSIR_SUCCESS)
794 {
795 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
796 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
797 goto handle_failure;
798 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700799 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
800 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700801 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
802 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
803 tlvStruct->length = sizeof(tANI_U32);
804 configDataValue = (tANI_U32 *)(tlvStruct + 1);
805 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
806 configDataValue ) != eSIR_SUCCESS)
807 {
808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
809 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
810 goto handle_failure;
811 }
812 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
813 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700814 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
815 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
819 configDataValue ) != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700827 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
828 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
829 tlvStruct->length = sizeof(tANI_U32);
830 configDataValue = (tANI_U32 *)(tlvStruct + 1);
831 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
832 configDataValue ) != eSIR_SUCCESS)
833 {
834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
835 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
836 goto handle_failure;
837 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700838 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
839 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700840 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
841 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
842 tlvStruct->length = sizeof(tANI_U32);
843 configDataValue = (tANI_U32 *)(tlvStruct + 1);
844 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
845 configDataValue ) != eSIR_SUCCESS)
846 {
847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
848 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
849 goto handle_failure;
850 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700851 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
852 + sizeof(tHalCfg) + tlvStruct->length);
853
854#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
855 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
856 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
857 tlvStruct->length = sizeof(tANI_U32);
858 configDataValue = (tANI_U32 *)(tlvStruct + 1);
859 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
860 configDataValue ) != eSIR_SUCCESS)
861 {
862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
863 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
864 goto handle_failure;
865 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700866 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
867 + sizeof(tHalCfg) + tlvStruct->length);
868#endif
869 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
870 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
871 tlvStruct->length = sizeof(tANI_U32);
872 configDataValue = (tANI_U32 *)(tlvStruct + 1);
873 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
874 configDataValue ) != eSIR_SUCCESS)
875 {
876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
877 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
878 goto handle_failure;
879 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
881 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700882 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
883 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
884 tlvStruct->length = sizeof(tANI_U32);
885 configDataValue = (tANI_U32 *)(tlvStruct + 1);
886 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
887 eSIR_SUCCESS)
888 {
889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
890 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
891 goto handle_failure;
892 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700893 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
894 + sizeof(tHalCfg) + tlvStruct->length);
895
896 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
897 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
898 tlvStruct->length = sizeof(tANI_U32);
899 configDataValue = (tANI_U32 *)(tlvStruct + 1);
900 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
901 configDataValue ) != eSIR_SUCCESS)
902 {
903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
904 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
905 goto handle_failure;
906 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700907 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
908 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700909 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
910 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
918 goto handle_failure;
919 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700920 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
921 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700922 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
923 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
927 configDataValue ) != eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700935 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
936 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
937 tlvStruct->length = sizeof(tANI_U32);
938 configDataValue = (tANI_U32 *)(tlvStruct + 1);
939 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
940 configDataValue ) != eSIR_SUCCESS)
941 {
942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
943 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
944 goto handle_failure;
945 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700946 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
947 + sizeof(tHalCfg) + tlvStruct->length);
948
949 /* QWLAN_HAL_CFG_STATS_PERIOD */
950 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
954 eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_STATS_PERIOD");
958 goto handle_failure;
959 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700960 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
961 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700962 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
963 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
967 eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
971 goto handle_failure;
972 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700973 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
974 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700975 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
976 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
980 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700981 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
982 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700983 /* QWLAN_HAL_CFG_DTIM_PERIOD */
984 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
985 tlvStruct->length = sizeof(tANI_U32);
986 configDataValue = (tANI_U32 *)(tlvStruct + 1);
987 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
988 != eSIR_SUCCESS)
989 {
990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
991 "Failed to get value for WNI_CFG_DTIM_PERIOD");
992 goto handle_failure;
993 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700994 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
995 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700996 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
997 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
998 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
999 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1000 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1001 &strLength) != eSIR_SUCCESS)
1002 {
1003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1004 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1005 goto handle_failure;
1006 }
1007 tlvStruct->length = strLength;
1008 /* calculate the pad bytes to have the CFG in aligned format */
1009 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1010 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1014 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1015 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1018 &strLength) != eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1022 goto handle_failure;
1023 }
1024 tlvStruct->length = strLength;
1025 /* calculate the pad bytes to have the CFG in aligned format */
1026 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1027 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001028 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1029 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001030 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1031 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1032 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1033 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1034 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1035 &strLength) != eSIR_SUCCESS)
1036 {
1037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1038 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1039 goto handle_failure;
1040 }
1041 tlvStruct->length = strLength;
1042 /* calculate the pad bytes to have the CFG in aligned format */
1043 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1044 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001045 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1046 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001047 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1048 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1049 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1050 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1051 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1052 &strLength) != eSIR_SUCCESS)
1053 {
1054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1055 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1056 goto handle_failure;
1057 }
1058 tlvStruct->length = strLength;
1059 /* calculate the pad bytes to have the CFG in aligned format */
1060 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1061 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001062 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1063 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001064 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1065 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1066 tlvStruct->length = sizeof(tANI_U32);
1067 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1068 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1069 != eSIR_SUCCESS)
1070 {
1071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1072 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1073 goto handle_failure;
1074 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1076 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1078 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1079 tlvStruct->length = sizeof(tANI_U32);
1080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1081 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1082 != eSIR_SUCCESS)
1083 {
1084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1085 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1086 goto handle_failure;
1087 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001088 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1089 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001090 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1091 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1092 tlvStruct->length = sizeof(tANI_U32);
1093 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1094 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1095 != eSIR_SUCCESS)
1096 {
1097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1098 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1099 goto handle_failure;
1100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001101 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1102 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001103 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1104 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1105 tlvStruct->length = sizeof(tANI_U32);
1106 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1107 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1108 != eSIR_SUCCESS)
1109 {
1110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1111 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1112 goto handle_failure;
1113 }
1114 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1115 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001116 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1117 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1118 tlvStruct->length = sizeof(tANI_U32);
1119 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1120 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1121 != eSIR_SUCCESS)
1122 {
1123 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1124 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1125 goto handle_failure;
1126 }
1127 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1128 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001129 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1130 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1131 tlvStruct->length = sizeof(tANI_U32);
1132 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1133 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1134 != eSIR_SUCCESS)
1135 {
1136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1137 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1138 goto handle_failure;
1139 }
1140 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1141 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001142 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1143 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1144 tlvStruct->length = sizeof(tANI_U32);
1145 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1146 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1147 != eSIR_SUCCESS)
1148 {
1149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1150 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1151 goto handle_failure;
1152 }
1153 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1154 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001155 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1156 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1157 tlvStruct->length = sizeof(tANI_U32);
1158 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1159 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1160 != eSIR_SUCCESS)
1161 {
1162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1163 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1164 goto handle_failure;
1165 }
1166 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1167 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001168 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1169 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1170 tlvStruct->length = sizeof(tANI_U32);
1171 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1172 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1173 != eSIR_SUCCESS)
1174 {
1175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1176 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1177 goto handle_failure;
1178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001179 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1180 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001181 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1182 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1183 tlvStruct->length = sizeof(tANI_U32);
1184 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1185 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1186 != eSIR_SUCCESS)
1187 {
1188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1189 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1190 goto handle_failure;
1191 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001192 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1193 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001194 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1195 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1196 tlvStruct->length = sizeof(tANI_U32);
1197 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1198 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1199 != eSIR_SUCCESS)
1200 {
1201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1202 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1203 goto handle_failure;
1204 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001205 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1206 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001207 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1208 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1209 * into FW, so the parameters are added here.
1210 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1212 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1216 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1217 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001218 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1219 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1220 tlvStruct->length = sizeof(tANI_U32);
1221 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1222 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1223 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1224 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001225 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1226 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1227 tlvStruct->length = sizeof(tANI_U32);
1228 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1229 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1230 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1231 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001232 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1233 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1234 tlvStruct->length = sizeof(tANI_U32);
1235 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1236 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1237 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1238 + sizeof(tHalCfg) + tlvStruct->length) ;
1239
1240 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1241 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1242 tlvStruct->length = sizeof(tANI_U32);
1243 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1244 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
1247
1248 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1249 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length) ;
1255
1256 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1257 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1258 tlvStruct->length = sizeof(tANI_U32);
1259 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1260 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1261 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1262 + sizeof(tHalCfg) + tlvStruct->length) ;
1263
1264 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1265 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1266 tlvStruct->length = sizeof(tANI_U32);
1267 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1268 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1269 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1270 + sizeof(tHalCfg) + tlvStruct->length) ;
1271
1272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001337 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1341 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1342 wcnssCompiledApiVersion.minor,
1343 wcnssCompiledApiVersion.version,
1344 wcnssCompiledApiVersion.revision);
1345 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1346 + sizeof(tHalCfg) + tlvStruct->length) ;
1347
Jeff Johnsond13512a2012-07-17 11:42:19 -07001348 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1349 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1350 tlvStruct->length = sizeof(tANI_U32);
1351 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1352 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1353 configDataValue ) != eSIR_SUCCESS)
1354 {
1355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1356 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1357 goto handle_failure;
1358 }
1359
1360 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1361 + sizeof(tHalCfg) + tlvStruct->length) ;
1362 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1363 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1364 tlvStruct->length = sizeof(tANI_U32);
1365 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1366 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1367 configDataValue ) != eSIR_SUCCESS)
1368 {
1369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1370 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1371 goto handle_failure;
1372 }
1373
1374 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1375 + sizeof(tHalCfg) + tlvStruct->length) ;
1376
1377 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1378 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1379 tlvStruct->length = sizeof(tANI_U32);
1380 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1381 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1382 != eSIR_SUCCESS)
1383 {
1384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1385 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1386 goto handle_failure;
1387 }
1388
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
Jeff Johnson295189b2012-06-20 16:38:30 -07001392 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001393#ifdef WLAN_DEBUG
1394 {
1395 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001396 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1397 "****** Dumping CFG TLV ***** ");
1398 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1399 {
1400 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1401 "%02x %02x %02x %02x %02x %02x %02x %02x",
1402 tlvStructStart[i],
1403 tlvStructStart[i+1],
1404 tlvStructStart[i+2],
1405 tlvStructStart[i+3],
1406 tlvStructStart[i+4],
1407 tlvStructStart[i+5],
1408 tlvStructStart[i+6],
1409 tlvStructStart[i+7]);
1410 }
1411 /* Dump the bytes in the last line*/
1412 for (; i < wdiStartParams->usConfigBufferLen; i++)
1413 {
1414 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1415 "%02x ",tlvStructStart[i]);
1416 }
1417 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1418 "**************************** ");
1419 }
1420#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001421 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001422handle_failure:
1423 vos_mem_free(configParam);
1424 return VOS_STATUS_E_FAILURE;
1425}
Jeff Johnson295189b2012-06-20 16:38:30 -07001426/*
1427 * FUNCTION: WDA_wdiCompleteCB
1428 * call the voss call back function
1429 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001430void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001431{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001432 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1433 tWDA_CbContext *wdaContext;
1434
1435 if(NULL == pWdaParams)
1436 {
1437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001438 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001439 VOS_ASSERT(0) ;
1440 return ;
1441 }
1442
1443 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1444
Jeff Johnson295189b2012-06-20 16:38:30 -07001445 if (NULL == wdaContext)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001448 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001449 return ;
1450 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001451
Jeff Johnson295189b2012-06-20 16:38:30 -07001452 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001453 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001454 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001456 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001457 vos_mem_free(pWdaParams);
1458
Jeff Johnson295189b2012-06-20 16:38:30 -07001459 if(WDI_STATUS_SUCCESS != status)
1460 {
1461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1462 "WDI stop callback returned failure" );
1463 VOS_ASSERT(0) ;
1464 }
1465 else
1466 {
1467 wdaContext->wdaState = WDA_STOP_STATE;
1468 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001469
Jeff Johnson295189b2012-06-20 16:38:30 -07001470 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001471 vos_WDAComplete_cback(wdaContext->pVosContext);
1472
Jeff Johnson295189b2012-06-20 16:38:30 -07001473 return ;
1474}
Jeff Johnson295189b2012-06-20 16:38:30 -07001475/*
1476 * FUNCTION: WDA_stop
1477 * call WDI_stop
1478 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001479VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1480{
1481 WDI_Status wdiStatus;
1482 VOS_STATUS status = VOS_STATUS_SUCCESS;
1483 WDI_StopReqParamsType *wdiStopReq;
1484 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001485 tWDA_ReqParams *pWdaParams ;
1486
Jeff Johnson295189b2012-06-20 16:38:30 -07001487 if (NULL == pWDA)
1488 {
1489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001490 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001491 VOS_ASSERT(0);
1492 return VOS_STATUS_E_FAILURE;
1493 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001494 if (pWDA->wdiFailed == true)
1495 {
1496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001497 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001498 return VOS_STATUS_E_ALREADY;
1499 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001500
Jeff Johnson295189b2012-06-20 16:38:30 -07001501 /* FTM mode stay START_STATE */
1502 if( (WDA_READY_STATE != pWDA->wdaState) &&
1503 (WDA_INIT_STATE != pWDA->wdaState) &&
1504 (WDA_START_STATE != pWDA->wdaState) )
1505 {
1506 VOS_ASSERT(0);
1507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001508 wdiStopReq = (WDI_StopReqParamsType *)
1509 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1510 if(NULL == wdiStopReq)
1511 {
1512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001514 VOS_ASSERT(0);
1515 return VOS_STATUS_E_NOMEM;
1516 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001517
Jeff Johnson295189b2012-06-20 16:38:30 -07001518 wdiStopReq->wdiStopReason = reason;
1519 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001520
1521 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1522 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001523 {
1524 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001525 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001526 VOS_ASSERT(0);
1527 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001528 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001529 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001530
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001531 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1532 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001533 {
1534 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001535 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001536 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001537
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001538 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1539 pWdaParams->wdaMsgParam = NULL;
1540 pWdaParams->pWdaContext = pWDA;
1541
Jeff Johnson295189b2012-06-20 16:38:30 -07001542 /* call WDI stop */
1543 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001544 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1545
Jeff Johnson295189b2012-06-20 16:38:30 -07001546 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1547 {
1548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1549 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1551 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001552 status = VOS_STATUS_E_FAILURE;
1553 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001554 return status;
1555}
Jeff Johnson295189b2012-06-20 16:38:30 -07001556/*
1557 * FUNCTION: WDA_close
1558 * call WDI_close and free the WDA context
1559 */
1560VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1561{
Jeff Johnson43971f52012-07-17 12:26:56 -07001562 VOS_STATUS status = VOS_STATUS_SUCCESS;
1563 WDI_Status wstatus;
1564 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001565 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001566 if (NULL == wdaContext)
1567 {
1568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001569 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001570 return VOS_STATUS_E_FAILURE;
1571 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001572 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1573 (WDA_STOP_STATE != wdaContext->wdaState))
1574 {
1575 VOS_ASSERT(0);
1576 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001577 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001578 wstatus = WDI_Close();
1579 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001580 {
1581 status = VOS_STATUS_E_FAILURE;
1582 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001583 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001584 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001585 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1586 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001587 {
1588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1589 "WDI Sync Event destroy failed - status = %d\n", status);
1590 status = VOS_STATUS_E_FAILURE;
1591 }
1592
Jeff Johnson43971f52012-07-17 12:26:56 -07001593 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001594 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001595 {
1596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1597 "VOS Event destroy failed - status = %d\n", status);
1598 status = VOS_STATUS_E_FAILURE;
1599 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001600 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001601 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001602 {
1603 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1604 "VOS Event destroy failed - status = %d\n", status);
1605 status = VOS_STATUS_E_FAILURE;
1606 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001607 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001608 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001609 {
1610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1611 "VOS Event destroy failed - status = %d\n", status);
1612 status = VOS_STATUS_E_FAILURE;
1613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001614 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001615 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001616 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001617 {
1618 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1619 "error in WDA close " );
1620 status = VOS_STATUS_E_FAILURE;
1621 }
1622 return status;
1623}
Jeff Johnson295189b2012-06-20 16:38:30 -07001624/*
1625 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1626 * returns 1 if the compiled version is greater than or equal to the input version
1627 */
1628
1629uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1630{
1631 VOS_STATUS status = VOS_STATUS_SUCCESS;
1632 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1633 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001634 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001635 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1636 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1637 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1638 (compiledVersion.revision >= revision)))
1639 return 1;
1640 else
1641 return 0;
1642}
Jeff Johnson295189b2012-06-20 16:38:30 -07001643/*
1644 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1645 * returns 1 if the compiled version is greater than or equal to the input version
1646 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001647uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1648{
1649 VOS_STATUS status = VOS_STATUS_SUCCESS;
1650 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1651 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001652 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001653 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1654 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1655 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1656 (reportedVersion.revision >= revision)))
1657 return 1;
1658 else
1659 return 0;
1660}
Jeff Johnson295189b2012-06-20 16:38:30 -07001661/*
1662 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1663 * Returns the version of the WCNSS WLAN API with which the HOST
1664 * device driver was compiled
1665 */
1666VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1667 tSirVersionType *pVersion)
1668{
1669 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001671 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001672 if ((NULL == pvosGCtx) || (NULL == pVersion))
1673 {
1674 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001675 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001676 VOS_ASSERT(0);
1677 return VOS_STATUS_E_FAILURE;
1678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001679 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1680 if (NULL == pWDA )
1681 {
1682 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001683 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001684 VOS_ASSERT(0);
1685 return VOS_STATUS_E_FAILURE;
1686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001687 *pVersion = pWDA->wcnssWlanCompiledVersion;
1688 return VOS_STATUS_SUCCESS;
1689}
Jeff Johnson295189b2012-06-20 16:38:30 -07001690/*
1691 * FUNCTION: WDA_GetWcnssWlanReportedVersion
1692 * Returns the version of the WCNSS WLAN API with which the WCNSS
1693 * device driver was compiled
1694 */
1695VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
1696 tSirVersionType *pVersion)
1697{
1698 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001700 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001701 if ((NULL == pvosGCtx) || (NULL == pVersion))
1702 {
1703 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001704 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001705 VOS_ASSERT(0);
1706 return VOS_STATUS_E_FAILURE;
1707 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001708 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1709 if (NULL == pWDA )
1710 {
1711 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001712 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001713 VOS_ASSERT(0);
1714 return VOS_STATUS_E_FAILURE;
1715 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001716 *pVersion = pWDA->wcnssWlanReportedVersion;
1717 return VOS_STATUS_SUCCESS;
1718}
Jeff Johnson295189b2012-06-20 16:38:30 -07001719/*
1720 * FUNCTION: WDA_GetWcnssSoftwareVersion
1721 * Returns the WCNSS Software version string
1722 */
1723VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
1724 tANI_U8 *pVersion,
1725 tANI_U32 versionBufferSize)
1726{
1727 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001728 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001729 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001730 if ((NULL == pvosGCtx) || (NULL == pVersion))
1731 {
1732 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001733 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001734 VOS_ASSERT(0);
1735 return VOS_STATUS_E_FAILURE;
1736 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001737 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1738 if (NULL == pWDA )
1739 {
1740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001741 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 VOS_ASSERT(0);
1743 return VOS_STATUS_E_FAILURE;
1744 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001745 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
1746 return VOS_STATUS_SUCCESS;
1747}
Jeff Johnson295189b2012-06-20 16:38:30 -07001748/*
1749 * FUNCTION: WDA_GetWcnssHardwareVersion
1750 * Returns the WCNSS Hardware version string
1751 */
1752VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
1753 tANI_U8 *pVersion,
1754 tANI_U32 versionBufferSize)
1755{
1756 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07001757 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001758 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001759 if ((NULL == pvosGCtx) || (NULL == pVersion))
1760 {
1761 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001762 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001763 VOS_ASSERT(0);
1764 return VOS_STATUS_E_FAILURE;
1765 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001766 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1767 if (NULL == pWDA )
1768 {
1769 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001770 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001771 VOS_ASSERT(0);
1772 return VOS_STATUS_E_FAILURE;
1773 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001774 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
1775 return VOS_STATUS_SUCCESS;
1776}
Jeff Johnson295189b2012-06-20 16:38:30 -07001777/*
1778 * FUNCTION: WDA_WniCfgDnld
1779 * Trigger CFG Download
1780 */
1781VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
1782{
1783 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001784 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001785 v_VOID_t *pFileImage = NULL;
1786 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07001787 v_VOID_t *pCfgBinary = NULL;
1788 v_SIZE_t cbCfgBinarySize = 0;
1789
1790 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001791 if (NULL == pMac )
1792 {
1793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001794 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001795 VOS_ASSERT(0);
1796 return VOS_STATUS_E_FAILURE;
1797 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001798 /* get the number of bytes in the CFG Binary... */
1799 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
1800 &cbFileImageSize );
1801 if ( VOS_STATUS_E_NOMEM != vosStatus )
1802 {
1803 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
1804 "Error obtaining binary size" );
1805 goto fail;
1806 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001807 // malloc a buffer to read in the Configuration binary file.
1808 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001809 if ( NULL == pFileImage )
1810 {
1811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1812 "Unable to allocate memory for the CFG binary [size= %d bytes]",
1813 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07001814 vosStatus = VOS_STATUS_E_NOMEM;
1815 goto fail;
1816 }
1817
1818 /* Get the entire CFG file image... */
1819 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
1820 &cbFileImageSize );
1821 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
1822 {
1823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1824 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
1825 cbFileImageSize );
1826 goto fail;
1827 }
1828
1829 /*
1830 * Validate the binary image. This function will return a pointer
1831 * and length where the CFG binary is located within the binary image file.
1832 */
1833 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
1834 &pCfgBinary, &cbCfgBinarySize );
1835 if ( VOS_FALSE == bStatus )
1836 {
1837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1838 "Error: Cannot find STA CFG in binary image file" );
1839 vosStatus = VOS_STATUS_E_FAILURE;
1840 goto fail;
1841 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001842 /*
1843 * TODO: call the config download function
1844 * for now calling the existing cfg download API
1845 */
1846 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnson295189b2012-06-20 16:38:30 -07001847 if( pFileImage != NULL )
1848 {
1849 vos_mem_free( pFileImage );
1850 }
1851 return vosStatus;
1852
1853fail:
1854 if(pCfgBinary != NULL)
1855 vos_mem_free( pFileImage );
1856
1857 return vosStatus;
1858}
Jeff Johnson295189b2012-06-20 16:38:30 -07001859/* -----------------------------------------------------------------
1860 * WDI interface
1861 * -----------------------------------------------------------------
1862 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001863/*
1864 * FUNCTION: WDA_suspendDataTxCallback
1865 * call back function called from TL after suspend Transmission
1866 */
1867VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
1868 v_U8_t* ucSTAId,
1869 VOS_STATUS vosStatus)
1870{
1871 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07001872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001873 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001874 if (NULL == pWDA )
1875 {
1876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001877 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001878 VOS_ASSERT(0);
1879 return VOS_STATUS_E_FAILURE;
1880 }
1881 if(VOS_IS_STATUS_SUCCESS(vosStatus))
1882 {
1883 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
1884 }
1885 else
1886 {
1887 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 /* Trigger the event to bring the WDA TL suspend function to come
1890 * out of wait*/
1891 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
1892 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
1893 {
1894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1895 "NEW VOS Event Set failed - status = %d \n", vosStatus);
1896 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 /* If TL suspended had timedout before this callback was called, resume back
1898 * TL.*/
1899 if (pWDA->txSuspendTimedOut)
1900 {
1901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1902 "Late TLSuspendCallback, resuming TL back again\n");
1903 WDA_ResumeDataTx(pWDA);
1904 pWDA->txSuspendTimedOut = FALSE;
1905 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001906 return VOS_STATUS_SUCCESS;
1907}
Jeff Johnson295189b2012-06-20 16:38:30 -07001908/*
1909 * FUNCTION: WDA_suspendDataTx
1910 * Update TL to suspend the data Transmission
1911 */
1912VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
1913{
1914 VOS_STATUS status = VOS_STATUS_E_FAILURE;
1915 tANI_U8 eventIdx = 0;
1916 tANI_U8 ucSTAId = 0;
1917
1918 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001919 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001920 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001921 if (pWDA->txSuspendTimedOut)
1922 {
1923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1924 "TL suspend timedout previously, CB not called yet\n");
1925 return status;
1926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001927 /* Reset the event to be not signalled */
1928 status = vos_event_reset(&pWDA->suspendDataTxEvent);
1929 if(!VOS_IS_STATUS_SUCCESS(status))
1930 {
1931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1932 "VOS Event reset failed - status = %d\n",status);
1933 return VOS_STATUS_E_FAILURE;
1934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001935 /*Indicate TL to suspend transmission for all Sta Id */
1936 ucSTAId = WLAN_ALL_STA;
1937 status = WLANTL_SuspendDataTx(pWDA->pVosContext, &ucSTAId,
1938 WDA_SuspendDataTxCallback);
1939 if(status != VOS_STATUS_SUCCESS)
1940 {
1941 return status;
1942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001943 /* Wait for the event to be set by the TL, to get the response of
1944 * suspending the TX queues, this event should be set by the Callback
1945 * function called by TL*/
1946 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
1947 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
1948 if(!VOS_IS_STATUS_SUCCESS(status))
1949 {
1950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1951 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001952 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001953 /* Set this flag to true when TL suspend times out, so that when TL
1954 * suspend eventually happens and calls the callback, TL can be resumed
1955 * right away by looking at this flag when true.*/
1956 pWDA->txSuspendTimedOut = TRUE;
1957 }
1958 else
1959 {
1960 pWDA->txSuspendTimedOut = FALSE;
1961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001962 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
1963 {
1964 status = VOS_STATUS_SUCCESS;
1965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001966 return status;
1967}
Jeff Johnson295189b2012-06-20 16:38:30 -07001968/*
1969 * FUNCTION: WDA_resumeDataTx
1970 * Update TL to resume the data Transmission
1971 */
1972VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
1973{
1974 VOS_STATUS status = VOS_STATUS_SUCCESS;
1975 tANI_U8 ucSTAId = 0;
1976
1977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001978 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001979 ucSTAId = WLAN_ALL_STA;
1980 status = WLANTL_ResumeDataTx(pWDA->pVosContext, &ucSTAId);
1981 return status;
1982}
Jeff Johnson295189b2012-06-20 16:38:30 -07001983/*
1984 * FUNCTION: WDA_InitScanReqCallback
1985 * Trigger Init SCAN callback
1986 */
1987void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
1988{
1989 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1990 tWDA_CbContext *pWDA;
1991 tInitScanParams *pWDA_ScanParam ;
1992 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001994 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if(NULL == pWdaParams)
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001998 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 VOS_ASSERT(0) ;
2000 return ;
2001 }
2002 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2003 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 if(NULL == pWDA_ScanParam)
2005 {
2006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002007 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002008 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002009 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2010 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002011 return ;
2012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002013 if(WDI_STATUS_SUCCESS != wdiStatus)
2014 {
2015 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 if(VOS_STATUS_SUCCESS != status)
2017 {
2018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002019 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002020 }
2021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 /* free WDI command buffer */
2023 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002024 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002025
Jeff Johnson295189b2012-06-20 16:38:30 -07002026
2027 /* assign status to scan params */
2028 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002029 /* send SCAN RSP message back to PE */
2030 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 return ;
2032}
2033
2034/*
2035 * FUNCTION: WDA_ProcessInitScanReq
2036 * Trigger Init SCAN in DAL
2037 */
2038VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2039 tInitScanParams *initScanParams)
2040{
2041 WDI_Status status = WDI_STATUS_SUCCESS ;
2042 WDI_InitScanReqParamsType *wdiInitScanParam =
2043 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2044 sizeof(WDI_InitScanReqParamsType)) ;
2045 tWDA_ReqParams *pWdaParams;
2046 tANI_U8 i = 0;
2047
2048 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002049 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 if(NULL == wdiInitScanParam)
2051 {
2052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002053 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002054 VOS_ASSERT(0);
2055 return VOS_STATUS_E_NOMEM;
2056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002057 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2058 if(NULL == pWdaParams)
2059 {
2060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002061 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 VOS_ASSERT(0);
2063 vos_mem_free(wdiInitScanParam);
2064 return VOS_STATUS_E_NOMEM;
2065 }
2066
2067 /* Copy init Scan params to WDI structure */
2068 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2069 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2070 sizeof(tSirMacAddr)) ;
2071 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2072 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2073 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
2074#ifdef WLAN_FEATURE_P2P
2075 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2076 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
2077#else
2078 wdiInitScanParam->wdiReqInfo.bUseNOA = 0;
2079 wdiInitScanParam->wdiReqInfo.scanDuration = 0;
2080#endif
2081 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2082 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2084 {
2085 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2086 initScanParams->scanEntry.bssIdx[i] ;
2087 }
2088
2089 /* if Frame length, copy macMgmtHdr or WDI structure */
2090 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2091 {
2092 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2093 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2094 }
2095 wdiInitScanParam->wdiReqStatusCB = NULL ;
2096
Jeff Johnson295189b2012-06-20 16:38:30 -07002097 /* Store Init Req pointer, as this will be used for response */
2098 pWdaParams->pWdaContext = pWDA;
2099 pWdaParams->wdaMsgParam = initScanParams;
2100 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 /* first try to suspend TX */
2102 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 if(WDI_STATUS_SUCCESS != status)
2104 {
2105 goto handleWdiFailure;
2106 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 /* call DAL API to pass init scan request to DAL */
2108 status = WDI_InitScanReq(wdiInitScanParam,
2109 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 if(IS_WDI_STATUS_FAILURE(status))
2111 {
2112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2113 "error in WDA Init Scan, Resume Tx " );
2114 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 VOS_ASSERT(0) ;
2116
2117 goto handleWdiFailure;
2118 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002119 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002120handleWdiFailure:
2121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2122 "Failure in WDI Api, free all the memory " );
2123 /* free WDI command buffer */
2124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2125 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 /* send Failure to PE */
2127 initScanParams->status = eSIR_FAILURE ;
2128 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002129 return CONVERT_WDI2VOS_STATUS(status) ;
2130}
2131
Jeff Johnson295189b2012-06-20 16:38:30 -07002132/*
2133 * FUNCTION: WDA_StartScanReqCallback
2134 * send Start SCAN RSP back to PE
2135 */
2136void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2137 void* pUserData)
2138{
2139 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2140 tWDA_CbContext *pWDA;
2141 tStartScanParams *pWDA_ScanParam;
2142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002143 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002144 if(NULL == pWdaParams)
2145 {
2146 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002147 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002148 VOS_ASSERT(0) ;
2149 return ;
2150 }
2151 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2152 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002153 if(NULL == pWDA_ScanParam)
2154 {
2155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002156 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002158 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 return ;
2160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002161 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2162 {
2163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002164 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002165 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002166 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002167 return ;
2168 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2170 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002171
Jeff Johnson295189b2012-06-20 16:38:30 -07002172
2173 /* assign status to scan params */
2174 pWDA_ScanParam->status = CONVERT_WDI2SIR_STATUS(pScanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 /* send SCAN RSP message back to PE */
2176 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002177 return ;
2178}
2179
Jeff Johnson295189b2012-06-20 16:38:30 -07002180/*
2181 * FUNCTION: WDA_ProcessStartScanReq
2182 * Trigger start SCAN in WDI
2183 */
2184VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2185 tStartScanParams *startScanParams)
2186{
2187 WDI_Status status = WDI_STATUS_SUCCESS;
2188 WDI_StartScanReqParamsType *wdiStartScanParams =
2189 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2190 sizeof(WDI_StartScanReqParamsType)) ;
2191 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002193 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002194 if(NULL == wdiStartScanParams)
2195 {
2196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002197 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002198 VOS_ASSERT(0);
2199 return VOS_STATUS_E_NOMEM;
2200 }
2201 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2202 if(NULL == pWdaParams)
2203 {
2204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002205 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002206 VOS_ASSERT(0);
2207 vos_mem_free(wdiStartScanParams);
2208 return VOS_STATUS_E_NOMEM;
2209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 /* Copy init Scan params to WDI structure */
2211 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2212 wdiStartScanParams->wdiReqStatusCB = NULL ;
2213
Jeff Johnson295189b2012-06-20 16:38:30 -07002214 /* Store Init Req pointer, as this will be used for response */
2215 /* store Params pass it to WDI */
2216 pWdaParams->pWdaContext = pWDA;
2217 pWdaParams->wdaMsgParam = startScanParams;
2218 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 /* call DAL API to pass init scan request to DAL */
2220 status = WDI_StartScanReq(wdiStartScanParams,
2221 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002222 /* failure returned by WDI API */
2223 if(IS_WDI_STATUS_FAILURE(status))
2224 {
2225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2226 "Failure in Start Scan WDI API, free all the memory "
2227 "It should be due to previous abort scan." );
2228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2229 vos_mem_free(pWdaParams) ;
2230 startScanParams->status = eSIR_FAILURE ;
2231 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 return CONVERT_WDI2VOS_STATUS(status) ;
2234}
Jeff Johnson295189b2012-06-20 16:38:30 -07002235/*
2236 * FUNCTION: WDA_EndScanReqCallback
2237 * END SCAN callback
2238 */
2239void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2240{
2241 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2242 tWDA_CbContext *pWDA;
2243 tEndScanParams *endScanParam;
2244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002245 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002246 if(NULL == pWdaParams)
2247 {
2248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002250 VOS_ASSERT(0) ;
2251 return ;
2252 }
2253 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2254 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002255 if(NULL == endScanParam)
2256 {
2257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002258 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002259 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002260 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2261 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002262 return ;
2263 }
2264
2265 /* Free WDI command buffer */
2266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2267 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002268 /* assign status to scan params */
2269 endScanParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002270 /* send response back to PE */
2271 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2272 return ;
2273}
2274
Jeff Johnson295189b2012-06-20 16:38:30 -07002275/*
2276 * FUNCTION: WDA_ProcessEndScanReq
2277 * Trigger END SCAN in WDI
2278 */
2279VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2280 tEndScanParams *endScanParams)
2281{
2282 WDI_Status status = WDI_STATUS_SUCCESS;
2283 WDI_EndScanReqParamsType *wdiEndScanParams =
2284 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2285 sizeof(WDI_EndScanReqParamsType)) ;
2286 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002289 if(NULL == wdiEndScanParams)
2290 {
2291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 VOS_ASSERT(0);
2294 return VOS_STATUS_E_NOMEM;
2295 }
2296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2297 if(NULL == pWdaParams)
2298 {
2299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002301 VOS_ASSERT(0);
2302 vos_mem_free(wdiEndScanParams);
2303 return VOS_STATUS_E_NOMEM;
2304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 /* Copy init Scan params to WDI structure */
2306 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2307 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 /* Store Init Req pointer, as this will be used for response */
2309 /* store Params pass it to WDI */
2310 pWdaParams->pWdaContext = pWDA;
2311 pWdaParams->wdaMsgParam = endScanParams;
2312 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002313 /* call DAL API to pass init scan request to DAL */
2314 status = WDI_EndScanReq(wdiEndScanParams,
2315 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002316 if(IS_WDI_STATUS_FAILURE(status))
2317 {
2318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2319 "Failure in End Scan WDI API, free all the memory "
2320 "It should be due to previous abort scan." );
2321 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2322 vos_mem_free(pWdaParams) ;
2323 endScanParams->status = eSIR_FAILURE ;
2324 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 return CONVERT_WDI2VOS_STATUS(status) ;
2327}
Jeff Johnson295189b2012-06-20 16:38:30 -07002328/*
2329 * FUNCTION: WDA_FinishScanReqCallback
2330 * Trigger Finish SCAN callback
2331 */
2332void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2333{
2334 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2335 tWDA_CbContext *pWDA;
2336 tFinishScanParams *finishScanParam;
2337 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002339 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002340 if(NULL == pWdaParams)
2341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002343 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002344 VOS_ASSERT(0) ;
2345 return ;
2346 }
2347
2348 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2349 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002350 if(NULL == finishScanParam)
2351 {
2352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002353 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002354 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002355 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2356 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002357 return ;
2358 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002359 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2360 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 /*
2362 * Now Resume TX, if we reached here means, TX is already suspended, we
2363 * have to resume it unconditionaly
2364 */
2365 status = WDA_ResumeDataTx(pWDA) ;
2366
2367 if(VOS_STATUS_SUCCESS != status)
2368 {
2369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002370 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002371 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 finishScanParam->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002373 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2374 return ;
2375}
Jeff Johnson295189b2012-06-20 16:38:30 -07002376/*
2377 * FUNCTION: WDA_ProcessFinshScanReq
2378 * Trigger Finish SCAN in WDI
2379 */
2380VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2381 tFinishScanParams *finishScanParams)
2382{
2383 WDI_Status status = WDI_STATUS_SUCCESS;
2384 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2385 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2386 sizeof(WDI_FinishScanReqParamsType)) ;
2387 tWDA_ReqParams *pWdaParams ;
2388 tANI_U8 i = 0;
2389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002390 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002391 if(NULL == wdiFinishScanParams)
2392 {
2393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002395 VOS_ASSERT(0);
2396 return VOS_STATUS_E_NOMEM;
2397 }
2398 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2399 if(NULL == pWdaParams)
2400 {
2401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002402 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002403 VOS_ASSERT(0);
2404 vos_mem_free(wdiFinishScanParams);
2405 return VOS_STATUS_E_NOMEM;
2406 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002407 /* Copy init Scan params to WDI structure */
2408 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2409 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2410 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2412 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2413 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2414 finishScanParams->frameLength ;
2415 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2416 finishScanParams->currentOperChannel ;
2417 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2418 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2419 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002420 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2421 {
2422 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2423 finishScanParams->scanEntry.bssIdx[i] ;
2424 }
2425
2426
Jeff Johnson295189b2012-06-20 16:38:30 -07002427 /* if Frame length, copy macMgmtHdr ro WDI structure */
2428 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2429 {
2430 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2431 &finishScanParams->macMgmtHdr,
2432 sizeof(WDI_MacMgmtHdr)) ;
2433 }
2434 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 /* Store Init Req pointer, as this will be used for response */
2436 /* store Params pass it to WDI */
2437 pWdaParams->pWdaContext = pWDA;
2438 pWdaParams->wdaMsgParam = finishScanParams;
2439 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002440 /* call DAL API to pass init scan request to DAL */
2441 status = WDI_FinishScanReq(wdiFinishScanParams,
2442 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002443
Jeff Johnson295189b2012-06-20 16:38:30 -07002444
2445 /*
2446 * WDI API returns failure..
2447 */
2448 if(IS_WDI_STATUS_FAILURE( status))
2449 {
2450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2451 "Failure in Finish Scan WDI API, free all the memory " );
2452 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2453 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002454 finishScanParams->status = eSIR_FAILURE ;
2455 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2456 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002457 return CONVERT_WDI2VOS_STATUS(status) ;
2458}
Jeff Johnson295189b2012-06-20 16:38:30 -07002459/*---------------------------------------------------------------------
2460 * ASSOC API's
2461 *---------------------------------------------------------------------
2462 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002463/*
2464 * FUNCTION: WDA_JoinReqCallback
2465 * Trigger Init SCAN callback
2466 */
2467void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2468{
2469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2470 tWDA_CbContext *pWDA;
2471 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002473 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 if(NULL == pWdaParams)
2475 {
2476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002477 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002478 VOS_ASSERT(0) ;
2479 return ;
2480 }
2481 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2482 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002483 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2484 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002485 /* reset macBSSID */
2486 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002487 /* reset macSTASelf */
2488 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002489 joinReqParam->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002490 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002491 return ;
2492}
Jeff Johnson295189b2012-06-20 16:38:30 -07002493/*
2494 * FUNCTION: WDA_ProcessJoinReq
2495 * Trigger Join REQ in WDI
2496 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002497VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2498 tSwitchChannelParams* joinReqParam)
2499{
2500 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 WDI_JoinReqParamsType *wdiJoinReqParam =
2502 (WDI_JoinReqParamsType *)vos_mem_malloc(
2503 sizeof(WDI_JoinReqParamsType)) ;
2504 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == wdiJoinReqParam)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002512 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 return VOS_STATUS_E_NOMEM;
2514 }
2515 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2516 if(NULL == pWdaParams)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002520 VOS_ASSERT(0);
2521 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002522 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 return VOS_STATUS_E_NOMEM;
2524 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002525
2526 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2527 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2528 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2531 "%s: received join request when BSSID or self-STA is NULL "
2532 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002533 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002534 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2535 VOS_ASSERT(0);
2536 vos_mem_free(wdiJoinReqParam);
2537 vos_mem_free(pWdaParams);
2538 joinReqParam->status = eSIR_FAILURE ;
2539 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2540 return VOS_STATUS_E_INVAL;
2541 }
2542
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 /* copy the BSSID for pWDA */
2544 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2545 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002546 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2547 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002548 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2549 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002550#ifdef WLAN_FEATURE_VOWIFI
2551 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2552 joinReqParam->maxTxPower ;
2553#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002554 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2555 joinReqParam->localPowerConstraint ;
2556#endif
2557 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2558 joinReqParam->secondaryChannelOffset ;
2559 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2560
2561 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 /* Store Init Req pointer, as this will be used for response */
2563 /* store Params pass it to WDI */
2564 pWdaParams->pWdaContext = pWDA;
2565 pWdaParams->wdaMsgParam = joinReqParam;
2566 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002567 status = WDI_JoinReq(wdiJoinReqParam,
2568 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 if(IS_WDI_STATUS_FAILURE(status))
2570 {
2571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2572 "Failure in Join WDI API, free all the memory " );
2573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2574 vos_mem_free(pWdaParams) ;
2575 joinReqParam->status = eSIR_FAILURE ;
2576 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2577 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002578 return CONVERT_WDI2VOS_STATUS(status) ;
2579}
Jeff Johnson295189b2012-06-20 16:38:30 -07002580/*
2581 * FUNCTION: WDA_SwitchChannelReqCallback
2582 * send Switch channel RSP back to PE
2583 */
2584void WDA_SwitchChannelReqCallback(
2585 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2586{
2587 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2588 tWDA_CbContext *pWDA;
2589 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002591 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 if(NULL == pWdaParams)
2593 {
2594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 VOS_ASSERT(0) ;
2597 return ;
2598 }
2599 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2600 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2601
2602#ifdef WLAN_FEATURE_VOWIFI
2603 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2604#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2606 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002607 pSwitchChanParams->status =
2608 CONVERT_WDI2SIR_STATUS(wdiSwitchChanRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002609 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 return ;
2611}
Jeff Johnson295189b2012-06-20 16:38:30 -07002612/*
2613 * FUNCTION: WDA_ProcessChannelSwitchReq
2614 * Request to WDI to switch channel REQ params.
2615 */
2616VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2617 tSwitchChannelParams *pSwitchChanParams)
2618{
2619 WDI_Status status = WDI_STATUS_SUCCESS ;
2620 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2621 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2622 sizeof(WDI_SwitchChReqParamsType)) ;
2623 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002625 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002626 if(NULL == wdiSwitchChanParam)
2627 {
2628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002629 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002630 VOS_ASSERT(0);
2631 return VOS_STATUS_E_NOMEM;
2632 }
2633 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2634 if(NULL == pWdaParams)
2635 {
2636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002637 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 VOS_ASSERT(0);
2639 vos_mem_free(wdiSwitchChanParam);
2640 return VOS_STATUS_E_NOMEM;
2641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002642 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2643#ifndef WLAN_FEATURE_VOWIFI
2644 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2645 pSwitchChanParams->localPowerConstraint;
2646#endif
2647 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2648 pSwitchChanParams->secondaryChannelOffset;
2649 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002650 /* Store req pointer, as this will be used for response */
2651 /* store Params pass it to WDI */
2652 pWdaParams->pWdaContext = pWDA;
2653 pWdaParams->wdaMsgParam = pSwitchChanParams;
2654 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002655#ifdef WLAN_FEATURE_VOWIFI
2656 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2657 = pSwitchChanParams->maxTxPower;
2658 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2659 pSwitchChanParams ->selfStaMacAddr,
2660 sizeof(tSirMacAddr));
2661#endif
2662 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2663 pSwitchChanParams->bssId,
2664 sizeof(tSirMacAddr));
2665
2666 status = WDI_SwitchChReq(wdiSwitchChanParam,
2667 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 if(IS_WDI_STATUS_FAILURE(status))
2669 {
2670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2671 "Failure in process channel switch Req WDI API, free all the memory " );
2672 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2673 vos_mem_free(pWdaParams) ;
2674 pSwitchChanParams->status = eSIR_FAILURE ;
2675 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002677 return CONVERT_WDI2VOS_STATUS(status) ;
2678}
Jeff Johnson295189b2012-06-20 16:38:30 -07002679/*
2680 * FUNCTION: WDA_ConfigBssReqCallback
2681 * config BSS Req Callback, called by WDI
2682 */
2683void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2684 ,void* pUserData)
2685{
2686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2687 tWDA_CbContext *pWDA;
2688 tAddBssParams *configBssReqParam;
2689 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002692 if(NULL == pWdaParams)
2693 {
2694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002695 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002696 VOS_ASSERT(0) ;
2697 return ;
2698 }
2699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2700 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
2701 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 configBssReqParam->status =
2703 CONVERT_WDI2SIR_STATUS(wdiConfigBssRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002704 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
2705 {
2706 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
2707 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07002708 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
2709 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
2710 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
2711
2712 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
2713 {
2714 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
2715 {
2716 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
2717 staConfigBssParam->staType = STA_ENTRY_BSSID;
2718 }
2719 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
2720 (staConfigBssParam->staType == STA_ENTRY_SELF))
2721 {
2722 /* This is the 1st add BSS Req for the BTAMP STA */
2723 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2724 staConfigBssParam->staType = STA_ENTRY_BSSID;
2725 }
2726 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2727 (staConfigBssParam->staType == STA_ENTRY_PEER))
2728 {
2729 /* This is the 2nd ADD BSS Request that is sent
2730 * on the BTAMP STA side. The Sta type is
2731 * set to STA_ENTRY_PEER here.*/
2732 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
2733 }
2734 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
2735 (staConfigBssParam->staType == STA_ENTRY_SELF))
2736 {
2737 /* statype is already set by PE.
2738 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
2739 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
2740 staConfigBssParam->staType = STA_ENTRY_BSSID;
2741 }
2742 else
2743 {
2744 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
2745 staConfigBssParam->staType = STA_ENTRY_PEER;
2746 }
2747 }
2748 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
2749 {
2750 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
2751 staConfigBssParam->staType = STA_ENTRY_SELF;
2752 }
2753 else
2754 {
2755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2756 "Invalid operation mode specified");
2757 VOS_ASSERT(0);
2758 }
2759
2760 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002762 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002763 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
2765 sizeof(tSirMacAddr));
2766 staConfigBssParam->txChannelWidthSet =
2767 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
2769 staConfigBssParam->htCapable)
2770 {
2771 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
2772 wdiConfigBssRsp->ucBSSIdx;
2773 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
2774 WDA_VALID_STA_INDEX ;
2775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002776 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
2777 wdiConfigBssRsp->ucBSSIdx,
2778 wdiConfigBssRsp->ucSTAIdx))
2779 {
2780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002781 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002782 VOS_ASSERT(0) ;
2783 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002784 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
2785 {
2786 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002787 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002788 VOS_ASSERT(0) ;
2789 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002790#ifdef WLAN_FEATURE_VOWIFI
2791 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
2792#endif
2793 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2795 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 return ;
2798}
Jeff Johnson295189b2012-06-20 16:38:30 -07002799/*
2800 * FUNCTION: WDA_UpdateEdcaParamsForAC
2801 * Update WDI EDCA params with PE edca params
2802 */
2803void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
2804 WDI_EdcaParamRecord *wdiEdcaParam,
2805 tSirMacEdcaParamRecord *macEdcaParam)
2806{
2807 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
2808 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
2809 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
2810 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
2811 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
2812 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
2813}
Jeff Johnson295189b2012-06-20 16:38:30 -07002814/*
2815 * FUNCTION: WDA_ProcessConfigBssReq
2816 * Configure BSS before starting Assoc with AP
2817 */
2818VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
2819 tAddBssParams* configBssReqParam)
2820{
2821 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam =
2823 (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
2824 sizeof(WDI_ConfigBSSReqParamsType)) ;
2825 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002827 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002828 if(NULL == wdiConfigBssReqParam)
2829 {
2830 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002831 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002832 VOS_ASSERT(0);
2833 return VOS_STATUS_E_NOMEM;
2834 }
2835 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2836 if(NULL == pWdaParams)
2837 {
2838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002839 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002840 VOS_ASSERT(0);
2841 vos_mem_free(wdiConfigBssReqParam);
2842 return VOS_STATUS_E_NOMEM;
2843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002844 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07002845 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
2846 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 /* Store Init Req pointer, as this will be used for response */
2848 /* store Params pass it to WDI */
2849 pWdaParams->pWdaContext = pWDA;
2850 pWdaParams->wdaMsgParam = configBssReqParam;
2851 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002852 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
2853 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002854 if(IS_WDI_STATUS_FAILURE(status))
2855 {
2856 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2857 "Failure in Config BSS WDI API, free all the memory " );
2858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2859 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002860 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
2862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 return CONVERT_WDI2VOS_STATUS(status) ;
2864}
Jeff Johnson295189b2012-06-20 16:38:30 -07002865#ifdef ENABLE_HAL_COMBINED_MESSAGES
2866/*
2867 * FUNCTION: WDA_PostAssocReqCallback
2868 * Post ASSOC req callback, send RSP back to PE
2869 */
2870void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
2871 void* pUserData)
2872{
2873 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
2874 tPostAssocParams *postAssocReqParam =
2875 (tPostAssocParams *)pWDA->wdaMsgParam ;
2876 /*STA context within the BSS Params*/
2877 tAddStaParams *staPostAssocParam =
2878 &postAssocReqParam->addBssParams.staContext ;
2879 /*STA Params for self STA*/
2880 tAddStaParams *selfStaPostAssocParam =
2881 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002883 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002884 postAssocReqParam->status =
2885 CONVERT_WDI2SIR_STATUS(wdiPostAssocRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002886 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
2887 {
2888 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
2889 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
2890 sizeof(tSirMacAddr)) ;
2891 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
2892 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
2893 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07002894 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
2895 }
2896 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2897 pWDA->wdaWdiApiMsgParam = NULL;
2898 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 return ;
2901}
Jeff Johnson295189b2012-06-20 16:38:30 -07002902/*
2903 * FUNCTION: WDA_ProcessPostAssocReq
2904 * Trigger POST ASSOC processing in WDI
2905 */
2906VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
2907 tPostAssocParams *postAssocReqParam)
2908{
Jeff Johnson295189b2012-06-20 16:38:30 -07002909 WDI_Status status = WDI_STATUS_SUCCESS ;
2910
2911 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
2912 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
2913 sizeof(WDI_PostAssocReqParamsType)) ;
2914 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002915 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002916
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 if(NULL == wdiPostAssocReqParam)
2918 {
2919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002921 VOS_ASSERT(0);
2922 return VOS_STATUS_E_NOMEM;
2923 }
2924
2925 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
2926 {
2927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002928 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 VOS_ASSERT(0);
2930 return VOS_STATUS_E_FAILURE;
2931 }
2932
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 /* update BSS params into WDI structure */
2934 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
2935 &postAssocReqParam->addBssParams) ;
2936 /* update STA params into WDI structure */
2937 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
2938 &postAssocReqParam->addStaParams) ;
2939
2940 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
2941 postAssocReqParam->addBssParams.highPerformance;
2942 WDA_UpdateEdcaParamsForAC(pWDA,
2943 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
2944 &postAssocReqParam->addBssParams.acbe);
2945 WDA_UpdateEdcaParamsForAC(pWDA,
2946 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
2947 &postAssocReqParam->addBssParams.acbk);
2948 WDA_UpdateEdcaParamsForAC(pWDA,
2949 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
2950 &postAssocReqParam->addBssParams.acvi);
2951 WDA_UpdateEdcaParamsForAC(pWDA,
2952 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
2953 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07002954 /* Store Init Req pointer, as this will be used for response */
2955 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002956 /* store Params pass it to WDI */
2957 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002958 status = WDI_PostAssocReq(wdiPostAssocReqParam,
2959 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002960 if(IS_WDI_STATUS_FAILURE(status))
2961 {
2962 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2963 "Failure in Post Assoc WDI API, free all the memory " );
2964 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
2965 pWDA->wdaWdiApiMsgParam = NULL;
2966 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07002967 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002968 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
2969 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002970 return CONVERT_WDI2VOS_STATUS(status) ;
2971}
2972#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002973/*
2974 * FUNCTION: WDA_AddStaReqCallback
2975 * ADD STA req callback, send RSP back to PE
2976 */
2977void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
2978 void* pUserData)
2979{
2980 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2981 tWDA_CbContext *pWDA;
2982 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002984 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002985 if(NULL == pWdaParams)
2986 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002987 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002988 VOS_ASSERT(0) ;
2989 return ;
2990 }
2991 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2992 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002993 addStaReqParam->status =
2994 CONVERT_WDI2SIR_STATUS(wdiConfigStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002995 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
2996 {
2997 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
2998 /*TODO: UMAC structure doesn't have these fields*/
2999 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3000 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3001 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3002 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3003 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3004 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003005#ifdef FEATURE_WLAN_TDLS
3006 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3007 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3008#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003010#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 {
3012 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3013 wdiConfigStaRsp->ucBssIdx;
3014 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3015 WDA_VALID_STA_INDEX ;
3016 }
3017 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3018 {
3019 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003020 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003021 VOS_ASSERT(0) ;
3022 return ;
3023 }
3024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003025 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3026 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003027 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003028 return ;
3029}
Jeff Johnson295189b2012-06-20 16:38:30 -07003030/*
3031 * FUNCTION: WDA_ConfigStaReq
3032 * Trigger Config STA processing in WDI
3033 */
3034VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3035 tAddStaParams *addStaReqParam)
3036{
Jeff Johnson295189b2012-06-20 16:38:30 -07003037 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003038 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3039 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3040 sizeof(WDI_ConfigSTAReqParamsType)) ;
3041 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003042 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003043 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003044 if(NULL == wdiConfigStaReqParam)
3045 {
3046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003047 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003048 VOS_ASSERT(0);
3049 return VOS_STATUS_E_NOMEM;
3050 }
3051 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3052 if(NULL == pWdaParams)
3053 {
3054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003055 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003056 VOS_ASSERT(0);
3057 vos_mem_free(wdiConfigStaReqParam);
3058 return VOS_STATUS_E_NOMEM;
3059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003060 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003061 /* update STA params into WDI structure */
3062 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3063 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003064 /* Store Init Req pointer, as this will be used for response */
3065 /* store Params pass it to WDI */
3066 pWdaParams->pWdaContext = pWDA;
3067 pWdaParams->wdaMsgParam = addStaReqParam;
3068 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3070 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 if(IS_WDI_STATUS_FAILURE(status))
3072 {
3073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3074 "Failure in Config STA WDI API, free all the memory " );
3075 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3076 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003077 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3079 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003080 return CONVERT_WDI2VOS_STATUS(status) ;
3081}
Jeff Johnson295189b2012-06-20 16:38:30 -07003082/*
3083 * FUNCTION: WDA_DelBSSReqCallback
3084 * Dens DEL BSS RSP back to PE
3085 */
3086void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3087 void* pUserData)
3088{
3089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3090 tWDA_CbContext *pWDA;
3091 tDeleteBssParams *delBssReqParam;
3092 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 if(NULL == pWdaParams)
3096 {
3097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003098 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 VOS_ASSERT(0) ;
3100 return ;
3101 }
3102 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3103 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 delBssReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelBssRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3106 {
3107 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3108 sizeof(tSirMacAddr)) ;
3109 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003110 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3111 {
3112 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003113 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 VOS_ASSERT(0) ;
3115 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3117 {
3118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003119 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003120 VOS_ASSERT(0) ;
3121 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003122 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3123 {
3124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003125 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003126 VOS_ASSERT(0) ;
3127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003128 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3129 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 /* reset the the system role*/
3131 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3132
3133 /* Reset the BA related information */
3134 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3135 {
3136 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3137 {
3138 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3139 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3140 /* Reset framesTxed counters here */
3141 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3142 {
3143 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3144 }
3145 }
3146 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003148 return ;
3149}
3150
Jeff Johnson295189b2012-06-20 16:38:30 -07003151/*
3152 * FUNCTION: WDA_ProcessDelBssReq
3153 * Init DEL BSS req with WDI
3154 */
3155VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3156 tDeleteBssParams *delBssParam)
3157{
3158 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3160 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3161 sizeof(WDI_DelBSSReqParamsType)) ;
3162 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003164 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003165 if(NULL == wdiDelBssReqParam)
3166 {
3167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003168 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 VOS_ASSERT(0);
3170 return VOS_STATUS_E_NOMEM;
3171 }
3172 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3173 if(NULL == pWdaParams)
3174 {
3175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003176 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 VOS_ASSERT(0);
3178 vos_mem_free(wdiDelBssReqParam);
3179 return VOS_STATUS_E_NOMEM;
3180 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003181 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3182 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3183
3184 /* Store Init Req pointer, as this will be used for response */
3185 /* store Params pass it to WDI */
3186 pWdaParams->pWdaContext = pWDA;
3187 pWdaParams->wdaMsgParam = delBssParam;
3188 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003189 status = WDI_DelBSSReq(wdiDelBssReqParam,
3190 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003191 if(IS_WDI_STATUS_FAILURE(status))
3192 {
3193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3194 "Failure in Del BSS WDI API, free all the memory " );
3195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3196 vos_mem_free(pWdaParams) ;
3197 delBssParam->status = eSIR_FAILURE ;
3198 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003200 return CONVERT_WDI2VOS_STATUS(status) ;
3201}
Jeff Johnson295189b2012-06-20 16:38:30 -07003202/*
3203 * FUNCTION: WDA_DelSTAReqCallback
3204 * Dens DEL STA RSP back to PE
3205 */
3206void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3207 void* pUserData)
3208{
3209 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3210 tWDA_CbContext *pWDA;
3211 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003213 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003214 if(NULL == pWdaParams)
3215 {
3216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003217 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003218 VOS_ASSERT(0) ;
3219 return ;
3220 }
3221 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3222 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003223 delStaReqParam->status = CONVERT_WDI2SIR_STATUS(wdiDelStaRsp->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003224 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3225 {
3226 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3227 {
3228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003229 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003230 VOS_ASSERT(0) ;
3231 }
3232 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3233 }
3234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3235 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003236 /*Reset the BA information corresponding to this STAIdx */
3237 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3238 WDA_INVALID_STA_INDEX;
3239 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3240
3241 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003242 return ;
3243}
Jeff Johnson295189b2012-06-20 16:38:30 -07003244/*
3245 * FUNCTION: WDA_ProcessDelStaReq
3246 * Init DEL STA req with WDI
3247 */
3248VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3249 tDeleteStaParams *delStaParam)
3250{
3251 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003252 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3253 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3254 sizeof(WDI_DelSTAReqParamsType)) ;
3255 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003258 if(NULL == wdiDelStaReqParam)
3259 {
3260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003261 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003262 VOS_ASSERT(0);
3263 return VOS_STATUS_E_NOMEM;
3264 }
3265 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3266 if(NULL == pWdaParams)
3267 {
3268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003270 VOS_ASSERT(0);
3271 vos_mem_free(wdiDelStaReqParam);
3272 return VOS_STATUS_E_NOMEM;
3273 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003274 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3275 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003276 /* Store Init Req pointer, as this will be used for response */
3277 /* store Params pass it to WDI */
3278 pWdaParams->pWdaContext = pWDA;
3279 pWdaParams->wdaMsgParam = delStaParam;
3280 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003281 status = WDI_DelSTAReq(wdiDelStaReqParam,
3282 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003283 if(IS_WDI_STATUS_FAILURE(status))
3284 {
3285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3286 "Failure in Del STA WDI API, free all the memory status = %d",
3287 status );
3288 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3289 vos_mem_free(pWdaParams) ;
3290 delStaParam->status = eSIR_FAILURE ;
3291 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003293 return CONVERT_WDI2VOS_STATUS(status) ;
3294}
Jeff Johnson295189b2012-06-20 16:38:30 -07003295void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3296{
3297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3298 tWDA_CbContext *pWDA;
3299 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003301 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003302 if(NULL == pWdaParams)
3303 {
3304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003305 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003306 VOS_ASSERT(0) ;
3307 return ;
3308 }
3309 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3310 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3312 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003313 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3314 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3315 pwdiAddSTASelfRsp->macSelfSta,
3316 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003317 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003318 return ;
3319}
Jeff Johnson295189b2012-06-20 16:38:30 -07003320/*
3321 * FUNCTION: WDA_ProcessAddStaSelfReq
3322 *
3323 */
3324VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3325{
3326 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003327 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3329 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3330 sizeof(WDI_AddSTASelfReqParamsType)) ;
3331 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003333 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003334 if( NULL == wdiAddStaSelfReq )
3335 {
3336 VOS_ASSERT( 0 );
3337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003338 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003339 return( VOS_STATUS_E_NOMEM );
3340 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 if( NULL == pWdaParams )
3343 {
3344 VOS_ASSERT( 0 );
3345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003346 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003347 vos_mem_free(wdiAddStaSelfReq) ;
3348 return( VOS_STATUS_E_NOMEM );
3349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003350 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003351 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
3352 /* Store Init Req pointer, as this will be used for response */
3353 /* store Params pass it to WDI */
3354 pWdaParams->pWdaContext = pWDA;
3355 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3356 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003357 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003358
Jeff Johnson43971f52012-07-17 12:26:56 -07003359 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003360 {
3361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3362 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003363 wstatus );
3364 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3366 vos_mem_free(pWdaParams) ;
3367 pAddStaSelfReq->status = eSIR_FAILURE ;
3368 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3369 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003370 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003371}
Jeff Johnson295189b2012-06-20 16:38:30 -07003372/*
3373 * FUNCTION: WDA_DelSTASelfRespCallback
3374 *
3375 */
3376void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3377 wdiDelStaSelfRspParams , void* pUserData)
3378{
3379 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3380 tWDA_CbContext *pWDA;
3381 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003383 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003384 if (NULL == pWdaParams)
3385 {
3386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003387 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 VOS_ASSERT(0);
3389 return;
3390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003391 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3392 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003393 delStaSelfParams->status =
3394 CONVERT_WDI2SIR_STATUS(wdiDelStaSelfRspParams->wdiStatus) ;
3395
3396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3397 vos_mem_free(pWdaParams) ;
3398
3399 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 return ;
3401}
Jeff Johnson295189b2012-06-20 16:38:30 -07003402/*
3403 * FUNCTION: WDA_DelSTASelfReqCallback
3404 *
3405 */
3406void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3407 void* pUserData)
3408{
3409 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3410 tWDA_CbContext *pWDA;
3411 tDelStaSelfParams *delStaSelfParams;
3412
3413 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3414 "<------ %s, wdiStatus: %d pWdaParams: 0x%x",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416
3417 if (NULL == pWdaParams)
3418 {
3419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003420 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 VOS_ASSERT(0);
3422 return;
3423 }
3424
3425 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3426 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3427
3428 delStaSelfParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
3429
3430 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3431 {
3432 VOS_ASSERT(0);
3433 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3434 vos_mem_free(pWdaParams) ;
3435 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3436 }
3437
3438 return ;
3439}
3440
3441/*
3442 * FUNCTION: WDA_DelSTASelfReq
3443 * Trigger Config STA processing in WDI
3444 */
3445VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3446 tDelStaSelfParams* pDelStaSelfReqParam)
3447{
3448 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003449 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003450 tWDA_ReqParams *pWdaParams = NULL;
3451 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3452 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3453 sizeof(WDI_DelSTASelfReqParamsType)) ;
3454
Jeff Johnson295189b2012-06-20 16:38:30 -07003455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003456 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003457 if( NULL == wdiDelStaSelfReq )
3458 {
3459 VOS_ASSERT( 0 );
3460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003461 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003462 return( VOS_STATUS_E_NOMEM );
3463 }
3464
3465 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3466 if( NULL == pWdaParams )
3467 {
3468 VOS_ASSERT( 0 );
3469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003470 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003471 vos_mem_free(wdiDelStaSelfReq) ;
3472 return( VOS_STATUS_E_NOMEM );
3473 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003474 pWdaParams->pWdaContext = pWDA;
3475 /* Store param pointer as passed in by caller */
3476 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3477 /* store Params pass it to WDI */
3478 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3480 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3481
3482 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3483 wdiDelStaSelfReq->pUserData = pWdaParams;
3484
Jeff Johnson43971f52012-07-17 12:26:56 -07003485 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3487
Jeff Johnson43971f52012-07-17 12:26:56 -07003488 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003489 {
3490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3491 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3492 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003493 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3495 vos_mem_free(pWdaParams) ;
3496 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3497 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3498 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003499 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003500}
3501
Jeff Johnson295189b2012-06-20 16:38:30 -07003502/*
3503 * FUNCTION: WDA_SendMsg
3504 * Send Message back to PE
3505 */
3506void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3507 void *pBodyptr, tANI_U32 bodyVal)
3508{
3509 tSirMsgQ msg = {0} ;
3510 tANI_U32 status = VOS_STATUS_SUCCESS ;
3511 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003512 msg.type = msgType;
3513 msg.bodyval = bodyVal;
3514 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003515 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 if (VOS_STATUS_SUCCESS != status)
3517 {
3518 if(NULL != pBodyptr)
3519 {
3520 vos_mem_free(pBodyptr);
3521 }
3522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003523 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003524 VOS_ASSERT(0) ;
3525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003526 return ;
3527}
Jeff Johnson295189b2012-06-20 16:38:30 -07003528/*
3529 * FUNCTION: WDA_UpdateBSSParams
3530 * Translated WDA/PE BSS info into WDI BSS info..
3531 */
3532void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3533 WDI_ConfigBSSReqInfoType *wdiBssParams,
3534 tAddBssParams *wdaBssParams)
3535{
3536 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003537 /* copy bssReq Params to WDI structure */
3538 vos_mem_copy(wdiBssParams->macBSSID,
3539 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3540 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3541 sizeof(tSirMacAddr)) ;
3542 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3543 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3544 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003545 wdiBssParams->ucShortSlotTimeSupported =
3546 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3548 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3549 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3550 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3551 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3552
3553 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3554 wdiBssParams->ucTXOPProtectionFullSupport =
3555 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003556 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3557 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003558 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3560 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3561 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3562 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3563
3564 /* copy SSID into WDI structure */
3565 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3566 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3567 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003568 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3569 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003570 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003571#ifdef WLAN_FEATURE_VOWIFI
3572 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3573#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003574 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003576#ifdef WLAN_FEATURE_VOWIFI_11R
3577 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003578 if(wdiBssParams->bExtSetStaKeyParamValid)
3579 {
3580 /* copy set STA key params to WDI structure */
3581 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3582 wdaBssParams->extSetStaKeyParam.staIdx;
3583 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3584 wdaBssParams->extSetStaKeyParam.encType;
3585 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3586 wdaBssParams->extSetStaKeyParam.wepType;
3587 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3588 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003589 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3590 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003591 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3593 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3594 {
3595 WDA_GetWepKeysFromCfg( pWDA,
3596 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3597 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3598 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3599 }
3600 else
3601 {
3602#ifdef WLAN_SOFTAP_FEATURE
3603 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3604 keyIndex++)
3605 {
3606 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3607 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3608 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3609 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3610 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3611 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003612 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3613 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3614 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3615 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3616 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3617 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3618 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3619 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3620 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003621 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3622 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3623#else
3624 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyId =
3625 wdaBssParams->extSetStaKeyParam.key.keyId;
3626 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].unicast =
3627 wdaBssParams->extSetStaKeyParam.key.unicast;
3628 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyDirection =
3629 wdaBssParams->extSetStaKeyParam.key.keyDirection;
3630 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyRsc,
3631 wdaBssParams->extSetStaKeyParam.key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
3632 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].paeRole =
3633 wdaBssParams->extSetStaKeyParam.key.paeRole;
3634 wdiBssParams->wdiExtSetKeyParam.wdiKey[0].keyLength =
3635 wdaBssParams->extSetStaKeyParam.key.keyLength;
3636 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[0].key,
3637 wdaBssParams->extSetStaKeyParam.key[keyIndex].key,
3638 SIR_MAC_MAX_KEY_LENGTH);
3639 wdiBssParams->wdiExtSetKeyParam.ucNumKeys = 1;
3640#endif
3641 }
3642 }
3643 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3644 }
3645 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3646 {
3647 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3648 sizeof(wdaBssParams->extSetStaKeyParam) );
3649 }
3650#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003651#ifdef WLAN_FEATURE_11AC
3652 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3653 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3654#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003655
3656 return ;
3657}
Jeff Johnson295189b2012-06-20 16:38:30 -07003658/*
3659 * FUNCTION: WDA_UpdateSTAParams
3660 * Translated WDA/PE BSS info into WDI BSS info..
3661 */
3662void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3663 WDI_ConfigStaReqInfoType *wdiStaParams,
3664 tAddStaParams *wdaStaParams)
3665{
3666 tANI_U8 i = 0;
3667 /* Update STA params */
3668 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3669 sizeof(tSirMacAddr)) ;
3670 wdiStaParams->usAssocId = wdaStaParams->assocId;
3671 wdiStaParams->wdiSTAType = wdaStaParams->staType;
3672
3673 wdiStaParams->ucShortPreambleSupported =
3674 wdaStaParams->shortPreambleSupported;
3675 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3676 sizeof(tSirMacAddr)) ;
3677 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3678
3679 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3680
3681 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3682 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3683 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3684 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3685 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3686 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3687 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3688
3689 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3690 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003691 wdiStaParams->wdiSupportedRates.opRateMode =
3692 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003693 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3694 {
3695 wdiStaParams->wdiSupportedRates.llbRates[i] =
3696 wdaStaParams->supportedRates.llbRates[i];
3697 }
3698 for(i = 0;i < WDI_NUM_11A_RATES;i++)
3699 {
3700 wdiStaParams->wdiSupportedRates.llaRates[i] =
3701 wdaStaParams->supportedRates.llaRates[i];
3702 }
3703 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
3704 {
3705 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
3706 wdaStaParams->supportedRates.aniLegacyRates[i];
3707 }
3708 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
3709 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07003710#ifdef WLAN_FEATURE_11AC
3711 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
3712 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
3713 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
3714 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
3715#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003716 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
3717 {
3718 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
3719 wdaStaParams->supportedRates.supportedMCSSet[i];
3720 }
3721 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
3722 wdaStaParams->supportedRates.rxHighestDataRate;
3723
3724 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
3725
3726 wdiStaParams->wdiAction = wdaStaParams->updateSta;
3727
3728 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
3729 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
3730 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
3731
3732 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
3733 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
3734 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
3735 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
3736#ifdef WLAN_FEATURE_P2P
3737 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
3738#endif
Jeff Johnsone7245742012-09-05 17:12:55 -07003739#ifdef WLAN_FEATURE_11AC
3740 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
3741 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
3742#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003743 return ;
3744}
Jeff Johnson295189b2012-06-20 16:38:30 -07003745/*
3746 * -------------------------------------------------------------------------
3747 * CFG update to WDI
3748 * -------------------------------------------------------------------------
3749 */
3750
3751 /*
3752 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
3753 * Convert the WNI CFG ID to HAL CFG ID
3754 */
Jeff Johnsone7245742012-09-05 17:12:55 -07003755static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07003756{
3757 switch(wniCfgId)
3758 {
3759 case WNI_CFG_STA_ID:
3760 return QWLAN_HAL_CFG_STA_ID;
3761 case WNI_CFG_CURRENT_TX_ANTENNA:
3762 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
3763 case WNI_CFG_CURRENT_RX_ANTENNA:
3764 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
3765 case WNI_CFG_LOW_GAIN_OVERRIDE:
3766 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
3767 case WNI_CFG_POWER_STATE_PER_CHAIN:
3768 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
3769 case WNI_CFG_CAL_PERIOD:
3770 return QWLAN_HAL_CFG_CAL_PERIOD;
3771 case WNI_CFG_CAL_CONTROL:
3772 return QWLAN_HAL_CFG_CAL_CONTROL;
3773 case WNI_CFG_PROXIMITY:
3774 return QWLAN_HAL_CFG_PROXIMITY;
3775 case WNI_CFG_NETWORK_DENSITY:
3776 return QWLAN_HAL_CFG_NETWORK_DENSITY;
3777 case WNI_CFG_MAX_MEDIUM_TIME:
3778 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
3779 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
3780 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
3781 case WNI_CFG_RTS_THRESHOLD:
3782 return QWLAN_HAL_CFG_RTS_THRESHOLD;
3783 case WNI_CFG_SHORT_RETRY_LIMIT:
3784 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
3785 case WNI_CFG_LONG_RETRY_LIMIT:
3786 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
3787 case WNI_CFG_FRAGMENTATION_THRESHOLD:
3788 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
3789 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
3790 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
3791 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
3792 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
3793 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
3794 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
3795 case WNI_CFG_FIXED_RATE:
3796 return QWLAN_HAL_CFG_FIXED_RATE;
3797 case WNI_CFG_RETRYRATE_POLICY:
3798 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
3799 case WNI_CFG_RETRYRATE_SECONDARY:
3800 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
3801 case WNI_CFG_RETRYRATE_TERTIARY:
3802 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
3803 case WNI_CFG_FORCE_POLICY_PROTECTION:
3804 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
3805 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
3806 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
3807 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
3808 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
3809 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
3810 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
3811 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
3812 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
3813 case WNI_CFG_MAX_BA_SESSIONS:
3814 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
3815 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
3816 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
3817 case WNI_CFG_PS_ENABLE_BCN_FILTER:
3818 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
3819 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
3820 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
3821 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
3822 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
3823 case WNI_CFG_STATS_PERIOD:
3824 return QWLAN_HAL_CFG_STATS_PERIOD;
3825 case WNI_CFG_CFP_MAX_DURATION:
3826 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
3827#if 0 /*This is not part of CFG*/
3828 case WNI_CFG_FRAME_TRANS_ENABLED:
3829 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
3830#endif
3831 case WNI_CFG_DTIM_PERIOD:
3832 return QWLAN_HAL_CFG_DTIM_PERIOD;
3833 case WNI_CFG_EDCA_WME_ACBK:
3834 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
3835 case WNI_CFG_EDCA_WME_ACBE:
3836 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
3837 case WNI_CFG_EDCA_WME_ACVI:
3838 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
3839 case WNI_CFG_EDCA_WME_ACVO:
3840 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
3841#if 0
3842 case WNI_CFG_TELE_BCN_WAKEUP_EN:
3843 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
3844 case WNI_CFG_TELE_BCN_TRANS_LI:
3845 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
3846 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
3847 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
3848 case WNI_CFG_TELE_BCN_MAX_LI:
3849 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
3850 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
3851 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
3852#endif
3853 case WNI_CFG_ENABLE_CLOSE_LOOP:
3854 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
3855 default:
3856 {
3857 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3858 "There is no HAL CFG Id corresponding to WNI CFG Id: %d\n",
3859 wniCfgId);
3860 return VOS_STATUS_E_INVAL;
3861 }
3862 }
3863}
Jeff Johnson295189b2012-06-20 16:38:30 -07003864/*
3865 * FUNCTION: WDA_UpdateCfgCallback
3866 *
3867 */
3868void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
3869{
3870 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3871 WDI_UpdateCfgReqParamsType *wdiCfgParam =
3872 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003874 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003875 /*
3876 * currently there is no response message is expected between PE and
3877 * WDA, Failure return from WDI is a ASSERT condition
3878 */
3879 if(WDI_STATUS_SUCCESS != wdiStatus)
3880 {
3881 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003882 "%s: CFG (%d) config failure \n", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07003883 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
3884 }
3885
3886 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
3887 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3888 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003889 return ;
3890}
Jeff Johnson295189b2012-06-20 16:38:30 -07003891/*
3892 * FUNCTION: WDA_UpdateCfg
3893 *
3894 */
3895VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
3896{
3897
3898 WDI_Status status = WDI_STATUS_SUCCESS ;
3899 tANI_U32 val =0;
3900 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
3901 tHalCfg *configData;
3902 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
3903 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003905 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003906 if (NULL == pMac )
3907 {
3908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003909 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 return VOS_STATUS_E_FAILURE;
3911 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 if(WDA_START_STATE != pWDA->wdaState)
3913 {
3914 return VOS_STATUS_E_FAILURE;
3915 }
3916
3917 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003920 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003921 VOS_ASSERT(0);
3922 return VOS_STATUS_E_FAILURE;
3923 }
3924
3925 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
3926 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 if(NULL == wdiCfgReqParam)
3928 {
3929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 VOS_ASSERT(0);
3932 return VOS_STATUS_E_NOMEM;
3933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003934 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
3935 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(NULL == wdiCfgReqParam->pConfigBuffer)
3937 {
3938 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: VOS MEM Alloc Failure \n", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 vos_mem_free(wdiCfgReqParam);
3941 VOS_ASSERT(0);
3942 return VOS_STATUS_E_NOMEM;
3943 }
3944
3945 /*convert the WNI CFG Id to HAL CFG Id*/
3946 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
3947 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
3948
3949 /*TODO: revisit this for handling string parameters */
3950 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
3951 &val) != eSIR_SUCCESS)
3952 {
3953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3954 "Failed to cfg get id %d\n", cfgParam->bodyval);
3955 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
3956 vos_mem_free(wdiCfgReqParam);
3957 return eSIR_FAILURE;
3958 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003959 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
3960 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
3961 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
3962 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
3963 wdiCfgReqParam->wdiReqStatusCB = NULL ;
3964
3965 /* store Params pass it to WDI */
3966 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003967#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
3968 status = WDI_UpdateCfgReq(wdiCfgReqParam,
3969 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003970 if(IS_WDI_STATUS_FAILURE(status))
3971 {
3972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3973 "Failure in Update CFG WDI API, free all the memory " );
3974 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3975 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3976 pWDA->wdaWdiCfgApiMsgParam = NULL;
3977 /* Failure is not expected */
3978 VOS_ASSERT(0) ;
3979 }
3980#else
3981 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
3982 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
3983 pWDA->wdaWdiCfgApiMsgParam = NULL;
3984#endif
3985 return CONVERT_WDI2VOS_STATUS(status) ;
3986}
3987
Jeff Johnson295189b2012-06-20 16:38:30 -07003988VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
3989 v_U8_t *pDefaultKeyId,
3990 v_U8_t *pNumKeys,
3991 WDI_KeysType *pWdiKeys )
3992{
3993 v_U32_t i, j, defKeyId = 0;
3994 v_U32_t val = SIR_MAC_KEY_LENGTH;
3995 VOS_STATUS status = WDI_STATUS_SUCCESS;
3996 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003997 if (NULL == pMac )
3998 {
3999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004000 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004001 return VOS_STATUS_E_FAILURE;
4002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004003 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4004 &defKeyId ))
4005 {
4006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4007 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4008 }
4009
4010 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004011 /* Need to extract ALL of the configured WEP Keys */
4012 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4013 {
4014 val = SIR_MAC_KEY_LENGTH;
4015 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4016 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4017 pWdiKeys[j].key,
4018 &val ))
4019 {
4020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4021 "WEP Key index [%d] may not configured in CFG\n",i);
4022 }
4023 else
4024 {
4025 pWdiKeys[j].keyId = (tANI_U8) i;
4026 /*
4027 * Actually, a DC (Don't Care) because
4028 * this is determined (and set) by PE/MLME
4029 */
4030 pWdiKeys[j].unicast = 0;
4031 /*
4032 * Another DC (Don't Care)
4033 */
4034 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4035 /* Another DC (Don't Care). Unused for WEP */
4036 pWdiKeys[j].paeRole = 0;
4037 /* Determined from wlan_cfgGetStr() above.*/
4038 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004039 j++;
4040 *pNumKeys = (tANI_U8) j;
4041 }
4042 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004043 return status;
4044}
Jeff Johnson295189b2012-06-20 16:38:30 -07004045/*
4046 * FUNCTION: WDA_SetBssKeyReqCallback
4047 * send SET BSS key RSP back to PE
4048 */
4049void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4050{
4051 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4052 tWDA_CbContext *pWDA;
4053 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004055 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 if(NULL == pWdaParams)
4057 {
4058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004059 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004060 VOS_ASSERT(0) ;
4061 return ;
4062 }
4063 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4064 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4066 vos_mem_free(pWdaParams) ;
4067 setBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004068 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004069 return ;
4070}
Jeff Johnson295189b2012-06-20 16:38:30 -07004071/*
4072 * FUNCTION: WDA_ProcessSetBssKeyReq
4073 * Request to WDI for programming the BSS key( key for
4074 * broadcast/multicast frames Encryption)
4075 */
4076VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4077 tSetBssKeyParams *setBssKeyParams )
4078{
4079 WDI_Status status = WDI_STATUS_SUCCESS ;
4080 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4081 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4082 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4083 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004084 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004086 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004087 if(NULL == wdiSetBssKeyParam)
4088 {
4089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004090 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004091 VOS_ASSERT(0);
4092 return VOS_STATUS_E_NOMEM;
4093 }
4094 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4095 if(NULL == pWdaParams)
4096 {
4097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004098 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004099 VOS_ASSERT(0);
4100 vos_mem_free(wdiSetBssKeyParam);
4101 return VOS_STATUS_E_NOMEM;
4102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004103 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004104 /* copy set BSS params to WDI structure */
4105 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4106 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4107 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004108 if(setBssKeyParams->encType != eSIR_ED_NONE)
4109 {
4110 if( setBssKeyParams->numKeys == 0 &&
4111 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4112 setBssKeyParams->encType == eSIR_ED_WEP104))
4113 {
4114 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004115 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4116 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4117 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4118 }
4119 else
4120 {
4121 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4122 {
4123 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4124 setBssKeyParams->key[keyIndex].keyId;
4125 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4126 setBssKeyParams->key[keyIndex].unicast;
4127 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4128 setBssKeyParams->key[keyIndex].keyDirection;
4129 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4130 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4131 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4132 setBssKeyParams->key[keyIndex].paeRole;
4133 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4134 setBssKeyParams->key[keyIndex].keyLength;
4135 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4136 setBssKeyParams->key[keyIndex].key,
4137 SIR_MAC_MAX_KEY_LENGTH);
4138 }
4139 }
4140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004141 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4142 setBssKeyParams->singleTidRc;
4143 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004144 /* Store set key pointer, as this will be used for response */
4145 /* store Params pass it to WDI */
4146 pWdaParams->pWdaContext = pWDA;
4147 pWdaParams->wdaMsgParam = setBssKeyParams;
4148 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004149 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4150 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4151
4152 if(IS_WDI_STATUS_FAILURE(status))
4153 {
4154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4155 "Failure in Set BSS Key Req WDI API, free all the memory " );
4156 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4157 vos_mem_free(pWdaParams) ;
4158 setBssKeyParams->status = eSIR_FAILURE ;
4159 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 return CONVERT_WDI2VOS_STATUS(status) ;
4162}
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_RemoveBssKeyReqCallback
4165 * send SET BSS key RSP back to PE
4166 */
4167void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4168{
4169 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4170 tWDA_CbContext *pWDA;
4171 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004173 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004174 if(NULL == pWdaParams)
4175 {
4176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004177 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 VOS_ASSERT(0) ;
4179 return ;
4180 }
4181 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4182 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004183 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4184 vos_mem_free(pWdaParams) ;
4185
4186 removeBssKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004187 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 return ;
4189}
Jeff Johnson295189b2012-06-20 16:38:30 -07004190/*
4191 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4192 * Request to WDI to remove the BSS key( key for broadcast/multicast
4193 * frames Encryption)
4194 */
4195VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4196 tRemoveBssKeyParams *removeBssKeyParams )
4197{
4198 WDI_Status status = WDI_STATUS_SUCCESS ;
4199 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4200 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4201 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4202 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004204 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 if(NULL == wdiRemoveBssKeyParam)
4206 {
4207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004208 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_ASSERT(0);
4210 return VOS_STATUS_E_NOMEM;
4211 }
4212 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4213 if(NULL == pWdaParams)
4214 {
4215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004216 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 VOS_ASSERT(0);
4218 vos_mem_free(wdiRemoveBssKeyParam);
4219 return VOS_STATUS_E_NOMEM;
4220 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004221 /* copy Remove BSS key params to WDI structure*/
4222 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4223 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4224 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4225 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4226 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004227 /* Store remove key pointer, as this will be used for response */
4228 /* store Params pass it to WDI */
4229 pWdaParams->pWdaContext = pWDA;
4230 pWdaParams->wdaMsgParam = removeBssKeyParams;
4231 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4233 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004234 if(IS_WDI_STATUS_FAILURE(status))
4235 {
4236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4237 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4239 vos_mem_free(pWdaParams) ;
4240 removeBssKeyParams->status = eSIR_FAILURE ;
4241 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004243 return CONVERT_WDI2VOS_STATUS(status) ;
4244}
Jeff Johnson295189b2012-06-20 16:38:30 -07004245/*
4246 * FUNCTION: WDA_SetBssKeyReqCallback
4247 * send SET BSS key RSP back to PE
4248 */
4249void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4250{
4251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4252 tWDA_CbContext *pWDA;
4253 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004255 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004256 if(NULL == pWdaParams)
4257 {
4258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004259 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 VOS_ASSERT(0) ;
4261 return ;
4262 }
4263 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4264 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004265 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4266 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004267 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004268 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004269 return ;
4270}
Jeff Johnson295189b2012-06-20 16:38:30 -07004271/*
4272 * FUNCTION: WDA_ProcessSetStaKeyReq
4273 * Request to WDI for programming the STA key( key for Unicast frames
4274 * Encryption)
4275 */
4276VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4277 tSetStaKeyParams *setStaKeyParams )
4278{
4279 WDI_Status status = WDI_STATUS_SUCCESS ;
4280 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4281 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4282 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4283 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004284 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004287 if(NULL == wdiSetStaKeyParam)
4288 {
4289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004291 VOS_ASSERT(0);
4292 return VOS_STATUS_E_NOMEM;
4293 }
4294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4295 if(NULL == pWdaParams)
4296 {
4297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004299 VOS_ASSERT(0);
4300 vos_mem_free(wdiSetStaKeyParam);
4301 return VOS_STATUS_E_NOMEM;
4302 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004303 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004304 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004305 /* copy set STA key params to WDI structure */
4306 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4307 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4308 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4309 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 if(setStaKeyParams->encType != eSIR_ED_NONE)
4311 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004312 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004313 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4314 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4315 {
4316 WDA_GetWepKeysFromCfg( pWDA,
4317 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4318 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4319 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4320 }
4321 else
4322 {
4323#ifdef WLAN_SOFTAP_FEATURE
4324 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4325 keyIndex++)
4326 {
4327 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4328 setStaKeyParams->key[keyIndex].keyId;
4329 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4330 setStaKeyParams->key[keyIndex].unicast;
4331 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4332 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004333 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4334 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4335 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4336 setStaKeyParams->key[keyIndex].paeRole;
4337 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4338 setStaKeyParams->key[keyIndex].keyLength;
4339 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4340 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4341 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4342 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4343 {
4344 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4345 }
4346 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004347 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4348 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4349#else
4350 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4351 setStaKeyParams->key.keyId;
4352 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4353 setStaKeyParams->key.unicast;
4354 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4355 setStaKeyParams->key.keyDirection;
4356 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4357 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4358 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4359 setStaKeyParams->key.paeRole;
4360 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4361 setStaKeyParams->key.keyLength;
4362 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4363 setStaKeyParams->key[keyIndex].key,
4364 SIR_MAC_MAX_KEY_LENGTH);
4365 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4366#endif
4367 }
4368 }
4369 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4370 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004371 /* Store set key pointer, as this will be used for response */
4372 /* store Params pass it to WDI */
4373 pWdaParams->pWdaContext = pWDA;
4374 pWdaParams->wdaMsgParam = setStaKeyParams;
4375 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004376 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4377 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004378 if(IS_WDI_STATUS_FAILURE(status))
4379 {
4380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4381 "Failure in set STA Key Req WDI API, free all the memory " );
4382 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4383 vos_mem_free(pWdaParams) ;
4384 setStaKeyParams->status = eSIR_FAILURE ;
4385 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4386 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004387 return CONVERT_WDI2VOS_STATUS(status) ;
4388}
Jeff Johnson295189b2012-06-20 16:38:30 -07004389/*
4390 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4391 * send SET Bcast STA key RSP back to PE
4392 */
4393void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4394{
4395 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4396 tWDA_CbContext *pWDA;
4397 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004399 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004400 if(NULL == pWdaParams)
4401 {
4402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004403 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 VOS_ASSERT(0) ;
4405 return ;
4406 }
4407 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4408 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4410 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004411 setStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004412 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 return ;
4414}
4415
Jeff Johnson295189b2012-06-20 16:38:30 -07004416/*
4417 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4418 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4419 * Encryption)
4420 */
4421VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4422 tSetStaKeyParams *setStaKeyParams )
4423{
4424 WDI_Status status = WDI_STATUS_SUCCESS ;
4425 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4426 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4427 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4428 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004429 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004431 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004432 if(NULL == wdiSetStaKeyParam)
4433 {
4434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004435 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004436 VOS_ASSERT(0);
4437 return VOS_STATUS_E_NOMEM;
4438 }
4439 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4440 if(NULL == pWdaParams)
4441 {
4442 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004443 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004444 VOS_ASSERT(0);
4445 vos_mem_free(wdiSetStaKeyParam);
4446 return VOS_STATUS_E_NOMEM;
4447 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004448 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004450 /* copy set STA key params to WDI structure */
4451 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4452 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4453 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4454 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004455 if(setStaKeyParams->encType != eSIR_ED_NONE)
4456 {
4457#ifdef WLAN_SOFTAP_FEATURE
4458 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4459 keyIndex++)
4460 {
4461 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4462 setStaKeyParams->key[keyIndex].keyId;
4463 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4464 setStaKeyParams->key[keyIndex].unicast;
4465 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4466 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004467 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4468 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4469 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4470 setStaKeyParams->key[keyIndex].paeRole;
4471 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4472 setStaKeyParams->key[keyIndex].keyLength;
4473 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4474 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004476 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4477 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4478#else
4479 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyId =
4480 setStaKeyParams->key.keyId;
4481 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].unicast =
4482 setStaKeyParams->key.unicast;
4483 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyDirection =
4484 setStaKeyParams->key.keyDirection;
4485 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyRsc,
4486 setStaKeyParams->key.keyRsc, WLAN_MAX_KEY_RSC_LEN);
4487 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].paeRole =
4488 setStaKeyParams->key.paeRole;
4489 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].keyLength =
4490 setStaKeyParams->key.keyLength;
4491 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[0].key,
4492 setStaKeyParams->key[keyIndex].key,
4493 SIR_MAC_MAX_KEY_LENGTH);
4494 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys = 1;
4495#endif
4496 }
4497 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004498 /* Store set key pointer, as this will be used for response */
4499 /* store Params pass it to WDI */
4500 pWdaParams->pWdaContext = pWDA;
4501 pWdaParams->wdaMsgParam = setStaKeyParams;
4502 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004503 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4504 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 if(IS_WDI_STATUS_FAILURE(status))
4506 {
4507 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4508 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4509 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4510 vos_mem_free(pWdaParams) ;
4511 setStaKeyParams->status = eSIR_FAILURE ;
4512 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4513 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 return CONVERT_WDI2VOS_STATUS(status) ;
4515}
Jeff Johnson295189b2012-06-20 16:38:30 -07004516/*
4517 * FUNCTION: WDA_RemoveStaKeyReqCallback
4518 * send SET BSS key RSP back to PE
4519 */
4520void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4521{
4522 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4523 tWDA_CbContext *pWDA;
4524 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004526 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004527 if(NULL == pWdaParams)
4528 {
4529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004530 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004531 VOS_ASSERT(0) ;
4532 return ;
4533 }
4534 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4535 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4537 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004538 removeStaKeyParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004540 return ;
4541}
4542
Jeff Johnson295189b2012-06-20 16:38:30 -07004543/*
4544 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4545 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4546 */
4547VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4548 tRemoveStaKeyParams *removeStaKeyParams )
4549{
4550 WDI_Status status = WDI_STATUS_SUCCESS ;
4551 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4552 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4553 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4554 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004556 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004557 if(NULL == wdiRemoveStaKeyParam)
4558 {
4559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004560 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 VOS_ASSERT(0);
4562 return VOS_STATUS_E_NOMEM;
4563 }
4564 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4565 if(NULL == pWdaParams)
4566 {
4567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004568 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004569 VOS_ASSERT(0);
4570 vos_mem_free(wdiRemoveStaKeyParam);
4571 return VOS_STATUS_E_NOMEM;
4572 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 /* copy remove STA key params to WDI structure*/
4574 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4575 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4576 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4577 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4578 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004579 /* Store remove key pointer, as this will be used for response */
4580 /* store Params pass it to WDI */
4581 pWdaParams->pWdaContext = pWDA;
4582 pWdaParams->wdaMsgParam = removeStaKeyParams;
4583 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004584 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4585 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004586 if(IS_WDI_STATUS_FAILURE(status))
4587 {
4588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4589 "Failure in remove STA Key Req WDI API, free all the memory " );
4590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4591 vos_mem_free(pWdaParams) ;
4592 removeStaKeyParams->status = eSIR_FAILURE ;
4593 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4594 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004595 return CONVERT_WDI2VOS_STATUS(status) ;
4596}
Jeff Johnson295189b2012-06-20 16:38:30 -07004597/*
4598 * FUNCTION: WDA_IsHandleSetLinkStateReq
4599 * Update the WDA state and return the status to handle this message or not
4600 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004601WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4602 tWDA_CbContext *pWDA,
4603 tLinkStateParams *linkStateParams)
4604{
4605 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004606 switch(linkStateParams->state)
4607 {
4608 case eSIR_LINK_PREASSOC_STATE:
4609 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4610 /*
4611 * set the WDA state to PRE ASSOC
4612 * copy the BSSID into pWDA to use it in join request and return,
4613 * No need to handle these messages.
4614 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004615 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4616 {
4617 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004619 }
4620 else
4621 {
4622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004623 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004624 VOS_ASSERT(0);
4625 }
4626
4627 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4628 {
4629 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004630 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004631 }
4632 else
4633 {
4634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004635 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004636 VOS_ASSERT(0);
4637 }
4638
Jeff Johnson295189b2012-06-20 16:38:30 -07004639 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4640 *channel and after ) so reset the WDA state to ready when the second
4641 * time UMAC issue the link state with PREASSOC
4642 */
4643 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4644 {
4645 /* RESET WDA state back to WDA_READY_STATE */
4646 pWDA->wdaState = WDA_READY_STATE;
4647 }
4648 else
4649 {
4650 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4651 }
4652 //populate linkState info in WDACbCtxt
4653 pWDA->linkState = linkStateParams->state;
4654 status = WDA_IGNORE_SET_LINK_STATE;
4655 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004656 default:
4657 if(pWDA->wdaState != WDA_READY_STATE)
4658 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004659 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4660 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4661 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4662 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4663 *the ASSERT in WDA_Stop during module unload.*/
4664 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4665 {
4666 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004667 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004668 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004669 else
4670 {
4671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004672 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004673 status = WDA_IGNORE_SET_LINK_STATE;
4674 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004675 }
4676 break;
4677 }
4678
4679 return status;
4680}
Jeff Johnson295189b2012-06-20 16:38:30 -07004681/*
4682 * FUNCTION: WDA_SetLinkStateCallback
4683 * call back function for set link state from WDI
4684 */
4685void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4686{
4687 tWDA_CbContext *pWDA;
4688 tLinkStateParams *linkStateParams;
4689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004691 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004692 if(NULL == pWdaParams)
4693 {
4694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004695 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004696 VOS_ASSERT(0) ;
4697 return ;
4698 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004700 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004701 /*
4702 * In STA mode start the BA activity check timer after association
4703 * and in AP mode start BA activity check timer after BSS start */
4704 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4705 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
4706 (linkStateParams->state == eSIR_LINK_AP_STATE)) )
4707 {
4708 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4709 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004710 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004711 /*
4712 * No respone required for WDA_SET_LINK_STATE so free the request
4713 * param here
4714 */
4715 if( pWdaParams != NULL )
4716 {
4717 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4718 {
4719 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4720 }
4721 vos_mem_free(pWdaParams);
4722 }
4723 return ;
4724}
Jeff Johnson295189b2012-06-20 16:38:30 -07004725/*
4726 * FUNCTION: WDA_ProcessSetLinkState
4727 * Request to WDI to set the link status.
4728 */
4729VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4730 tLinkStateParams *linkStateParams)
4731{
4732 WDI_Status status = WDI_STATUS_SUCCESS ;
4733 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
4734 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
4735 sizeof(WDI_SetLinkReqParamsType)) ;
4736 tWDA_ReqParams *pWdaParams ;
4737 tpAniSirGlobal pMac;
4738 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
4739
4740 if(NULL == pMac)
4741 {
4742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004743 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004744 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004745 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07004746 return VOS_STATUS_E_FAILURE;
4747 }
4748
4749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004750 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004751 if(NULL == wdiSetLinkStateParam)
4752 {
4753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004754 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004755 VOS_ASSERT(0);
4756 return VOS_STATUS_E_NOMEM;
4757 }
4758 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4759 if(NULL == pWdaParams)
4760 {
4761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004762 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 VOS_ASSERT(0);
4764 vos_mem_free(wdiSetLinkStateParam);
4765 return VOS_STATUS_E_NOMEM;
4766 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004767 if(WDA_IGNORE_SET_LINK_STATE ==
4768 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
4769 {
4770 status = WDI_STATUS_E_FAILURE;
4771 }
4772 else
4773 {
4774 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
4775 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004776 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
4777 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07004778 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
4779 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004780 pWdaParams->pWdaContext = pWDA;
4781 /* Store remove key pointer, as this will be used for response */
4782 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 /* store Params pass it to WDI */
4784 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
4785 /* Stop Timer only other than GO role and concurrent session */
4786 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
4787 && !vos_concurrent_sessions_running() &&
4788 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
4789 {
4790 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
4793 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 if(IS_WDI_STATUS_FAILURE(status))
4795 {
4796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4797 "Failure in set link state Req WDI API, free all the memory " );
4798 }
4799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 if(IS_WDI_STATUS_FAILURE(status))
4801 {
4802 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07004803 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004804 vos_mem_free(pWdaParams);
4805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 return CONVERT_WDI2VOS_STATUS(status) ;
4807}
Jeff Johnson295189b2012-06-20 16:38:30 -07004808/*
4809 * FUNCTION: WDA_GetStatsReqParamsCallback
4810 * send the response to PE with Stats received from WDI
4811 */
4812void WDA_GetStatsReqParamsCallback(
4813 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
4814 void* pUserData)
4815{
4816 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4817 tAniGetPEStatsRsp *pGetPEStatsRspParams;
4818
4819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004820 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004821 pGetPEStatsRspParams =
4822 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
4823 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
4824
4825 if(NULL == pGetPEStatsRspParams)
4826 {
4827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004828 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004829 VOS_ASSERT(0);
4830 return;
4831 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004832 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
4833 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
4834 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
4835 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
4836 pGetPEStatsRspParams->msgLen = wdiGetStatsRsp->usMsgLen + sizeof(tANI_U8);
4837
4838 //Fill the Session Id Properly in PE
4839 pGetPEStatsRspParams->sessionId = 0;
4840 pGetPEStatsRspParams->rc =
4841 CONVERT_WDI2VOS_STATUS(wdiGetStatsRsp->wdiStatus);
4842 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
4843 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004844 vos_mem_copy( pGetPEStatsRspParams + 1,
4845 wdiGetStatsRsp + 1,
4846 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004847 /* send response to UMAC*/
4848 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
4849
4850 return;
4851}
4852
Jeff Johnson295189b2012-06-20 16:38:30 -07004853/*
4854 * FUNCTION: WDA_ProcessGetStatsReq
4855 * Request to WDI to get the statistics
4856 */
4857VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
4858 tAniGetPEStatsReq *pGetStatsParams)
4859{
4860 WDI_Status status = WDI_STATUS_SUCCESS ;
4861 WDI_GetStatsReqParamsType wdiGetStatsParam;
4862 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004864 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
4866 pGetStatsParams->staId;
4867 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
4868 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07004869 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004870 status = WDI_GetStatsReq(&wdiGetStatsParam,
4871 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07004872 if(IS_WDI_STATUS_FAILURE(status))
4873 {
4874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4875 "Failure in Get Stats Req WDI API, free all the memory " );
4876 pGetPEStatsRspParams =
4877 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
4878 if(NULL == pGetPEStatsRspParams)
4879 {
4880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004883 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004884 return VOS_STATUS_E_NOMEM;
4885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004886 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
4887 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
4888 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
4889 pGetPEStatsRspParams->rc = eSIR_FAILURE;
4890 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
4891 (void *)pGetPEStatsRspParams, 0) ;
4892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004893 /* Free the request message */
4894 vos_mem_free(pGetStatsParams);
4895 return CONVERT_WDI2VOS_STATUS(status);
4896}
Jeff Johnson295189b2012-06-20 16:38:30 -07004897/*
4898 * FUNCTION: WDA_UpdateEDCAParamCallback
4899 * call back function for Update EDCA params from WDI
4900 */
4901void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
4902{
4903 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4904 tEdcaParams *pEdcaParams;
4905
4906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004907 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004908 if(NULL == pWdaParams)
4909 {
4910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004911 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004912 VOS_ASSERT(0) ;
4913 return ;
4914 }
4915 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4917 vos_mem_free(pWdaParams);
4918 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004919 return ;
4920}
Jeff Johnson295189b2012-06-20 16:38:30 -07004921/*
4922 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
4923 * Request to WDI to Update the EDCA params.
4924 */
4925VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
4926 tEdcaParams *pEdcaParams)
4927{
4928 WDI_Status status = WDI_STATUS_SUCCESS ;
4929 WDI_UpdateEDCAParamsType *wdiEdcaParam =
4930 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
4931 sizeof(WDI_UpdateEDCAParamsType)) ;
4932 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004934 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 if(NULL == wdiEdcaParam)
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004939 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004940 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 return VOS_STATUS_E_NOMEM;
4942 }
4943 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4944 if(NULL == pWdaParams)
4945 {
4946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004947 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004948 VOS_ASSERT(0);
4949 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07004950 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004951 return VOS_STATUS_E_NOMEM;
4952 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004953 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
4954 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid = pEdcaParams->highPerformance;
4955 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
4956 &pEdcaParams->acbe);
4957 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
4958 &pEdcaParams->acbk);
4959 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
4960 &pEdcaParams->acvi);
4961 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
4962 &pEdcaParams->acvo);
4963 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004964 pWdaParams->pWdaContext = pWDA;
4965 /* Store remove key pointer, as this will be used for response */
4966 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 /* store Params pass it to WDI */
4968 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004969 status = WDI_UpdateEDCAParams(wdiEdcaParam,
4970 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004971 if(IS_WDI_STATUS_FAILURE(status))
4972 {
4973 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4974 "Failure in Update EDCA Params WDI API, free all the memory " );
4975 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4976 vos_mem_free(pWdaParams);
4977 vos_mem_free(pEdcaParams);
4978 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 return CONVERT_WDI2VOS_STATUS(status) ;
4980}
Jeff Johnson295189b2012-06-20 16:38:30 -07004981/*
4982 * FUNCTION: WDA_AddBAReqCallback
4983 * send ADD BA RSP back to PE
4984 */
4985void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
4986 void* pUserData)
4987{
4988 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4989 tWDA_CbContext *pWDA;
4990 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004991 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004992 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004993 if(NULL == pWdaParams)
4994 {
4995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004996 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004997 VOS_ASSERT(0) ;
4998 return ;
4999 }
5000 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5001 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005002 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5003 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005004 pAddBAReqParams->status = CONVERT_WDI2SIR_STATUS(pAddBARspParams->wdiStatus) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005005 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005006 return ;
5007}
5008
Jeff Johnson295189b2012-06-20 16:38:30 -07005009/*
5010 * FUNCTION: WDA_ProcessAddBAReq
5011 * Request to WDI to Update the ADDBA REQ params.
5012 */
5013VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5014 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5015{
Jeff Johnson43971f52012-07-17 12:26:56 -07005016 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005017 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5018 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5019 sizeof(WDI_AddBAReqParamsType)) ;
5020 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005022 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 if(NULL == wdiAddBAReqParam)
5024 {
5025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005027 VOS_ASSERT(0);
5028 return VOS_STATUS_E_NOMEM;
5029 }
5030 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5031 if(NULL == pWdaParams)
5032 {
5033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005034 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 VOS_ASSERT(0);
5036 vos_mem_free(wdiAddBAReqParam);
5037 return VOS_STATUS_E_NOMEM;
5038 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 do
5040 {
5041 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005042 wdiAddBaInfo->ucSTAIdx = staIdx ;
5043 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5044 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005045 } while(0) ;
5046 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 pWdaParams->pWdaContext = pWDA;
5048 /* store Params pass it to WDI */
5049 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5050 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005051 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5052 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005053
Jeff Johnson43971f52012-07-17 12:26:56 -07005054 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005055 {
5056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005057 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5058 status = CONVERT_WDI2VOS_STATUS(wstatus);
5059 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 vos_mem_free(pWdaParams);
5061 pAddBAReqParams->status = eSIR_FAILURE;
5062 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5063 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005064 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005065}
Jeff Johnson295189b2012-06-20 16:38:30 -07005066/*
5067 * FUNCTION: WDA_AddBASessionReqCallback
5068 * send ADD BA SESSION RSP back to PE/(or TL)
5069 */
5070void WDA_AddBASessionReqCallback(
5071 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5072{
5073 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5074 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5075 tWDA_CbContext *pWDA;
5076 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005078 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005079 if(NULL == pWdaParams)
5080 {
5081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005082 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005083 VOS_ASSERT(0) ;
5084 return ;
5085 }
5086 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5087 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005088 if( NULL == pAddBAReqParams )
5089 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005091 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005092 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5094 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005095 return ;
5096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5098 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005099 /*
5100 * if WDA in update TL state, update TL with BA session parama and send
5101 * another request to HAL(/WDI) (ADD_BA_REQ)
5102 */
5103
5104 if((VOS_STATUS_SUCCESS ==
5105 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5106 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5107 {
5108 /* Update TL with BA info received from HAL/WDI */
5109 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5110 wdiAddBaSession->usBaSessionID,
5111 wdiAddBaSession->ucSTAIdx,
5112 wdiAddBaSession->ucBaTID,
5113 wdiAddBaSession->ucBaBufferSize,
5114 wdiAddBaSession->ucWinSize,
5115 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005116 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5117 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5118 }
5119 else
5120 {
5121 pAddBAReqParams->status =
5122 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5123
5124 /* Setting Flag to indicate that Set BA is success */
5125 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5126 {
5127 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5128 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5129 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005131 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5132 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005133 /*Reset the WDA state to READY */
5134 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005135 return ;
5136}
5137
Jeff Johnson295189b2012-06-20 16:38:30 -07005138/*
5139 * FUNCTION: WDA_ProcessAddBASessionReq
5140 * Request to WDI to Update the ADDBA REQ params.
5141 */
5142VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5143 tAddBAParams *pAddBAReqParams)
5144{
5145 WDI_Status status = WDI_STATUS_SUCCESS ;
5146 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5147 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5148 sizeof(WDI_AddBASessionReqParamsType)) ;
5149 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005151 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005152 if(NULL == wdiAddBASessionReqParam)
5153 {
5154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005155 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005156 VOS_ASSERT(0);
5157 return VOS_STATUS_E_NOMEM;
5158 }
5159 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5160 if(NULL == pWdaParams)
5161 {
5162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005163 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005164 VOS_ASSERT(0);
5165 vos_mem_free(wdiAddBASessionReqParam);
5166 return VOS_STATUS_E_NOMEM;
5167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 /*
5169 * Populate ADD BA parameters and pass these paarmeters to WDI.
5170 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5171 * the state to track if these is BA recipient case or BA initiator
5172 * case.
5173 */
5174 do
5175 {
5176 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5177 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5178 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5179 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5180 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5181 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5182 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005183 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005184 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5185 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5186 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5187 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5188 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005189 /* check the BA direction and update state accordingly */
5190 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5191 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5192 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5193
5194 }while(0) ;
5195 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005196 pWdaParams->pWdaContext = pWDA;
5197 /* Store ADD BA pointer, as this will be used for response */
5198 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5199 /* store Params pass it to WDI */
5200 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005201 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5202 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005203 if(IS_WDI_STATUS_FAILURE(status))
5204 {
5205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5206 "Failure in ADD BA Session REQ Params WDI API, free all the memory " );
5207 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5208 vos_mem_free(pWdaParams->wdaMsgParam);
5209 vos_mem_free(pWdaParams);
5210 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005211 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005212}
Jeff Johnson295189b2012-06-20 16:38:30 -07005213/*
5214 * FUNCTION: WDA_DelBANotifyTL
5215 * send DEL BA IND to TL
5216 */
5217void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5218 tDelBAParams *pDelBAReqParams)
5219{
5220 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5221 //tSirMsgQ msg;
5222 vos_msg_t vosMsg;
5223 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005224 if(NULL == pDelBAInd)
5225 {
5226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005227 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005228 VOS_ASSERT(0) ;
5229 return;
5230 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005231 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5232 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5233 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5234 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005235
Jeff Johnson295189b2012-06-20 16:38:30 -07005236
5237 vosMsg.type = WDA_DELETEBA_IND;
5238 vosMsg.bodyptr = pDelBAInd;
5239 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5240 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5241 {
5242 vosStatus = VOS_STATUS_E_BADMSG;
5243 }
5244}
Jeff Johnson295189b2012-06-20 16:38:30 -07005245/*
5246 * FUNCTION: WDA_DelBAReqCallback
5247 * send DEL BA RSP back to PE
5248 */
5249void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5250{
5251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5252 tWDA_CbContext *pWDA;
5253 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005255 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005256 if(NULL == pWdaParams)
5257 {
5258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005259 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005260 VOS_ASSERT(0) ;
5261 return ;
5262 }
5263 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5264 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005265 /* Notify TL about DEL BA in case of recipinet */
5266 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5267 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5268 {
5269 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005271 /*
5272 * No respone required for WDA_DELBA_IND so just free the request
5273 * param here
5274 */
5275 vos_mem_free(pDelBAReqParams);
5276 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5277 vos_mem_free(pWdaParams);
5278 return ;
5279}
5280
Jeff Johnson295189b2012-06-20 16:38:30 -07005281/*
5282 * FUNCTION: WDA_ProcessDelBAReq
5283 * Request to WDI to Update the DELBA REQ params.
5284 */
5285VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5286 tDelBAParams *pDelBAReqParams)
5287{
5288 WDI_Status status = WDI_STATUS_SUCCESS ;
5289 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5290 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5291 sizeof(WDI_DelBAReqParamsType)) ;
5292 tWDA_ReqParams *pWdaParams ;
5293 tANI_U16 staIdx = 0;
5294 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005296 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005297 if(NULL == wdiDelBAReqParam)
5298 {
5299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005301 VOS_ASSERT(0);
5302 return VOS_STATUS_E_NOMEM;
5303 }
5304 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5305 if(NULL == pWdaParams)
5306 {
5307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005308 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 VOS_ASSERT(0);
5310 vos_mem_free(wdiDelBAReqParam);
5311 return VOS_STATUS_E_NOMEM;
5312 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5314 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5315 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5316 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005317 pWdaParams->pWdaContext = pWDA;
5318 /* Store DEL BA pointer, as this will be used for response */
5319 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005320 /* store Params pass it to WDI */
5321 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005322 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5323 * maintained in WDA, so that WDA can retry for another BA session
5324 */
5325 staIdx = pDelBAReqParams->staIdx;
5326 tid = pDelBAReqParams->baTID;
5327 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005328 status = WDI_DelBAReq(wdiDelBAReqParam,
5329 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 if(IS_WDI_STATUS_FAILURE(status))
5331 {
5332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5333 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5334 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5335 vos_mem_free(pWdaParams->wdaMsgParam);
5336 vos_mem_free(pWdaParams);
5337 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005339}
Jeff Johnson295189b2012-06-20 16:38:30 -07005340/*
5341 * FUNCTION: WDA_AddTSReqCallback
5342 * send ADD TS RSP back to PE
5343 */
5344void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5345{
5346 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5347 tWDA_CbContext *pWDA;
5348 tAddTsParams *pAddTsReqParams;
5349
5350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005351 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 if(NULL == pWdaParams)
5353 {
5354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005355 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005356 VOS_ASSERT(0) ;
5357 return ;
5358 }
5359 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5360 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5361 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5362 vos_mem_free(pWdaParams);
5363
5364 pAddTsReqParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005366 return ;
5367}
5368
Jeff Johnson295189b2012-06-20 16:38:30 -07005369/*
5370 * FUNCTION: WDA_ProcessAddTSReq
5371 * Request to WDI to Update the ADD TS REQ params.
5372 */
5373VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5374 tAddTsParams *pAddTsReqParams)
5375{
5376 WDI_Status status = WDI_STATUS_SUCCESS ;
5377 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5378 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5379 sizeof(WDI_AddTSReqParamsType)) ;
5380 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005383 if(NULL == wdiAddTSReqParam)
5384 {
5385 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005386 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005387 VOS_ASSERT(0);
5388 return VOS_STATUS_E_NOMEM;
5389 }
5390 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5391 if(NULL == pWdaParams)
5392 {
5393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005394 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005395 VOS_ASSERT(0);
5396 vos_mem_free(wdiAddTSReqParam);
5397 return VOS_STATUS_E_NOMEM;
5398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5400 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005401 //TS IE
5402 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5403 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5404 pAddTsReqParams->tspec.length;
5405
5406 //TS IE : TS INFO : TRAFFIC
5407 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5408 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5409 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5410 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5411 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5412 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5413 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5414 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5415 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5416 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5417 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5418 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5419 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5420 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5421 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5422 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5423
5424 //TS IE : TS INFO : SCHEDULE
5425 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5426 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5427 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5428 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 //TS IE
5430 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5431 pAddTsReqParams->tspec.nomMsduSz;
5432 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5433 pAddTsReqParams->tspec.maxMsduSz;
5434 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5435 pAddTsReqParams->tspec.minSvcInterval;
5436 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5437 pAddTsReqParams->tspec.maxSvcInterval;
5438 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5439 pAddTsReqParams->tspec.inactInterval;
5440 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5441 pAddTsReqParams->tspec.suspendInterval;
5442 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5443 pAddTsReqParams->tspec.svcStartTime;
5444 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5445 pAddTsReqParams->tspec.minDataRate;
5446 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5447 pAddTsReqParams->tspec.meanDataRate;
5448 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5449 pAddTsReqParams->tspec.peakDataRate;
5450 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5451 pAddTsReqParams->tspec.maxBurstSz;
5452 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5453 pAddTsReqParams->tspec.delayBound;
5454 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5455 pAddTsReqParams->tspec.minPhyRate;
5456 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5457 pAddTsReqParams->tspec.surplusBw;
5458 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5459 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005460 /* TODO: tAddTsParams doesn't have the following fields */
5461#if 0
5462 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5463 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5464 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5465 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5466#endif
5467 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5468
5469 pWdaParams->pWdaContext = pWDA;
5470 /* Store ADD TS pointer, as this will be used for response */
5471 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005472 /* store Params pass it to WDI */
5473 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005474 status = WDI_AddTSReq(wdiAddTSReqParam,
5475 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005476 if(IS_WDI_STATUS_FAILURE(status))
5477 {
5478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5479 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5481 vos_mem_free(pWdaParams);
5482 pAddTsReqParams->status = eSIR_FAILURE ;
5483 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5484 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005486}
5487
Jeff Johnson295189b2012-06-20 16:38:30 -07005488/*
5489 * FUNCTION: WDA_DelTSReqCallback
5490 * send DEL TS RSP back to PE
5491 */
5492void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5493{
5494 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5498 vos_mem_free(pWdaParams->wdaMsgParam) ;
5499 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005500 /*
5501 * No respone required for WDA_DEL_TS_REQ so just free the request
5502 * param here
5503 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005504 return ;
5505}
5506
Jeff Johnson295189b2012-06-20 16:38:30 -07005507/*
5508 * FUNCTION: WDA_ProcessDelTSReq
5509 * Request to WDI to Update the DELTS REQ params.
5510 */
5511VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5512 tDelTsParams *pDelTSReqParams)
5513{
5514 WDI_Status status = WDI_STATUS_SUCCESS ;
5515 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5516 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5517 sizeof(WDI_DelTSReqParamsType)) ;
5518 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005519 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005520 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005521 if(NULL == wdiDelTSReqParam)
5522 {
5523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005524 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005525 VOS_ASSERT(0);
5526 return VOS_STATUS_E_NOMEM;
5527 }
5528 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5529 if(NULL == pWdaParams)
5530 {
5531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005533 VOS_ASSERT(0);
5534 vos_mem_free(wdiDelTSReqParam);
5535 return VOS_STATUS_E_NOMEM;
5536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5538 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5539 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5540 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5541 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005542 pWdaParams->pWdaContext = pWDA;
5543 /* Store DEL TS pointer, as this will be used for response */
5544 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005545 /* store Params pass it to WDI */
5546 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005547 status = WDI_DelTSReq(wdiDelTSReqParam,
5548 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005549 if(IS_WDI_STATUS_FAILURE(status))
5550 {
5551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5552 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5554 vos_mem_free(pWdaParams->wdaMsgParam);
5555 vos_mem_free(pWdaParams);
5556 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005557 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005558}
Jeff Johnson295189b2012-06-20 16:38:30 -07005559/*
5560 * FUNCTION: WDA_UpdateBeaconParamsCallback
5561 * Free the memory. No need to send any response to PE in this case
5562 */
5563void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5564{
5565 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005567 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005568 if(NULL == pWdaParams)
5569 {
5570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005571 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 VOS_ASSERT(0) ;
5573 return ;
5574 }
5575 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5576 vos_mem_free(pWdaParams->wdaMsgParam) ;
5577 vos_mem_free(pWdaParams);
5578 /*
5579 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
5580 * param here
5581 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005582 return ;
5583}
Jeff Johnson295189b2012-06-20 16:38:30 -07005584/*
5585 * FUNCTION: WDA_ProcessUpdateBeaconParams
5586 * Request to WDI to send the beacon parameters to HAL to update the Hardware
5587 */
5588VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
5589 tUpdateBeaconParams *pUpdateBeaconParams)
5590{
5591 WDI_Status status = WDI_STATUS_SUCCESS ;
5592 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
5593 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
5594 sizeof(WDI_UpdateBeaconParamsType)) ;
5595 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005597 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005598 if(NULL == wdiUpdateBeaconParams)
5599 {
5600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005601 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005602 VOS_ASSERT(0);
5603 return VOS_STATUS_E_NOMEM;
5604 }
5605 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5606 if(NULL == pWdaParams)
5607 {
5608 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005609 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005610 VOS_ASSERT(0);
5611 vos_mem_free(wdiUpdateBeaconParams);
5612 return VOS_STATUS_E_NOMEM;
5613 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005614 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
5615 pUpdateBeaconParams->bssIdx;
5616 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
5617 pUpdateBeaconParams->fShortPreamble;
5618 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
5619 pUpdateBeaconParams->fShortSlotTime;
5620 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
5621 pUpdateBeaconParams->beaconInterval;
5622 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
5623 pUpdateBeaconParams->llaCoexist;
5624 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
5625 pUpdateBeaconParams->llbCoexist;
5626 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
5627 pUpdateBeaconParams->llgCoexist;
5628 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
5629 pUpdateBeaconParams->ht20MhzCoexist;
5630 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
5631 pUpdateBeaconParams->llnNonGFCoexist;
5632 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
5633 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
5634 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
5635 pUpdateBeaconParams->fRIFSMode;
5636 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
5637 pUpdateBeaconParams->paramChangeBitmap;
5638 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
5639
5640 pWdaParams->pWdaContext = pWDA;
5641 /* Store UpdateBeacon Req pointer, as this will be used for response */
5642 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 /* store Params pass it to WDI */
5644 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005645 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
5646 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
5647 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005648 if(IS_WDI_STATUS_FAILURE(status))
5649 {
5650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5651 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
5652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5653 vos_mem_free(pWdaParams->wdaMsgParam);
5654 vos_mem_free(pWdaParams);
5655 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005656 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005657}
Jeff Johnson295189b2012-06-20 16:38:30 -07005658#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07005659/*
5660 * FUNCTION: WDA_TSMStatsReqCallback
5661 * send TSM Stats RSP back to PE
5662 */
5663void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
5664{
5665 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5666 tWDA_CbContext *pWDA = NULL;
5667 tTSMStats *pTsmRspParams = NULL;
5668
5669 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005670 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005671 if(NULL == pWdaParams)
5672 {
5673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005674 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005675 VOS_ASSERT(0) ;
5676 return ;
5677 }
5678 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5679 pTsmRspParams = (tTSMStats *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005680 if( NULL == pTsmRspParams )
5681 {
5682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005683 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005684 VOS_ASSERT( 0 );
5685 return ;
5686 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5688 vos_mem_free(pWdaParams);
5689
5690 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
5691 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
5692 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
5693 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
5694 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
5695 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
5696 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
5697 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
5698 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
5699 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005701 return ;
5702}
5703
5704
Jeff Johnson295189b2012-06-20 16:38:30 -07005705/*
5706 * FUNCTION: WDA_ProcessTsmStatsReq
5707 * Request to WDI to get the TSM Stats params.
5708 */
5709VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
5710 tTSMStats *pTsmStats)
5711{
5712 WDI_Status status = WDI_STATUS_SUCCESS ;
5713 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
5714 tWDA_ReqParams *pWdaParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07005715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005716 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005717 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
5718 sizeof(WDI_TSMStatsReqParamsType));
5719 if(NULL == wdiTSMReqParam)
5720 {
5721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005722 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005723 VOS_ASSERT(0);
5724 return VOS_STATUS_E_NOMEM;
5725 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005726 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5727 if(NULL == pWdaParams)
5728 {
5729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005731 VOS_ASSERT(0);
5732 vos_mem_free(wdiTSMReqParam);
5733 return VOS_STATUS_E_NOMEM;
5734 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005735 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
5736 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
5737 pTsmStats->bssId,
5738 sizeof(wpt_macAddr));
5739 wdiTSMReqParam->wdiReqStatusCB = NULL ;
5740
5741 pWdaParams->pWdaContext = pWDA;
5742 /* Store TSM Stats pointer, as this will be used for response */
5743 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 /* store Params pass it to WDI */
5745 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTSMReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 status = WDI_TSMStatsReq(wdiTSMReqParam,
5747 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 if(IS_WDI_STATUS_FAILURE(status))
5749 {
5750 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5751 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
5752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5753 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi6b5b5002012-11-08 14:49:29 -08005754 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005756 return CONVERT_WDI2VOS_STATUS(status) ;
5757}
5758#endif
5759/*
5760 * FUNCTION: WDA_SendBeaconParamsCallback
5761 * No need to send any response to PE in this case
5762 */
5763void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
5764{
5765
Jeff Johnson295189b2012-06-20 16:38:30 -07005766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 return ;
5769}
Jeff Johnson295189b2012-06-20 16:38:30 -07005770/*
5771 * FUNCTION: WDA_ProcessSendBeacon
5772 * Request to WDI to send the beacon template to HAL to update the TPE memory and
5773 * start beacon trasmission
5774 */
5775VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
5776 tSendbeaconParams *pSendbeaconParams)
5777{
5778 WDI_Status status = WDI_STATUS_SUCCESS ;
5779 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005781 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005782 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
5783 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
5784 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
5785 pSendbeaconParams->beaconLength;
5786#ifdef WLAN_SOFTAP_FEATURE
5787 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
5788 pSendbeaconParams->timIeOffset;
5789#endif
5790#ifdef WLAN_FEATURE_P2P
5791 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
5792 pSendbeaconParams->p2pIeOffset;
5793#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005794 /* Copy the beacon template to local buffer */
5795 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
5796 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
5797 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
5798
Jeff Johnson295189b2012-06-20 16:38:30 -07005799 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
5800 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 if(IS_WDI_STATUS_FAILURE(status))
5802 {
5803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5804 "Failure in SEND BEACON REQ Params WDI API" );
5805 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 vos_mem_free(pSendbeaconParams);
5807 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005808}
Jeff Johnson295189b2012-06-20 16:38:30 -07005809/*
5810 * FUNCTION: WDA_UpdateProbeRspParamsCallback
5811 * No need to send any response to PE in this case
5812 */
5813void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
5814{
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005816 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005817 return ;
5818}
5819
Jeff Johnson295189b2012-06-20 16:38:30 -07005820/*
5821 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
5822 * Request to WDI to send the probe response template to HAL to update the TPE memory and
5823 * send probe response
5824 */
5825VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
5826 tSendProbeRespParams *pSendProbeRspParams)
5827{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005828 WDI_Status status = WDI_STATUS_SUCCESS;
5829 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
5830 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005832 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005833
5834 if (!wdiSendProbeRspParam)
5835 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
5836
Jeff Johnson295189b2012-06-20 16:38:30 -07005837 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005838 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005840 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07005841 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07005842 /* Copy the Probe Response template to local buffer */
5843 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005844 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07005845 pSendProbeRspParams->pProbeRespTemplate,
5846 pSendProbeRspParams->probeRespTemplateLen);
5847 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005848 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07005849 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
5850 WDI_PROBE_REQ_BITMAP_IE_LEN);
5851
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005852 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005853
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005854 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07005855 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 if(IS_WDI_STATUS_FAILURE(status))
5857 {
5858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5859 "Failure in SEND Probe RSP Params WDI API" );
5860 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005861 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07005862 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005863 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07005864}
Jeff Johnson295189b2012-06-20 16:38:30 -07005865#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
5866/*
5867 * FUNCTION: WDA_SetMaxTxPowerCallBack
5868 * send the response to PE with power value received from WDI
5869 */
5870void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
5871 void* pUserData)
5872{
5873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5874 tWDA_CbContext *pWDA = NULL;
5875 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
5876
5877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005879 if(NULL == pWdaParams)
5880 {
5881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005882 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005883 VOS_ASSERT(0) ;
5884 return ;
5885 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005886 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5887 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005888 if( NULL == pMaxTxPowerParams )
5889 {
5890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005891 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07005892 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005893 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5894 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 return ;
5896 }
Jeff Johnsone7245742012-09-05 17:12:55 -07005897
Jeff Johnson295189b2012-06-20 16:38:30 -07005898
5899 /*need to free memory for the pointers used in the
5900 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07005901 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5902 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005903 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07005904
Jeff Johnson295189b2012-06-20 16:38:30 -07005905
5906 /* send response to UMAC*/
5907 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
5908
5909 return;
5910}
Jeff Johnson295189b2012-06-20 16:38:30 -07005911/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005912 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07005913 * Request to WDI to send set Max Tx Power Request
5914 */
5915 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
5916 tMaxTxPowerParams *MaxTxPowerParams)
5917{
5918 WDI_Status status = WDI_STATUS_SUCCESS;
5919 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
5920 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005921
Jeff Johnson295189b2012-06-20 16:38:30 -07005922 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005923 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005924
Jeff Johnson295189b2012-06-20 16:38:30 -07005925 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
5926 sizeof(WDI_SetMaxTxPowerParamsType));
5927 if(NULL == wdiSetMaxTxPowerParams)
5928 {
5929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005930 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005931 VOS_ASSERT(0);
5932 return VOS_STATUS_E_NOMEM;
5933 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005934 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5935 if(NULL == pWdaParams)
5936 {
5937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005938 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 vos_mem_free(wdiSetMaxTxPowerParams);
5940 VOS_ASSERT(0);
5941 return VOS_STATUS_E_NOMEM;
5942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005943 /* Copy.Max.Tx.Power Params to WDI structure */
5944 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
5945 MaxTxPowerParams->bssId,
5946 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
5948 MaxTxPowerParams->selfStaMacAddr,
5949 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005950 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
5951 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07005952 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005953 pWdaParams->pWdaContext = pWDA;
5954 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005955 /* store Params pass it to WDI */
5956 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005957 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
5958 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005959 if(IS_WDI_STATUS_FAILURE(status))
5960 {
5961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5962 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
5963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5964 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005965 /* send response to UMAC*/
5966 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005967 }
5968 return CONVERT_WDI2VOS_STATUS(status);
5969
5970}
Jeff Johnson295189b2012-06-20 16:38:30 -07005971#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07005972#ifdef WLAN_FEATURE_P2P
Jeff Johnson295189b2012-06-20 16:38:30 -07005973/*
5974 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
5975 * Free the memory. No need to send any response to PE in this case
5976 */
5977void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
5978{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005979 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
5980
Jeff Johnson295189b2012-06-20 16:38:30 -07005981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005982 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005983
5984 if(NULL == pWdaParams)
5985 {
5986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005987 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07005988 VOS_ASSERT(0) ;
5989 return ;
5990 }
5991
5992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5993 vos_mem_free(pWdaParams->wdaMsgParam) ;
5994 vos_mem_free(pWdaParams);
5995
Jeff Johnson295189b2012-06-20 16:38:30 -07005996 /*
5997 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
5998 * so just free the request param here
5999 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006000 return ;
6001}
6002
Jeff Johnson295189b2012-06-20 16:38:30 -07006003/*
6004 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6005 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6006 */
6007VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6008 tP2pPsParams *pP2pPsConfigParams)
6009{
6010 WDI_Status status = WDI_STATUS_SUCCESS ;
6011 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6012 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6013 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006014 tWDA_ReqParams *pWdaParams = NULL;
6015
Jeff Johnson295189b2012-06-20 16:38:30 -07006016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006017 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006018 if(NULL == wdiSetP2PGONOAReqParam)
6019 {
6020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006022 VOS_ASSERT(0);
6023 return VOS_STATUS_E_NOMEM;
6024 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006025
6026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6027 if(NULL == pWdaParams)
6028 {
6029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006030 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006031 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006032 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006033 VOS_ASSERT(0);
6034 return VOS_STATUS_E_NOMEM;
6035 }
6036
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6038 pP2pPsConfigParams->opp_ps;
6039 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6040 pP2pPsConfigParams->ctWindow;
6041 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6042 pP2pPsConfigParams->count;
6043 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6044 pP2pPsConfigParams->duration;
6045 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6046 pP2pPsConfigParams->interval;
6047 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6048 pP2pPsConfigParams->single_noa_duration;
6049 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6050 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006051
Jeff Johnson295189b2012-06-20 16:38:30 -07006052 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6053 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006054 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6055
Jeff Johnson295189b2012-06-20 16:38:30 -07006056 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006057 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6058 pWdaParams->pWdaContext = pWDA;
6059
Jeff Johnson295189b2012-06-20 16:38:30 -07006060 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006061 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6062
Jeff Johnson295189b2012-06-20 16:38:30 -07006063 if(IS_WDI_STATUS_FAILURE(status))
6064 {
6065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6066 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006067 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6068 vos_mem_free(pWdaParams->wdaMsgParam);
6069 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006070 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006071 return CONVERT_WDI2VOS_STATUS(status);
6072
Jeff Johnson295189b2012-06-20 16:38:30 -07006073}
6074#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006075#ifdef WLAN_FEATURE_VOWIFI_11R
6076/*
6077 * FUNCTION: WDA_AggrAddTSReqCallback
6078 * send ADD AGGREGATED TS RSP back to PE
6079 */
6080void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6081{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006082 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6083 tWDA_CbContext *pWDA;
6084 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006085 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006087 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006088 if(NULL == pWdaParams)
6089 {
6090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006091 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006092 VOS_ASSERT(0) ;
6093 return ;
6094 }
6095
6096 pWDA = pWdaParams->pWdaContext;
6097 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006098
6099 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6100 {
6101 pAggrAddTsReqParams->status[i] = CONVERT_WDI2SIR_STATUS(status) ;
6102 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006103 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006104
6105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6106 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 return ;
6108}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006109/*
6110 * FUNCTION: WDA_ProcessAddTSReq
6111 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6112 */
6113VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6114 tAggrAddTsParams *pAggrAddTsReqParams)
6115{
6116 WDI_Status status = WDI_STATUS_SUCCESS ;
6117 int i;
6118 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006119 tWDA_ReqParams *pWdaParams = NULL;
6120
6121
Jeff Johnson295189b2012-06-20 16:38:30 -07006122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006123 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006124 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6125 sizeof(WDI_AggrAddTSReqParamsType)) ;
6126 if(NULL == wdiAggrAddTSReqParam)
6127 {
6128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006130 VOS_ASSERT(0);
6131 return VOS_STATUS_E_NOMEM;
6132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006133
6134
6135 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6136 if(NULL == pWdaParams)
6137 {
6138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006139 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006140 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006141 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006142 VOS_ASSERT(0);
6143 return VOS_STATUS_E_NOMEM;
6144 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006145 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6146 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6147 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006148 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6149 {
6150 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6151 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6152 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006153 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6154 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6155 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6156 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6157 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6158 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6159 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6160 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6161 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6162 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6163 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6164 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6165 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6166 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6167 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6168 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006169 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6170 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6172 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6173 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6174 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6175 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6176 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6177 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6178 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6179 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6180 pAggrAddTsReqParams->tspec[i].inactInterval;
6181 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6182 pAggrAddTsReqParams->tspec[i].suspendInterval;
6183 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6184 pAggrAddTsReqParams->tspec[i].svcStartTime;
6185 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6186 pAggrAddTsReqParams->tspec[i].minDataRate;
6187 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6188 pAggrAddTsReqParams->tspec[i].meanDataRate;
6189 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6190 pAggrAddTsReqParams->tspec[i].peakDataRate;
6191 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6192 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6193 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6194 pAggrAddTsReqParams->tspec[i].delayBound;
6195 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6196 pAggrAddTsReqParams->tspec[i].minPhyRate;
6197 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6198 pAggrAddTsReqParams->tspec[i].surplusBw;
6199 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6200 pAggrAddTsReqParams->tspec[i].mediumTime;
6201 }
6202
6203 /* TODO: tAggrAddTsParams doesn't have the following fields */
6204#if 0
6205 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6206 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
6207 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6208 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6209#endif
6210 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
6211
6212 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006213 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006214 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006215 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
6216
6217 pWdaParams->pWdaContext = pWDA;
6218
Jeff Johnson295189b2012-06-20 16:38:30 -07006219 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006220 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
6221
Jeff Johnson295189b2012-06-20 16:38:30 -07006222 if(IS_WDI_STATUS_FAILURE(status))
6223 {
6224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6225 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006226 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6227 vos_mem_free(pWdaParams);
6228
6229 /* send the failure response back to PE*/
6230 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6231 {
6232 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
6233 }
6234
6235 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
6236 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006238 return CONVERT_WDI2VOS_STATUS(status) ;
6239}
6240#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07006241/*
6242 * FUNCTION: WDA_EnterImpsReqCallback
6243 * send Enter IMPS RSP back to PE
6244 */
6245void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
6246{
6247 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006249 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006250 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006251 return ;
6252}
Jeff Johnson295189b2012-06-20 16:38:30 -07006253/*
6254 * FUNCTION: WDA_ProcessEnterImpsReq
6255 * Request to WDI to Enter IMPS power state.
6256 */
6257VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
6258{
6259 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006261 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006262 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006263 if(IS_WDI_STATUS_FAILURE(status))
6264 {
6265 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6266 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006267 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006269 return CONVERT_WDI2VOS_STATUS(status) ;
6270}
Jeff Johnson295189b2012-06-20 16:38:30 -07006271/*
6272 * FUNCTION: WDA_ExitImpsReqCallback
6273 * send Exit IMPS RSP back to PE
6274 */
6275void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
6276{
6277 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006279 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006281 return ;
6282}
Jeff Johnson295189b2012-06-20 16:38:30 -07006283/*
6284 * FUNCTION: WDA_ProcessExitImpsReq
6285 * Request to WDI to Exit IMPS power state.
6286 */
6287VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
6288{
6289 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006291 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006292 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006293 if(IS_WDI_STATUS_FAILURE(status))
6294 {
6295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6296 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006297 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006298 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 return CONVERT_WDI2VOS_STATUS(status) ;
6300}
Jeff Johnson295189b2012-06-20 16:38:30 -07006301/*
6302 * FUNCTION: WDA_EnterBmpsReqCallback
6303 * send Enter BMPS RSP back to PE
6304 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006305void WDA_EnterBmpsReqCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006306{
6307 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6308 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006309 tEnterBmpsParams *pEnterBmpsRspParams;
6310
Jeff Johnson295189b2012-06-20 16:38:30 -07006311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006312 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 if(NULL == pWdaParams)
6314 {
6315 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006316 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 VOS_ASSERT(0) ;
6318 return ;
6319 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006320
6321 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6322 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
6323
6324 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
6325 pEnterBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterBmpsRsp->wdiStatus);
6326
6327 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006329 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
6330
Jeff Johnson295189b2012-06-20 16:38:30 -07006331 return ;
6332}
Jeff Johnson295189b2012-06-20 16:38:30 -07006333/*
6334 * FUNCTION: WDA_ProcessEnterBmpsReq
6335 * Request to WDI to Enter BMPS power state.
6336 */
6337VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
6338 tEnterBmpsParams *pEnterBmpsReqParams)
6339{
6340 WDI_Status status = WDI_STATUS_SUCCESS;
6341 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
6342 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006344 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006345 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
6346 {
6347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006348 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006349 VOS_ASSERT(0);
6350 return VOS_STATUS_E_FAILURE;
6351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006352 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
6353 if (NULL == wdiEnterBmpsReqParams)
6354 {
6355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006356 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006357 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006358 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6359 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006360 return VOS_STATUS_E_NOMEM;
6361 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6363 if (NULL == pWdaParams)
6364 {
6365 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006366 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 VOS_ASSERT(0);
6368 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006369 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
6370 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006371 return VOS_STATUS_E_NOMEM;
6372 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006373 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
6374 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
6375 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
6376 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07006377 // For CCX and 11R Roaming
6378 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
6379 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
6380 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
6381 wdiEnterBmpsReqParams->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006382
Jeff Johnson295189b2012-06-20 16:38:30 -07006383 /* Store param pointer as passed in by caller */
6384 /* store Params pass it to WDI */
6385 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006386 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006387 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006388 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
6389 (WDI_EnterBmpsRspCb)WDA_EnterBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 if (IS_WDI_STATUS_FAILURE(status))
6391 {
6392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6393 "Failure in Enter BMPS REQ WDI API, free all the memory" );
6394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006395 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006396 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006397 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006399 return CONVERT_WDI2VOS_STATUS(status);
6400}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006401
6402
6403static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
6404 WDI_Status wdiStatus,
6405 tExitBmpsParams *pExitBmpsReqParams)
6406{
6407 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
6408
6409 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
6410}
6411
6412
Jeff Johnson295189b2012-06-20 16:38:30 -07006413/*
6414 * FUNCTION: WDA_ExitBmpsReqCallback
6415 * send Exit BMPS RSP back to PE
6416 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006417void WDA_ExitBmpsReqCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006418{
6419 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6420 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006421 tExitBmpsParams *pExitBmpsRspParams;
6422
Jeff Johnson295189b2012-06-20 16:38:30 -07006423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006424 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006425 if(NULL == pWdaParams)
6426 {
6427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006428 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 VOS_ASSERT(0) ;
6430 return ;
6431 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006432
6433 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6434 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
6435
6436 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
6437 pExitBmpsRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07006438
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6440 vos_mem_free(pWdaParams) ;
6441
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006442 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 return ;
6444}
Jeff Johnson295189b2012-06-20 16:38:30 -07006445/*
6446 * FUNCTION: WDA_ProcessExitBmpsReq
6447 * Request to WDI to Exit BMPS power state.
6448 */
6449VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
6450 tExitBmpsParams *pExitBmpsReqParams)
6451{
6452 WDI_Status status = WDI_STATUS_SUCCESS ;
6453 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
6454 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
6455 sizeof(WDI_ExitBmpsReqParamsType)) ;
6456 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006458 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006459 if(NULL == wdiExitBmpsReqParams)
6460 {
6461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006462 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006464 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 return VOS_STATUS_E_NOMEM;
6466 }
6467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6468 if(NULL == pWdaParams)
6469 {
6470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006472 VOS_ASSERT(0);
6473 vos_mem_free(wdiExitBmpsReqParams);
6474 return VOS_STATUS_E_NOMEM;
6475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006476 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07006477
6478 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
6479
Jeff Johnson295189b2012-06-20 16:38:30 -07006480 wdiExitBmpsReqParams->wdiReqStatusCB = NULL;
6481
6482 /* Store param pointer as passed in by caller */
6483 /* store Params pass it to WDI */
6484 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
6485 pWdaParams->pWdaContext = pWDA;
6486 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006487 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
6488 (WDI_ExitBmpsRspCb)WDA_ExitBmpsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006489 if(IS_WDI_STATUS_FAILURE(status))
6490 {
6491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6492 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6494 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07006495 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006497 return CONVERT_WDI2VOS_STATUS(status) ;
6498}
Jeff Johnson295189b2012-06-20 16:38:30 -07006499/*
6500 * FUNCTION: WDA_EnterUapsdReqCallback
6501 * send Enter UAPSD RSP back to PE
6502 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006503void WDA_EnterUapsdReqCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006504{
6505 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6506 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006507 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006509 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006510 if(NULL == pWdaParams)
6511 {
6512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006513 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 VOS_ASSERT(0) ;
6515 return ;
6516 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006517
6518 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6519 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
6520
6521 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
6522 pEnterUapsdRsqParams->status = CONVERT_WDI2SIR_STATUS(pwdiEnterUapsdRspParams->wdiStatus);
6523
Jeff Johnson295189b2012-06-20 16:38:30 -07006524 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6525 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006526 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006527 return ;
6528}
Jeff Johnson295189b2012-06-20 16:38:30 -07006529/*
6530 * FUNCTION: WDA_ProcessEnterUapsdReq
6531 * Request to WDI to Enter UAPSD power state.
6532 */
6533VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
6534 tUapsdParams *pEnterUapsdReqParams)
6535{
6536 WDI_Status status = WDI_STATUS_SUCCESS ;
6537 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
6538 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
6539 sizeof(WDI_EnterUapsdReqParamsType)) ;
6540 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006542 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006543 if(NULL == wdiEnterUapsdReqParams)
6544 {
6545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006546 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006547 VOS_ASSERT(0);
6548 return VOS_STATUS_E_NOMEM;
6549 }
6550 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6551 if(NULL == pWdaParams)
6552 {
6553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006555 VOS_ASSERT(0);
6556 vos_mem_free(wdiEnterUapsdReqParams);
6557 return VOS_STATUS_E_NOMEM;
6558 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006559 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
6560 pEnterUapsdReqParams->beDeliveryEnabled;
6561 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
6562 pEnterUapsdReqParams->beTriggerEnabled;
6563 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
6564 pEnterUapsdReqParams->bkDeliveryEnabled;
6565 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
6566 pEnterUapsdReqParams->bkTriggerEnabled;
6567 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
6568 pEnterUapsdReqParams->viDeliveryEnabled;
6569 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
6570 pEnterUapsdReqParams->viTriggerEnabled;
6571 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
6572 pEnterUapsdReqParams->voDeliveryEnabled;
6573 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
6574 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07006575 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006576
6577 wdiEnterUapsdReqParams->wdiReqStatusCB = NULL;
6578
Jeff Johnson295189b2012-06-20 16:38:30 -07006579 /* Store param pointer as passed in by caller */
6580 /* store Params pass it to WDI */
6581 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
6582 pWdaParams->pWdaContext = pWDA;
6583 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006584 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
6585 (WDI_EnterUapsdRspCb)WDA_EnterUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006586 if(IS_WDI_STATUS_FAILURE(status))
6587 {
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6589 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
6590 vos_mem_free(pWdaParams->wdaMsgParam) ;
6591 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6592 vos_mem_free(pWdaParams) ;
6593 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 return CONVERT_WDI2VOS_STATUS(status) ;
6595}
Jeff Johnson295189b2012-06-20 16:38:30 -07006596/*
6597 * FUNCTION: WDA_ExitUapsdReqCallback
6598 * send Exit UAPSD RSP back to PE
6599 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006600void WDA_ExitUapsdReqCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07006601{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006602
6603 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6604 tWDA_CbContext *pWDA;
6605 tExitUapsdParams *pExitUapsdRspParams;
6606
Jeff Johnson295189b2012-06-20 16:38:30 -07006607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006608 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006609 if(NULL == pWdaParams)
6610 {
6611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006612 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006613 VOS_ASSERT(0);
6614 return;
6615 }
6616
6617 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6618 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
6619
6620 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
6621 pExitUapsdRspParams->status = CONVERT_WDI2SIR_STATUS(pwdiExitRspParam->wdiStatus);
6622
6623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6624 vos_mem_free(pWdaParams) ;
6625
6626 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006627 return ;
6628}
Jeff Johnson295189b2012-06-20 16:38:30 -07006629/*
6630 * FUNCTION: WDA_ProcessExitUapsdReq
6631 * Request to WDI to Exit UAPSD power state.
6632 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006633VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
6634 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07006635{
6636 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006637 tWDA_ReqParams *pWdaParams ;
6638 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
6639 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
6640 sizeof(WDI_ExitUapsdReqParamsType)) ;
6641
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006643 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006644
6645 if(NULL == wdiExitUapsdReqParams)
6646 {
6647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006648 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006649 VOS_ASSERT(0);
6650 return VOS_STATUS_E_NOMEM;
6651 }
6652 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6653 if(NULL == pWdaParams)
6654 {
6655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006656 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006657 VOS_ASSERT(0);
6658 vos_mem_free(wdiExitUapsdReqParams);
6659 return VOS_STATUS_E_NOMEM;
6660 }
6661
6662 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
6663 wdiExitUapsdReqParams->wdiReqStatusCB = NULL;
6664
6665 /* Store param pointer as passed in by caller */
6666 /* store Params pass it to WDI */
6667 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
6668 pWdaParams->pWdaContext = pWDA;
6669 pWdaParams->wdaMsgParam = pExitUapsdParams;
6670
6671 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006672 if(IS_WDI_STATUS_FAILURE(status))
6673 {
6674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6675 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07006676 vos_mem_free(pWdaParams->wdaMsgParam) ;
6677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6678 vos_mem_free(pWdaParams) ;
6679
Jeff Johnson295189b2012-06-20 16:38:30 -07006680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006681 return CONVERT_WDI2VOS_STATUS(status) ;
6682}
6683
Jeff Johnson295189b2012-06-20 16:38:30 -07006684/*
6685 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
6686 *
6687 */
6688void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
6689{
6690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006692 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006693 if(NULL == pWdaParams)
6694 {
6695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006696 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006697 VOS_ASSERT(0) ;
6698 return ;
6699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 if( pWdaParams != NULL )
6701 {
6702 if( pWdaParams->wdaWdiApiMsgParam != NULL )
6703 {
6704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6705 }
6706 if( pWdaParams->wdaMsgParam != NULL )
6707 {
6708 vos_mem_free(pWdaParams->wdaMsgParam) ;
6709 }
6710 vos_mem_free(pWdaParams) ;
6711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 return ;
6713}
Jeff Johnson295189b2012-06-20 16:38:30 -07006714/*
6715 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
6716 * Request to WDI to set the power save params at start.
6717 */
6718VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
6719 tSirPowerSaveCfg *pPowerSaveCfg)
6720{
6721 WDI_Status status = WDI_STATUS_SUCCESS ;
6722 tHalCfg *tlvStruct = NULL ;
6723 tANI_U8 *tlvStructStart = NULL ;
6724 v_PVOID_t *configParam;
6725 tANI_U32 configParamSize;
6726 tANI_U32 *configDataValue;
6727 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
6728 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006730 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006731 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
6732 {
6733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006734 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006735 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006736 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006737 return VOS_STATUS_E_FAILURE;
6738 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006739 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
6740 if (NULL == wdiPowerSaveCfg)
6741 {
6742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006745 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006746 return VOS_STATUS_E_NOMEM;
6747 }
6748 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6749 if(NULL == pWdaParams)
6750 {
6751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006752 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006753 VOS_ASSERT(0);
6754 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006755 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 return VOS_STATUS_E_NOMEM;
6757 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006758 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
6759 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07006760 if(NULL == configParam)
6761 {
6762 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006763 "%s: VOS MEM Alloc Failure \n", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006764 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07006765 vos_mem_free(pWdaParams);
6766 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006767 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 return VOS_STATUS_E_NOMEM;
6769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006770 vos_mem_set(configParam, configParamSize, 0);
6771 wdiPowerSaveCfg->pConfigBuffer = configParam;
6772 tlvStruct = (tHalCfg *)configParam;
6773 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006774 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
6775 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
6776 tlvStruct->length = sizeof(tANI_U32);
6777 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6778 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6780 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006781 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
6782 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
6783 tlvStruct->length = sizeof(tANI_U32);
6784 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6785 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07006786 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6787 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006788 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
6789 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
6790 tlvStruct->length = sizeof(tANI_U32);
6791 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6792 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6794 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006795 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
6796 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
6797 tlvStruct->length = sizeof(tANI_U32);
6798 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6799 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07006800 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6801 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006802 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
6803 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
6804 tlvStruct->length = sizeof(tANI_U32);
6805 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6806 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6808 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006809 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
6810 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
6811 tlvStruct->length = sizeof(tANI_U32);
6812 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6813 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07006814 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6815 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006816 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
6817 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
6818 tlvStruct->length = sizeof(tANI_U32);
6819 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6820 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07006821 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6822 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
6824 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
6825 tlvStruct->length = sizeof(tANI_U32);
6826 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6827 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
6828 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6829 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006830 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
6831 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
6832 tlvStruct->length = sizeof(tANI_U32);
6833 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6834 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
6835 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6836 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006837 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
6838 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
6839 tlvStruct->length = sizeof(tANI_U32);
6840 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6841 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07006842 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6843 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006844 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
6845 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
6846 tlvStruct->length = sizeof(tANI_U32);
6847 configDataValue = (tANI_U32 *)(tlvStruct + 1);
6848 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07006849 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
6850 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006851 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006852 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006853 /* store Params pass it to WDI */
6854 pWdaParams->wdaMsgParam = configParam;
6855 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
6856 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
6858 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006859 if(IS_WDI_STATUS_FAILURE(status))
6860 {
6861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6862 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
6863 vos_mem_free(pWdaParams->wdaMsgParam);
6864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6865 vos_mem_free(pWdaParams);
6866 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006867 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07006868 return CONVERT_WDI2VOS_STATUS(status);
6869}
Jeff Johnson295189b2012-06-20 16:38:30 -07006870/*
6871 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
6872 *
6873 */
6874void WDA_SetUapsdAcParamsReqCallback(WDI_Status status, void* pUserData)
6875{
6876 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006878 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6880 vos_mem_free(pWdaParams);
6881
Jeff Johnson295189b2012-06-20 16:38:30 -07006882 return ;
6883}
Jeff Johnson295189b2012-06-20 16:38:30 -07006884/*
6885 * FUNCTION: WDA_SetUapsdAcParamsReq
6886 * Request to WDI to set the UAPSD params for an ac (sta mode).
6887 */
6888VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
6889 tUapsdInfo *pUapsdInfo)
6890{
6891 WDI_Status status = WDI_STATUS_SUCCESS;
6892 tWDA_CbContext *pWDA = NULL ;
6893 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
6894 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
6895 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
6896 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006898 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006899 if(NULL == wdiUapsdParams)
6900 {
6901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006902 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006903 VOS_ASSERT(0);
6904 return VOS_STATUS_E_NOMEM;
6905 }
6906 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6907 if(NULL == pWdaParams)
6908 {
6909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006910 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006911 VOS_ASSERT(0);
6912 vos_mem_free(wdiUapsdParams);
6913 return VOS_STATUS_E_NOMEM;
6914 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
6916 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
6917 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
6918 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
6919 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
6920 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 wdiUapsdParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07006923 pWdaParams->pWdaContext = pWDA;
6924 /* Store param pointer as passed in by caller */
6925 pWdaParams->wdaMsgParam = pUapsdInfo;
6926 /* store Params pass it to WDI */
6927 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
6929 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsReqCallback,
6930 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006931 if(IS_WDI_STATUS_FAILURE(status))
6932 {
6933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6934 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
6935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6936 vos_mem_free(pWdaParams);
6937 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006938 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
6939 return VOS_STATUS_SUCCESS;
6940 else
6941 return VOS_STATUS_E_FAILURE;
6942
Jeff Johnson295189b2012-06-20 16:38:30 -07006943}
6944/*
6945 * FUNCTION: WDA_ClearUapsdAcParamsReq
6946 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
6947 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
6948 * and again enter the UPASD with the modified params. Hence the disable
6949 * function was kept empty.
6950 *
6951 */
6952VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
6953{
6954 /* do nothing */
6955 return VOS_STATUS_SUCCESS;
6956}
Jeff Johnson295189b2012-06-20 16:38:30 -07006957/*
6958 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
6959 *
6960 */
6961void WDA_UpdateUapsdParamsReqCallback(WDI_Status status, void* pUserData)
6962{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6964
Jeff Johnson295189b2012-06-20 16:38:30 -07006965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006966 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006967
6968 if(NULL == pWdaParams)
6969 {
6970 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006971 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006972 VOS_ASSERT(0) ;
6973 return ;
6974 }
6975
6976 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6977 vos_mem_free(pWdaParams->wdaMsgParam);
6978 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006979
Jeff Johnson295189b2012-06-20 16:38:30 -07006980 //print a msg, nothing else to do
6981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6982 "WDA_UpdateUapsdParamsReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07006983 return ;
6984}
Jeff Johnson295189b2012-06-20 16:38:30 -07006985/*
6986 * FUNCTION: WDA_UpdateUapsdParamsReq
6987 * Request to WDI to update UAPSD params (in softAP mode) for a station.
6988 */
6989VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
6990 tUpdateUapsdParams* pUpdateUapsdInfo)
6991{
6992 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07006993 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07006994 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
6995 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
6996 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006997 tWDA_ReqParams *pWdaParams = NULL;
6998
Jeff Johnson295189b2012-06-20 16:38:30 -07006999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007000 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007001 if(NULL == wdiUpdateUapsdParams)
7002 {
7003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007004 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007005 VOS_ASSERT(0);
7006 return VOS_STATUS_E_NOMEM;
7007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007008 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
7009 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
7010 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007011
7012 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7013 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007014 {
7015 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007016 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007018 vos_mem_free(pUpdateUapsdInfo);
7019 vos_mem_free(wdiUpdateUapsdParams);
7020 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007021 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007022 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007023 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007024 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
7026 pWdaParams->pWdaContext = pWDA;
7027
Jeff Johnson43971f52012-07-17 12:26:56 -07007028 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007029 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsReqCallback,
7030 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007031
Jeff Johnson43971f52012-07-17 12:26:56 -07007032 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007033 {
7034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7035 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007036 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
7037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7038 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007039 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007040 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007041 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007042}
Jeff Johnson295189b2012-06-20 16:38:30 -07007043/*
7044 * FUNCTION: WDA_ConfigureRxpFilterCallback
7045 *
7046 */
7047void WDA_ConfigureRxpFilterCallback(WDI_Status wdiStatus, void* pUserData)
7048{
7049 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007051 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007052 if(WDI_STATUS_SUCCESS != wdiStatus)
7053 {
7054 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007055 "%s: RXP config filter failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007056 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007057 if(NULL == pWdaParams)
7058 {
7059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007060 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 VOS_ASSERT(0) ;
7062 return ;
7063 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007064 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7065 vos_mem_free(pWdaParams->wdaMsgParam);
7066 vos_mem_free(pWdaParams);
7067 return ;
7068}
Jeff Johnson295189b2012-06-20 16:38:30 -07007069/*
7070 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
7071 *
7072 */
7073VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
7074 tSirWlanSetRxpFilters *pWlanSuspendParam)
7075{
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007077 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007078 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
7079 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
7080 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
7081 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007083 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007084 if(NULL == wdiRxpFilterParams)
7085 {
7086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007087 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 VOS_ASSERT(0);
7089 vos_mem_free(pWlanSuspendParam);
7090 return VOS_STATUS_E_NOMEM;
7091 }
7092 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7093 if(NULL == pWdaParams)
7094 {
7095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 VOS_ASSERT(0);
7098 vos_mem_free(wdiRxpFilterParams);
7099 vos_mem_free(pWlanSuspendParam);
7100 return VOS_STATUS_E_NOMEM;
7101 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007102 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
7103 pWlanSuspendParam->setMcstBcstFilter;
7104 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
7105 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7106
7107 wdiRxpFilterParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007108 pWdaParams->pWdaContext = pWDA;
7109 pWdaParams->wdaMsgParam = pWlanSuspendParam;
7110 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007111 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07007112 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterCallback,
7113 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007114 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 {
7116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7117 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007118 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007119 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7120 vos_mem_free(pWdaParams->wdaMsgParam);
7121 vos_mem_free(pWdaParams);
7122 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007123 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007124}
Jeff Johnson295189b2012-06-20 16:38:30 -07007125/*
7126 * FUNCTION: WDA_WdiIndicationCallback
7127 *
7128 */
7129void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
7130 void* pUserData)
7131{
7132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007133 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007134}
Jeff Johnson295189b2012-06-20 16:38:30 -07007135/*
7136 * FUNCTION: WDA_ProcessWlanSuspendInd
7137 *
7138 */
7139VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
7140 tSirWlanSuspendParam *pWlanSuspendParam)
7141{
7142 WDI_Status wdiStatus;
7143 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007145 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007146 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
7147 pWlanSuspendParam->configuredMcstBcstFilterSetting;
7148 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
7149 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007151 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
7152 if(WDI_STATUS_PENDING == wdiStatus)
7153 {
7154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007155 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007156 }
7157 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
7158 {
7159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007160 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007161 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007162 vos_mem_free(pWlanSuspendParam);
7163 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7164}
7165
Jeff Johnson295189b2012-06-20 16:38:30 -07007166/*
7167 * FUNCTION: WDA_ProcessWlanResumeCallback
7168 *
7169 */
7170void WDA_ProcessWlanResumeCallback(
7171 WDI_SuspendResumeRspParamsType *resumeRspParams,
7172 void* pUserData)
7173{
7174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007177 if(NULL == pWdaParams)
7178 {
7179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007180 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007181 VOS_ASSERT(0) ;
7182 return ;
7183 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007184 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
7185 {
7186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007187 "%s: Process Wlan Resume failure \n", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07007188 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7190 vos_mem_free(pWdaParams->wdaMsgParam);
7191 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007192 return ;
7193}
Jeff Johnson295189b2012-06-20 16:38:30 -07007194/*
7195 * FUNCTION: WDA_ProcessWlanResumeReq
7196 *
7197 */
7198VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
7199 tSirWlanResumeParam *pWlanResumeParam)
7200{
7201 WDI_Status wdiStatus;
7202 WDI_ResumeParamsType *wdiResumeParams =
7203 (WDI_ResumeParamsType *)vos_mem_malloc(
7204 sizeof(WDI_ResumeParamsType) ) ;
7205 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007207 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007208 if(NULL == wdiResumeParams)
7209 {
7210 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007211 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007212 VOS_ASSERT(0);
7213 return VOS_STATUS_E_NOMEM;
7214 }
7215 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7216 if(NULL == pWdaParams)
7217 {
7218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007219 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007220 VOS_ASSERT(0);
7221 vos_mem_free(wdiResumeParams);
7222 return VOS_STATUS_E_NOMEM;
7223 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
7225 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 wdiResumeParams->wdiReqStatusCB = NULL;
7228 pWdaParams->wdaMsgParam = pWlanResumeParam;
7229 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
7230 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007231 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
7232 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
7233 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007234 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7235 {
7236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7237 "Failure in Host Resume REQ WDI API, free all the memory " );
7238 VOS_ASSERT(0);
7239 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7240 vos_mem_free(pWdaParams->wdaMsgParam);
7241 vos_mem_free(pWdaParams);
7242 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007243 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
7244}
7245
Jeff Johnson295189b2012-06-20 16:38:30 -07007246/*
7247 * FUNCTION: WDA_SetBeaconFilterReqCallback
7248 *
7249 */
7250void WDA_SetBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7251{
7252 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007254 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007255 if(NULL == pWdaParams)
7256 {
7257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007258 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 VOS_ASSERT(0) ;
7260 return ;
7261 }
7262
7263 vos_mem_free(pWdaParams->wdaMsgParam) ;
7264 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7265 vos_mem_free(pWdaParams) ;
7266 /*
7267 * No respone required for SetBeaconFilter req so just free the request
7268 * param here
7269 */
7270
Jeff Johnson295189b2012-06-20 16:38:30 -07007271 return ;
7272}
Jeff Johnson295189b2012-06-20 16:38:30 -07007273/*
7274 * FUNCTION: WDA_SetBeaconFilterReq
7275 * Request to WDI to send the beacon filtering related information.
7276 */
7277VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
7278 tBeaconFilterMsg* pBeaconFilterInfo)
7279{
7280 WDI_Status status = WDI_STATUS_SUCCESS;
7281 tANI_U8 *dstPtr, *srcPtr;
7282 tANI_U8 filterLength;
7283 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
7284 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
7285 sizeof(WDI_BeaconFilterReqParamsType) ) ;
7286 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007288 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007289 if(NULL == wdiBeaconFilterInfo)
7290 {
7291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007292 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007293 VOS_ASSERT(0);
7294 return VOS_STATUS_E_NOMEM;
7295 }
7296 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7297 if(NULL == pWdaParams)
7298 {
7299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007300 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007301 VOS_ASSERT(0);
7302 vos_mem_free(wdiBeaconFilterInfo);
7303 return VOS_STATUS_E_NOMEM;
7304 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007305 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
7306 pBeaconFilterInfo->beaconInterval;
7307 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
7308 pBeaconFilterInfo->capabilityInfo;
7309 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
7310 pBeaconFilterInfo->capabilityMask;
7311 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07007312
7313 //Fill the BssIdx
7314 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
7315
Jeff Johnson295189b2012-06-20 16:38:30 -07007316 //Fill structure with info contained in the beaconFilterTable
7317 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
7318 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
7319 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
7320 if(WDI_BEACON_FILTER_LEN < filterLength)
7321 {
7322 filterLength = WDI_BEACON_FILTER_LEN;
7323 }
7324 vos_mem_copy(dstPtr, srcPtr, filterLength);
Jeff Johnson295189b2012-06-20 16:38:30 -07007325 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
7326 /* Store param pointer as passed in by caller */
7327 /* store Params pass it to WDI */
7328 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
7329 pWdaParams->pWdaContext = pWDA;
7330 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
7331
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
7333 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 if(IS_WDI_STATUS_FAILURE(status))
7335 {
7336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7337 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
7338 vos_mem_free(pWdaParams->wdaMsgParam) ;
7339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7340 vos_mem_free(pWdaParams) ;
7341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007342 return CONVERT_WDI2VOS_STATUS(status) ;
7343}
Jeff Johnson295189b2012-06-20 16:38:30 -07007344/*
7345 * FUNCTION: WDA_RemBeaconFilterReqCallback
7346 *
7347 */
7348void WDA_RemBeaconFilterReqCallback(WDI_Status status, void* pUserData)
7349{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007350 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7351
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007353 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007354
7355 if(NULL == pWdaParams)
7356 {
7357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007358 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007359 VOS_ASSERT(0) ;
7360 return ;
7361 }
7362
7363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7364 vos_mem_free(pWdaParams->wdaMsgParam);
7365 vos_mem_free(pWdaParams);
7366
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 //print a msg, nothing else to do
7368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7369 "WDA_RemBeaconFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007370 return ;
7371}
Jeff Johnson295189b2012-06-20 16:38:30 -07007372 // TODO: PE does not have this feature for now implemented,
7373 // but the support for removing beacon filter exists between
7374 // HAL and FW. This function can be called whenever PE defines
7375 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07007376/*
7377 * FUNCTION: WDA_RemBeaconFilterReq
7378 * Request to WDI to send the removal of beacon filtering related information.
7379 */
7380VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
7381 tRemBeaconFilterMsg* pBeaconFilterInfo)
7382{
7383 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007384 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007385 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
7386 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
7387 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007388 tWDA_ReqParams *pWdaParams ;
7389
Jeff Johnson295189b2012-06-20 16:38:30 -07007390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007392 if(NULL == wdiBeaconFilterInfo)
7393 {
7394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007396 VOS_ASSERT(0);
7397 return VOS_STATUS_E_NOMEM;
7398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
7400 pBeaconFilterInfo->ucIeCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007401 //Fill structure with info contained in the ucRemIeId
7402 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
7403 pBeaconFilterInfo->ucRemIeId,
7404 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
7405 wdiBeaconFilterInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007406
7407 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7408 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007409 {
7410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007411 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007412 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007413 vos_mem_free(wdiBeaconFilterInfo);
7414 vos_mem_free(pBeaconFilterInfo);
7415 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07007416 }
7417
7418 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007419 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007421 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
7422
7423 pWdaParams->pWdaContext = pWDA;
7424
Jeff Johnson43971f52012-07-17 12:26:56 -07007425 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007426 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007427 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007428 {
7429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7430 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007431 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7433 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007434 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007436 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007437}
Jeff Johnson295189b2012-06-20 16:38:30 -07007438/*
7439 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
7440 *
7441 */
7442void WDA_SetRSSIThresholdsReqCallback(WDI_Status status, void* pUserData)
7443{
7444 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007447 if(NULL == pWdaParams)
7448 {
7449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007450 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007451 VOS_ASSERT(0) ;
7452 return ;
7453 }
7454
7455 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7456 vos_mem_free(pWdaParams) ;
7457
Jeff Johnson295189b2012-06-20 16:38:30 -07007458 return ;
7459}
Jeff Johnson295189b2012-06-20 16:38:30 -07007460/*
7461 * FUNCTION: WDA_SetRSSIThresholdsReq
7462 * Request to WDI to set the RSSI thresholds (sta mode).
7463 */
7464VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
7465{
7466 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007467 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007468 tWDA_CbContext *pWDA = NULL ;
7469 v_PVOID_t pVosContext = NULL;
7470 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
7471 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
7472 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
7473 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007475 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007476 if(NULL == wdiRSSIThresholdsInfo)
7477 {
7478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007479 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007480 VOS_ASSERT(0);
7481 return VOS_STATUS_E_NOMEM;
7482 }
7483 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7484 if(NULL == pWdaParams)
7485 {
7486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007487 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007488 VOS_ASSERT(0);
7489 vos_mem_free(wdiRSSIThresholdsInfo);
7490 return VOS_STATUS_E_NOMEM;
7491 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07007493 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
7494 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
7495 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07007496 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
7497 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
7498 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007499 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
7500 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
7501 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07007502 wdiRSSIThresholdsInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007503 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
7504 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
7505
Jeff Johnson295189b2012-06-20 16:38:30 -07007506 /* Store param pointer as passed in by caller */
7507 /* store Params pass it to WDI */
7508 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
7509 pWdaParams->pWdaContext = pWDA;
7510 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07007511 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007512 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007513 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007514 {
7515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7516 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007517 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7519 vos_mem_free(pWdaParams) ;
7520 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007521 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007522
7523}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007524/*
7525 * FUNCTION: WDA_HostOffloadReqCallback
7526 *
7527 */
7528void WDA_HostOffloadReqCallback(WDI_Status status, void* pUserData)
7529{
7530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7531
7532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007533 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 if(NULL == pWdaParams)
7535 {
7536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007537 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007538 VOS_ASSERT(0) ;
7539 return ;
7540 }
7541
7542 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7543 vos_mem_free(pWdaParams->wdaMsgParam);
7544 vos_mem_free(pWdaParams) ;
7545
7546 //print a msg, nothing else to do
7547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7548 "WDA_HostOffloadReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007549 return ;
7550}
Jeff Johnson295189b2012-06-20 16:38:30 -07007551/*
7552 * FUNCTION: WDA_ProcessHostOffloadReq
7553 * Request to WDI to set the filter to minimize unnecessary host wakeup due
7554 * to broadcast traffic (sta mode).
7555 */
7556VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
7557 tSirHostOffloadReq *pHostOffloadParams)
7558{
7559 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007560 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
7562 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
7563 sizeof(WDI_HostOffloadReqParamsType)) ;
7564 tWDA_ReqParams *pWdaParams ;
7565
7566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007567 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07007568
7569 if(NULL == wdiHostOffloadInfo)
7570 {
7571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007572 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007573 VOS_ASSERT(0);
7574 return VOS_STATUS_E_NOMEM;
7575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007576 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7577 if(NULL == pWdaParams)
7578 {
7579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007580 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007581 VOS_ASSERT(0);
7582 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007583 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007584 return VOS_STATUS_E_NOMEM;
7585 }
7586
7587 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
7588 pHostOffloadParams->offloadType;
7589 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
7590 pHostOffloadParams->enableOrDisable;
7591
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007592 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
7593 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
7594
Jeff Johnson295189b2012-06-20 16:38:30 -07007595 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
7596 {
7597 case SIR_IPV4_ARP_REPLY_OFFLOAD:
7598 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
7599 pHostOffloadParams->params.hostIpv4Addr,
7600 4);
7601 break;
7602 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
7603 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7604 pHostOffloadParams->params.hostIpv6Addr,
7605 16);
7606 break;
7607 case SIR_IPV6_NS_OFFLOAD:
7608 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
7609 pHostOffloadParams->params.hostIpv6Addr,
7610 16);
7611
7612#ifdef WLAN_NS_OFFLOAD
7613 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
7614 {
7615 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
7616 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
7617 16);
7618 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
7619 }
7620 else
7621 {
7622 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
7623 }
7624
7625 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
7626 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
7627 16);
7628 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
7629 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
7630 6);
7631
7632 //Only two are supported so let's go through them without a loop
7633 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
7634 {
7635 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
7636 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
7637 16);
7638 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
7639 }
7640 else
7641 {
7642 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
7643 }
7644
7645 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
7646 {
7647 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
7648 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
7649 16);
7650 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
7651 }
7652 else
7653 {
7654 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
7655 }
7656 break;
7657#endif //WLAN_NS_OFFLOAD
7658 default:
7659 {
7660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7661 "No Handling for Offload Type %x in WDA "
7662 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
7663 //WDA_VOS_ASSERT(0) ;
7664 }
7665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007666 wdiHostOffloadInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007667
Jeff Johnson295189b2012-06-20 16:38:30 -07007668 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007669 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007670 /* store Params pass it to WDI */
7671 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
7672 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007673
Jeff Johnson295189b2012-06-20 16:38:30 -07007674
Jeff Johnson43971f52012-07-17 12:26:56 -07007675 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007676 (WDI_HostOffloadCb)WDA_HostOffloadReqCallback, pWdaParams);
7677
Jeff Johnson43971f52012-07-17 12:26:56 -07007678 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 {
7680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7681 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007682 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7684 vos_mem_free(pWdaParams->wdaMsgParam);
7685 vos_mem_free(pWdaParams) ;
7686 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007687 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007688
7689}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007690/*
7691 * FUNCTION: WDA_KeepAliveReqCallback
7692 *
7693 */
7694void WDA_KeepAliveReqCallback(WDI_Status status, void* pUserData)
7695{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007696 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7697
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007700
7701 if(NULL == pWdaParams)
7702 {
7703 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007704 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007705 VOS_ASSERT(0) ;
7706 return ;
7707 }
7708
7709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7710 vos_mem_free(pWdaParams->wdaMsgParam);
7711 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007712
Jeff Johnson295189b2012-06-20 16:38:30 -07007713 //print a msg, nothing else to do
7714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7715 "WDA_KeepAliveReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 return ;
7717}
Jeff Johnson295189b2012-06-20 16:38:30 -07007718/*
7719 * FUNCTION: WDA_ProcessKeepAliveReq
7720 * Request to WDI to send Keep Alive packets to minimize unnecessary host
7721 * wakeup due to broadcast traffic (sta mode).
7722 */
7723VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
7724 tSirKeepAliveReq *pKeepAliveParams)
7725{
7726 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007727 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
7729 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
7730 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007731 tWDA_ReqParams *pWdaParams;
7732
Jeff Johnson295189b2012-06-20 16:38:30 -07007733 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007734 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 if(NULL == wdiKeepAliveInfo)
7736 {
7737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007739 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007740 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007741 return VOS_STATUS_E_NOMEM;
7742 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007743
7744 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7745 if(NULL == pWdaParams)
7746 {
7747 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007748 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007749 VOS_ASSERT(0);
7750 vos_mem_free(wdiKeepAliveInfo);
7751 vos_mem_free(pKeepAliveParams);
7752 return VOS_STATUS_E_NOMEM;
7753 }
7754
Jeff Johnson295189b2012-06-20 16:38:30 -07007755 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
7756 pKeepAliveParams->packetType;
7757 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
7758 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007759
7760 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
7761 pKeepAliveParams->bssId,
7762 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07007763
7764 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
7765 {
7766 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7767 pKeepAliveParams->hostIpv4Addr,
7768 SIR_IPV4_ADDR_LEN);
7769 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7770 pKeepAliveParams->destIpv4Addr,
7771 SIR_IPV4_ADDR_LEN);
7772 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7773 pKeepAliveParams->destMacAddr,
7774 SIR_MAC_ADDR_LEN);
7775 }
7776 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
7777 {
7778 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
7779 SIR_IPV4_ADDR_LEN,
7780 0);
7781 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
7782 SIR_IPV4_ADDR_LEN,
7783 0);
7784 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
7785 SIR_MAC_ADDR_LEN,
7786 0);
7787 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007788 wdiKeepAliveInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007789
Jeff Johnson295189b2012-06-20 16:38:30 -07007790 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007791 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007792 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007793 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
7794 pWdaParams->pWdaContext = pWDA;
7795
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
7797 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
7798 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
7799 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
7800 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
7801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
7802 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
7803 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
7804 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
7805 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
7806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7807 "WDA DMAC : %d:%d:%d:%d:%d:%d",
7808 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
7809 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
7810 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
7811 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
7812 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
7813 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
7814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7815 "TimePeriod %d PacketType %d",
7816 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
7817 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07007818 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007819 (WDI_KeepAliveCb)WDA_KeepAliveReqCallback, pWdaParams);
7820
Jeff Johnson43971f52012-07-17 12:26:56 -07007821 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007822 {
7823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7824 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007825 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007826 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7827 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007828 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007829 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007830 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007831
7832}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007833/*
7834 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
7835 *
7836 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007837void WDA_WowlAddBcPtrnReqCallback(
7838 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
7839 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007840{
7841 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 if(NULL == pWdaParams)
7845 {
7846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007847 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 VOS_ASSERT(0) ;
7849 return ;
7850 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7852 vos_mem_free(pWdaParams->wdaMsgParam);
7853 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007854 return ;
7855}
Jeff Johnson295189b2012-06-20 16:38:30 -07007856/*
7857 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
7858 * Request to WDI to add WOWL Bcast pattern
7859 */
7860VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
7861 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
7862{
7863 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007864 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
7866 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
7867 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
7868 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007870 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007871 if(NULL == wdiWowlAddBcPtrnInfo)
7872 {
7873 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007874 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007875 VOS_ASSERT(0);
7876 return VOS_STATUS_E_NOMEM;
7877 }
7878 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7879 if(NULL == pWdaParams)
7880 {
7881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007882 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007883 VOS_ASSERT(0);
7884 vos_mem_free(wdiWowlAddBcPtrnInfo);
7885 return VOS_STATUS_E_NOMEM;
7886 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007887 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
7888 pWowlAddBcPtrnParams->ucPatternId;
7889 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
7890 pWowlAddBcPtrnParams->ucPatternByteOffset;
7891 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
7892 pWowlAddBcPtrnParams->ucPatternMaskSize;
7893 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
7894 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
7896 {
7897 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7898 pWowlAddBcPtrnParams->ucPattern,
7899 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
7900 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7901 pWowlAddBcPtrnParams->ucPatternMask,
7902 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
7903 }
7904 else
7905 {
7906 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
7907 pWowlAddBcPtrnParams->ucPattern,
7908 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7909 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
7910 pWowlAddBcPtrnParams->ucPatternMask,
7911 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7912
7913 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
7914 pWowlAddBcPtrnParams->ucPatternExt,
7915 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7916 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
7917 pWowlAddBcPtrnParams->ucPatternMaskExt,
7918 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
7919 }
7920
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007921 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
7922 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
7923
Jeff Johnson295189b2012-06-20 16:38:30 -07007924 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007925 /* Store param pointer as passed in by caller */
7926 /* store Params pass it to WDI */
7927 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
7928 pWdaParams->pWdaContext = pWDA;
7929 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07007930 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07007931 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07007932 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07007933 {
7934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7935 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07007936 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 vos_mem_free(pWdaParams->wdaMsgParam) ;
7938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7939 vos_mem_free(pWdaParams) ;
7940 }
Jeff Johnson43971f52012-07-17 12:26:56 -07007941 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07007942
7943}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07007944/*
7945 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
7946 *
7947 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007948void WDA_WowlDelBcPtrnReqCallback(
7949 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
7950 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007951{
7952 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007954 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007955 if(NULL == pWdaParams)
7956 {
7957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007958 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007959 VOS_ASSERT(0) ;
7960 return ;
7961 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7963 vos_mem_free(pWdaParams->wdaMsgParam);
7964 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 return ;
7966}
Jeff Johnson295189b2012-06-20 16:38:30 -07007967/*
7968 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
7969 * Request to WDI to delete WOWL Bcast pattern
7970 */
7971VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
7972 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
7973{
7974 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07007975 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07007976 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
7977 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
7978 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
7979 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007980 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007981 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 if(NULL == wdiWowlDelBcPtrnInfo)
7983 {
7984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007985 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007986 VOS_ASSERT(0);
7987 return VOS_STATUS_E_NOMEM;
7988 }
7989 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7990 if(NULL == pWdaParams)
7991 {
7992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007993 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007994 VOS_ASSERT(0);
7995 vos_mem_free(wdiWowlDelBcPtrnInfo);
7996 return VOS_STATUS_E_NOMEM;
7997 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007998 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
7999 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008000
8001 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
8002 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
8003
Jeff Johnson295189b2012-06-20 16:38:30 -07008004 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 /* Store param pointer as passed in by caller */
8006 /* store Params pass it to WDI */
8007 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
8008 pWdaParams->pWdaContext = pWDA;
8009 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008010 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008011 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008012 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8015 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008016 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008017 vos_mem_free(pWdaParams->wdaMsgParam) ;
8018 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8019 vos_mem_free(pWdaParams) ;
8020 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008021 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008022
8023}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008024/*
8025 * FUNCTION: WDA_WowlEnterReqCallback
8026 *
8027 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008028void WDA_WowlEnterReqCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008029{
8030 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8031 tWDA_CbContext *pWDA;
8032 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008034 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 if(NULL == pWdaParams)
8036 {
8037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008038 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008039 VOS_ASSERT(0) ;
8040 return ;
8041 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008042 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8043 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
8044
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008045 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
8046
Jeff Johnson295189b2012-06-20 16:38:30 -07008047 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8048 vos_mem_free(pWdaParams) ;
8049
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008050 pWowlEnterParams->status =
8051 CONVERT_WDI2SIR_STATUS(pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07008052 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 return ;
8054}
Jeff Johnson295189b2012-06-20 16:38:30 -07008055/*
8056 * FUNCTION: WDA_ProcessWowlEnterReq
8057 * Request to WDI to enter WOWL
8058 */
8059VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
8060 tSirHalWowlEnterParams *pWowlEnterParams)
8061{
8062 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008063 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008064 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
8065 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
8066 sizeof(WDI_WowlEnterReqParamsType)) ;
8067 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008069 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 if(NULL == wdiWowlEnterInfo)
8071 {
8072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008073 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 VOS_ASSERT(0);
8075 return VOS_STATUS_E_NOMEM;
8076 }
8077 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8078 if(NULL == pWdaParams)
8079 {
8080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008081 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008082 VOS_ASSERT(0);
8083 vos_mem_free(wdiWowlEnterInfo);
8084 return VOS_STATUS_E_NOMEM;
8085 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008086 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
8087 pWowlEnterParams->magicPtrn,
8088 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
8090 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008091 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
8092 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008093 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
8094 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07008095 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
8096 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008097 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
8098 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008099 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
8100 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07008101 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
8102 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07008103 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
8104 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07008105#ifdef WLAN_WAKEUP_EVENTS
8106 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
8107 pWowlEnterParams->ucWoWEAPIDRequestEnable;
8108
8109 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
8110 pWowlEnterParams->ucWoWEAPOL4WayEnable;
8111
8112 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
8113 pWowlEnterParams->ucWowNetScanOffloadMatch;
8114
8115 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
8116 pWowlEnterParams->ucWowGTKRekeyError;
8117
8118 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
8119 pWowlEnterParams->ucWoWBSSConnLoss;
8120#endif // WLAN_WAKEUP_EVENTS
8121
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008122 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
8123 pWowlEnterParams->bssIdx;
8124
Jeff Johnson295189b2012-06-20 16:38:30 -07008125 wdiWowlEnterInfo->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 /* Store param pointer as passed in by caller */
8127 /* store Params pass it to WDI */
8128 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
8129 pWdaParams->pWdaContext = pWDA;
8130 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008131 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Jeff Johnson295189b2012-06-20 16:38:30 -07008132 (WDI_WowlEnterReqCb)WDA_WowlEnterReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008133 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008134 {
8135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8136 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008137 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008138 vos_mem_free(pWdaParams->wdaMsgParam) ;
8139 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8140 vos_mem_free(pWdaParams) ;
8141 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008142 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008143
8144}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008145/*
8146 * FUNCTION: WDA_WowlExitReqCallback
8147 *
8148 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008149void WDA_WowlExitReqCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008150{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008151 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8152 tWDA_CbContext *pWDA;
8153 tSirHalWowlExitParams *pWowlExitParams;
8154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008155 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008156 if(NULL == pWdaParams)
8157 {
8158 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008159 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008160 VOS_ASSERT(0) ;
8161 return ;
8162 }
8163 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8164 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
8165
8166 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
8167 pWowlExitParams->status = CONVERT_WDI2SIR_STATUS(pwdiWowlExitRsp->status);
8168
8169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8170 vos_mem_free(pWdaParams) ;
8171
Jeff Johnson295189b2012-06-20 16:38:30 -07008172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008173 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008174 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008175 return ;
8176}
Jeff Johnson295189b2012-06-20 16:38:30 -07008177/*
8178 * FUNCTION: WDA_ProcessWowlExitReq
8179 * Request to WDI to add WOWL Bcast pattern
8180 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008181VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
8182 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008183{
8184 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008185 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008186 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
8187 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
8188 sizeof(WDI_WowlExitReqParamsType)) ;
8189 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008191 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008192 if(NULL == wdiWowlExitInfo)
8193 {
8194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008195 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008196 VOS_ASSERT(0);
8197 return VOS_STATUS_E_NOMEM;
8198 }
8199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8200 if(NULL == pWdaParams)
8201 {
8202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008203 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008204 VOS_ASSERT(0);
8205 vos_mem_free(wdiWowlExitInfo);
8206 return VOS_STATUS_E_NOMEM;
8207 }
8208
8209 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
8210 pWowlExitParams->bssIdx;
8211
8212 wdiWowlExitInfo->wdiReqStatusCB = NULL;
8213
8214 /* Store param pointer as passed in by caller */
8215 /* store Params pass it to WDI */
8216 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
8217 pWdaParams->pWdaContext = pWDA;
8218 pWdaParams->wdaMsgParam = pWowlExitParams;
8219
8220 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
8221 (WDI_WowlExitReqCb)WDA_WowlExitReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008222
Jeff Johnson43971f52012-07-17 12:26:56 -07008223 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 {
8225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8226 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008227 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8229 vos_mem_free(pWdaParams->wdaMsgParam);
8230 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008231 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008232 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008233}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008234/*
8235 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
8236 * Request to WDI to determine whether a given station is capable of
8237 * using HW-based frame translation
8238 */
8239v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
8240 tANI_U8 staIdx)
8241{
8242 return WDI_IsHwFrameTxTranslationCapable(staIdx);
8243}
Jeff Johnson295189b2012-06-20 16:38:30 -07008244/*
8245 * FUNCTION: WDA_NvDownloadReqCallback
8246 * send NV Download RSP back to PE
8247 */
8248void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
8249 void* pUserData)
8250{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008251
8252 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
8253 tWDA_CbContext *pWDA;
8254
Jeff Johnson295189b2012-06-20 16:38:30 -07008255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008256 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008257
8258 if(NULL == pWdaParams)
8259 {
8260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008261 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008262 VOS_ASSERT(0) ;
8263 return ;
8264 }
8265
8266 pWDA = pWdaParams->pWdaContext;
8267
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8270 vos_mem_free(pWdaParams);
8271
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 return ;
8274}
Jeff Johnson295189b2012-06-20 16:38:30 -07008275/*
8276 * FUNCTION: WDA_ProcessNvDownloadReq
8277 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
8278 */
8279VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
8280{
8281 /* Initialize the local Variables*/
8282 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
8283 v_VOID_t *pNvBuffer=NULL;
8284 v_SIZE_t bufferSize = 0;
8285 WDI_Status status = WDI_STATUS_E_FAILURE;
8286 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008287 tWDA_ReqParams *pWdaParams ;
8288
Jeff Johnson295189b2012-06-20 16:38:30 -07008289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008291 if(NULL == pWDA)
8292 {
8293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008294 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008295 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008296 return VOS_STATUS_E_FAILURE;
8297 }
8298
8299 /* Get the NV structure base address and size from VOS */
8300 vos_nv_getNVBuffer(&pNvBuffer,&bufferSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
8302 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008303 if(NULL == wdiNvDownloadReqParam)
8304 {
8305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 VOS_ASSERT(0);
8308 return VOS_STATUS_E_NOMEM;
8309 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008310 /* Copy Params to wdiNvDownloadReqParam*/
8311 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
8312 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008313
8314 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8315 if(NULL == pWdaParams)
8316 {
8317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008318 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008319 VOS_ASSERT(0);
8320 vos_mem_free(wdiNvDownloadReqParam);
8321 return VOS_STATUS_E_NOMEM;
8322 }
8323
Jeff Johnson295189b2012-06-20 16:38:30 -07008324 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008325 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
8326 pWdaParams->wdaMsgParam = NULL;
8327 pWdaParams->pWdaContext = pWDA;
8328
8329
Jeff Johnson295189b2012-06-20 16:38:30 -07008330 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008331
Jeff Johnson295189b2012-06-20 16:38:30 -07008332 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008333 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
8334
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 if(IS_WDI_STATUS_FAILURE(status))
8336 {
8337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8338 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008339 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8340 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008342 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343}
8344/*
8345 * FUNCTION: WDA_FlushAcReqCallback
8346 * send Flush AC RSP back to TL
8347 */
8348void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
8349{
8350 vos_msg_t wdaMsg = {0} ;
8351 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8352 tFlushACReq *pFlushACReqParams;
8353 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008354 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008355 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008356 if(NULL == pWdaParams)
8357 {
8358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008359 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008360 VOS_ASSERT(0) ;
8361 return ;
8362 }
8363
8364 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
8365 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
8366 if(NULL == pFlushACRspParams)
8367 {
8368 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008369 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008370 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008371 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008372 return ;
8373 }
8374 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
8375 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
8376 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
8377 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
8378 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
8379 pFlushACRspParams->status = CONVERT_WDI2SIR_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 vos_mem_free(pWdaParams->wdaMsgParam) ;
8381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8382 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
8384 wdaMsg.bodyptr = (void *)pFlushACRspParams;
8385 // POST message to TL
8386 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
8387
Jeff Johnson295189b2012-06-20 16:38:30 -07008388 return ;
8389}
Jeff Johnson295189b2012-06-20 16:38:30 -07008390/*
8391 * FUNCTION: WDA_ProcessFlushAcReq
8392 * Request to WDI to Update the DELBA REQ params.
8393 */
8394VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
8395 tFlushACReq *pFlushAcReqParams)
8396{
8397 WDI_Status status = WDI_STATUS_SUCCESS ;
8398 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
8399 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
8400 sizeof(WDI_FlushAcReqParamsType)) ;
8401 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 if(NULL == wdiFlushAcReqParam)
8403 {
8404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008405 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008406 VOS_ASSERT(0);
8407 return VOS_STATUS_E_NOMEM;
8408 }
8409 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8410 if(NULL == pWdaParams)
8411 {
8412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 VOS_ASSERT(0);
8415 vos_mem_free(wdiFlushAcReqParam);
8416 return VOS_STATUS_E_NOMEM;
8417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008420 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
8421 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
8422 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
8423 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008424 /* Store Flush AC pointer, as this will be used for response */
8425 /* store Params pass it to WDI */
8426 pWdaParams->pWdaContext = pWDA;
8427 pWdaParams->wdaMsgParam = pFlushAcReqParams;
8428 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008429 status = WDI_FlushAcReq(wdiFlushAcReqParam,
8430 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008431 if(IS_WDI_STATUS_FAILURE(status))
8432 {
8433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8434 "Failure in Flush AC REQ Params WDI API, free all the memory " );
8435 vos_mem_free(pWdaParams->wdaMsgParam) ;
8436 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8437 vos_mem_free(pWdaParams) ;
8438 //TODO: respond to TL with failure
8439 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008440 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008441}
Jeff Johnson295189b2012-06-20 16:38:30 -07008442/*
8443 * FUNCTION: WDA_BtAmpEventReqCallback
8444 *
8445 */
8446void WDA_BtAmpEventReqCallback(WDI_Status status, void* pUserData)
8447{
8448 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8449 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008450 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008451
8452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008453 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008454 if(NULL == pWdaParams)
8455 {
8456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008457 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008458 VOS_ASSERT(0) ;
8459 return ;
8460 }
8461 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8462 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
8463 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
8464 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8465 {
8466 pWDA->wdaAmpSessionOn = VOS_FALSE;
8467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008468 vos_mem_free(pWdaParams->wdaMsgParam) ;
8469 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8470 vos_mem_free(pWdaParams) ;
8471 /*
8472 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
8473 * param here
8474 */
Jeff Johnson295189b2012-06-20 16:38:30 -07008475 return ;
8476}
8477
Jeff Johnson295189b2012-06-20 16:38:30 -07008478/*
8479 * FUNCTION: WDA_ProcessBtAmpEventReq
8480 * Request to WDI to Update with BT AMP events.
8481 */
8482VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
8483 tSmeBtAmpEvent *pBtAmpEventParams)
8484{
8485 WDI_Status status = WDI_STATUS_SUCCESS ;
8486 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
8487 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
8488 sizeof(WDI_BtAmpEventParamsType)) ;
8489 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008491 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008492 if(NULL == wdiBtAmpEventParam)
8493 {
8494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008495 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008496 VOS_ASSERT(0);
8497 return VOS_STATUS_E_NOMEM;
8498 }
8499 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8500 if(NULL == pWdaParams)
8501 {
8502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008503 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008504 VOS_ASSERT(0);
8505 vos_mem_free(wdiBtAmpEventParam);
8506 return VOS_STATUS_E_NOMEM;
8507 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008508 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
8509 pBtAmpEventParams->btAmpEventType;
Jeff Johnson295189b2012-06-20 16:38:30 -07008510 wdiBtAmpEventParam->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008511 /* Store BT AMP event pointer, as this will be used for response */
8512 /* store Params pass it to WDI */
8513 pWdaParams->pWdaContext = pWDA;
8514 pWdaParams->wdaMsgParam = pBtAmpEventParams;
8515 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008516 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
8517 (WDI_BtAmpEventRspCb)WDA_BtAmpEventReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008518 if(IS_WDI_STATUS_FAILURE(status))
8519 {
8520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8521 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
8522 vos_mem_free(pWdaParams->wdaMsgParam) ;
8523 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8524 vos_mem_free(pWdaParams) ;
8525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008526 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
8527 {
8528 pWDA->wdaAmpSessionOn = VOS_TRUE;
8529 }
8530 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008531}
8532
Jeff Johnson295189b2012-06-20 16:38:30 -07008533#ifdef ANI_MANF_DIAG
8534/*
8535 * FUNCTION: WDA_FTMCommandReqCallback
8536 * Handle FTM CMD response came from HAL
8537 * Route responce to HDD FTM
8538 */
8539void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
8540 void *usrData)
8541{
8542 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008543 if((NULL == pWDA) || (NULL == ftmCmdRspData))
8544 {
8545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008546 "%s, invalid input 0x%x, 0x%x",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 return;
8548 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008549 /* Release Current FTM Command Request */
8550 vos_mem_free(pWDA->wdaFTMCmdReq);
8551 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008552#ifndef WLAN_FTM_STUB
8553 /* Post FTM Responce to HDD FTM */
8554 wlan_sys_ftm(ftmCmdRspData);
8555#endif /* WLAN_FTM_STUB */
Jeff Johnson295189b2012-06-20 16:38:30 -07008556 return;
8557}
Jeff Johnson295189b2012-06-20 16:38:30 -07008558/*
8559 * FUNCTION: WDA_ProcessFTMCommand
8560 * Send FTM command to WDI
8561 */
8562VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
8563 tPttMsgbuffer *pPTTFtmCmd)
8564{
8565 WDI_Status status = WDI_STATUS_SUCCESS;
8566 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008567 ftmCMDReq = (WDI_FTMCommandReqType *)
8568 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
8569 if(NULL == ftmCMDReq)
8570 {
8571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8572 "WDA FTM Command buffer alloc fail");
8573 return VOS_STATUS_E_NOMEM;
8574 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008575 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
8576 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07008577 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07008578 /* Send command to WDI */
8579 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07008580 return status;
8581}
8582#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07008583#ifdef FEATURE_OEM_DATA_SUPPORT
8584/*
8585 * FUNCTION: WDA_StartOemDataReqCallback
8586 *
8587 */
8588void WDA_StartOemDataReqCallback(
8589 WDI_oemDataRspParamsType *wdiOemDataRspParams,
8590 void* pUserData)
8591{
8592 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008593 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8594 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07008595 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008596
Jeff Johnsone7245742012-09-05 17:12:55 -07008597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008598 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008599
8600 if(NULL == pWdaParams)
8601 {
8602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008603 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008604 VOS_ASSERT(0) ;
8605 return ;
8606 }
8607 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8608
Jeff Johnsone7245742012-09-05 17:12:55 -07008609 if(NULL == pWDA)
8610 {
8611 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008612 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008613 VOS_ASSERT(0);
8614 return ;
8615 }
8616
8617 /*
8618 * Allocate memory for response params sent to PE
8619 */
8620 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
8621
8622 // Check if memory is allocated for OemdataMeasRsp Params.
8623 if(NULL == pOemDataRspParams)
8624 {
8625 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8626 "OEM DATA WDA callback alloc fail");
8627 VOS_ASSERT(0) ;
8628 return;
8629 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008630
Jeff Johnsone7245742012-09-05 17:12:55 -07008631 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008632 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8633 vos_mem_free(pWdaParams->wdaMsgParam);
8634 vos_mem_free(pWdaParams) ;
8635
Jeff Johnsone7245742012-09-05 17:12:55 -07008636 /*
8637 * Now go ahead and copy other stuff for PE in incase of sucess only
8638 * Also, here success always means that we have atleast one BSSID.
8639 */
8640 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
8641
8642 //enable Tx
8643 status = WDA_ResumeDataTx(pWDA);
8644 if(status != VOS_STATUS_SUCCESS)
8645 {
8646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
8647 }
8648 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
8649 return ;
8650}
8651/*
8652 * FUNCTION: WDA_ProcessStartOemDataReq
8653 * Send Start Oem Data Req to WDI
8654 */
8655VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
8656 tStartOemDataReq *pOemDataReqParams)
8657{
8658 WDI_Status status = WDI_STATUS_SUCCESS;
8659 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008660 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -07008661
8662 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
8663
8664 if(NULL == wdiOemDataReqParams)
8665 {
8666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008667 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008668 VOS_ASSERT(0);
8669 return VOS_STATUS_E_NOMEM;
8670 }
8671
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008672 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
8673 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
8674 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
8675 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -07008676
8677 wdiOemDataReqParams->wdiReqStatusCB = NULL;
8678
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008679 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8680 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -07008681 {
8682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008683 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07008684 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008685 vos_mem_free(pOemDataReqParams);
8686 VOS_ASSERT(0);
8687 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -07008688 }
Jeff Johnsone7245742012-09-05 17:12:55 -07008689
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008690 pWdaParams->wdaMsgParam = (void *)pOemDataReqParams;
8691 pWdaParams->wdaWdiApiMsgParam = (void *)wdiOemDataReqParams;
8692
8693 status = WDI_StartOemDataReq(wdiOemDataReqParams,
8694 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008695
8696 if(IS_WDI_STATUS_FAILURE(status))
8697 {
8698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8699 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8701 vos_mem_free(pWdaParams->wdaMsgParam);
8702 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -07008703 }
8704 return CONVERT_WDI2VOS_STATUS(status) ;
8705}
8706#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07008707/*
8708 * FUNCTION: WDA_SetTxPerTrackingReqCallback
8709 *
8710 */
8711void WDA_SetTxPerTrackingReqCallback(WDI_Status status, void* pUserData)
8712{
8713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008716 if(NULL == pWdaParams)
8717 {
8718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 VOS_ASSERT(0) ;
8721 return ;
8722 }
8723
8724 if(NULL != pWdaParams->wdaMsgParam)
8725 {
8726 vos_mem_free(pWdaParams->wdaMsgParam);
8727 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008728 if(NULL != pWdaParams->wdaWdiApiMsgParam)
8729 {
8730 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8731 }
8732
8733 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008734 return ;
8735}
Jeff Johnson295189b2012-06-20 16:38:30 -07008736#ifdef WLAN_FEATURE_GTK_OFFLOAD
8737/*
8738 * FUNCTION: WDA_HostOffloadReqCallback
8739 *
8740 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008741void WDA_GTKOffloadReqCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
8742 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008743{
8744 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8745
8746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008747 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008748
8749 VOS_ASSERT(NULL != pWdaParams);
8750
8751 vos_mem_free(pWdaParams->wdaMsgParam) ;
8752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8753 vos_mem_free(pWdaParams) ;
8754
8755 //print a msg, nothing else to do
8756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8757 "WDA_GTKOffloadReqCallback invoked " );
8758
8759 return ;
8760}
8761
8762/*
8763 * FUNCTION: WDA_ProcessGTKOffloadReq
8764 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8765 * to broadcast traffic (sta mode).
8766 */
8767VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
8768 tpSirGtkOffloadParams pGtkOffloadParams)
8769{
8770 VOS_STATUS status = VOS_STATUS_SUCCESS;
8771 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
8772 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
8773 sizeof(WDI_GtkOffloadReqMsg)) ;
8774 tWDA_ReqParams *pWdaParams ;
8775
8776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008777 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008778
8779 if(NULL == wdiGtkOffloadReqMsg)
8780 {
8781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 VOS_ASSERT(0);
8784 return VOS_STATUS_E_NOMEM;
8785 }
8786
8787 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8788 if(NULL == pWdaParams)
8789 {
8790 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008791 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008792 VOS_ASSERT(0);
8793 vos_mem_free(wdiGtkOffloadReqMsg);
8794 return VOS_STATUS_E_NOMEM;
8795 }
8796
8797 //
8798 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
8799 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008800
8801 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
8802 pGtkOffloadParams->bssId, sizeof(wpt_macAddr))
8803
Jeff Johnson295189b2012-06-20 16:38:30 -07008804 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
8805 // Copy KCK
8806 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
8807 // Copy KEK
8808 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
8809 // Copy KeyReplayCounter
8810 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
8811 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
8812
8813 wdiGtkOffloadReqMsg->wdiReqStatusCB = NULL;
8814
8815 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
8816 (NULL == pWDA->wdaWdiApiMsgParam));
8817
8818 /* Store Params pass it to WDI */
8819 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
8820 pWdaParams->pWdaContext = pWDA;
8821 /* Store param pointer as passed in by caller */
8822 pWdaParams->wdaMsgParam = pGtkOffloadParams;
8823
8824 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadReqCallback, pWdaParams);
8825
8826 if(IS_WDI_STATUS_FAILURE(status))
8827 {
8828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8829 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
8830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8831 vos_mem_free(pWdaParams->wdaMsgParam);
8832 vos_mem_free(pWdaParams);
8833 }
8834
8835 return CONVERT_WDI2VOS_STATUS(status) ;
8836}
8837
8838/*
8839 * FUNCTION: WDA_GtkOffloadGetInfoCallback
8840 *
8841 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008842void WDA_GtkOffloadGetInfoCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
8843 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008844{
8845 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8846 tWDA_CbContext *pWDA;
8847 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
8848 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tpSirGtkOffloadGetInfoRspParams)) ;
8849 tANI_U8 i;
8850 vos_msg_t vosMsg;
8851
8852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008853 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008854
8855 VOS_ASSERT(NULL != pWdaParams);
8856
8857 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
8858 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
8859
8860 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
8861 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
8862
8863 /* Message Header */
8864 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8865 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tpSirGtkOffloadGetInfoRspParams);
8866
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008867 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
8868 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
8869 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
8870 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
8871 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
8872 pGtkOffloadGetInfoRsp->bssIdx = pwdiGtkOffloadGetInfoRsparams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008873
8874 /* VOS message wrapper */
8875 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
8876 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
8877 vosMsg.bodyval = 0;
8878
8879 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
8880 {
8881 /* free the mem and return */
8882 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
8883 }
8884
8885 vos_mem_free(pWdaParams->wdaMsgParam) ;
8886 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8887 vos_mem_free(pWdaParams) ;
8888}
8889#endif
8890
8891/*
8892 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
8893 * Request to WDI to set Tx Per Tracking configurations
8894 */
8895VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
8896{
8897 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008898 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008899 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
8900 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
8901 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
8902 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008903 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008904 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008905 if(NULL == pwdiSetTxPerTrackingReqParams)
8906 {
8907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008908 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008909 vos_mem_free(pTxPerTrackingParams);
8910 VOS_ASSERT(0);
8911 return VOS_STATUS_E_NOMEM;
8912 }
8913 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8914 if(NULL == pWdaParams)
8915 {
8916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008917 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 vos_mem_free(pwdiSetTxPerTrackingReqParams);
8919 vos_mem_free(pTxPerTrackingParams);
8920 VOS_ASSERT(0);
8921 return VOS_STATUS_E_NOMEM;
8922 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008923 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
8924 pTxPerTrackingParams->ucTxPerTrackingEnable;
8925 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
8926 pTxPerTrackingParams->ucTxPerTrackingPeriod;
8927 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
8928 pTxPerTrackingParams->ucTxPerTrackingRatio;
8929 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
8930 pTxPerTrackingParams->uTxPerTrackingWatermark;
Jeff Johnson295189b2012-06-20 16:38:30 -07008931 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008932 /* Store param pointer as passed in by caller */
8933 /* store Params pass it to WDI
8934 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
8935 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
8936 pWdaParams->pWdaContext = pWDA;
8937 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008938 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Jeff Johnson295189b2012-06-20 16:38:30 -07008939 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingReqCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008940 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008941 {
8942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8943 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008944 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 vos_mem_free(pWdaParams->wdaMsgParam) ;
8946 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8947 vos_mem_free(pWdaParams) ;
8948 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008949 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008950
8951}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008952/*
8953 * FUNCTION: WDA_HALDumpCmdCallback
8954 * Send the VOS complete .
8955 */
8956void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
8957 void* pUserData)
8958{
8959 tANI_U8 *buffer = NULL;
8960 tWDA_CbContext *pWDA = NULL;
8961 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008962 if(NULL == pWdaParams)
8963 {
8964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008965 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008966 VOS_ASSERT(0) ;
8967 return ;
8968 }
8969
8970 pWDA = pWdaParams->pWdaContext;
8971 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 if(wdiRspParams->usBufferLen > 0)
8973 {
8974 /*Copy the Resp data to UMAC supplied buffer*/
8975 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
8976 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8978 vos_mem_free(pWdaParams);
8979
8980 /* Indicate VOSS about the start complete */
8981 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07008982 return ;
8983}
8984
Jeff Johnson295189b2012-06-20 16:38:30 -07008985/*
8986 * FUNCTION: WDA_ProcessHALDumpCmdReq
8987 * Send Dump command to WDI
8988 */
8989VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
8990 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
8991 tANI_U32 arg4, tANI_U8 *pBuffer)
8992{
8993 WDI_Status status = WDI_STATUS_SUCCESS;
8994 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
8995 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
8996 tWDA_ReqParams *pWdaParams ;
8997 pVosContextType pVosContext = NULL;
8998 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008999 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
9000 (void *)pMac);
9001
9002 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9003 if(NULL == pWdaParams)
9004 {
9005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009006 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009007 return VOS_STATUS_E_NOMEM;
9008 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009009 /* Allocate memory WDI request structure*/
9010 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
9011 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
9012 if(NULL == wdiHALDumpCmdReqParam)
9013 {
9014 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9015 "WDA HAL DUMP Command buffer alloc fail");
9016 vos_mem_free(pWdaParams);
9017 return WDI_STATUS_E_FAILURE;
9018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009020 /* Extract the arguments */
9021 wdiHalDumpCmdInfo->command = cmd;
9022 wdiHalDumpCmdInfo->argument1 = arg1;
9023 wdiHalDumpCmdInfo->argument2 = arg2;
9024 wdiHalDumpCmdInfo->argument3 = arg3;
9025 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -07009026 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009027 pWdaParams->pWdaContext = pVosContext->pWDAContext;
9028
9029 /* Response message will be passed through the buffer */
9030 pWdaParams->wdaMsgParam = (void *)pBuffer;
9031
9032 /* store Params pass it to WDI */
9033 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009034 /* Send command to WDI */
9035 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009036 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), 1000 );
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 if ( vStatus != VOS_STATUS_SUCCESS )
9038 {
9039 if ( vStatus == VOS_STATUS_E_TIMEOUT )
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009042 "%s: Timeout occured before WDA_HALDUMP complete\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009043 }
9044 else
9045 {
9046 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009047 "%s: WDA_HALDUMP reporting other error \n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009048 }
9049 VOS_ASSERT(0);
9050 }
9051 return status;
9052}
Jeff Johnson295189b2012-06-20 16:38:30 -07009053#ifdef WLAN_FEATURE_GTK_OFFLOAD
9054/*
9055 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
9056 * Request to WDI to get GTK Offload Information
9057 */
9058VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
9059 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
9060{
9061 VOS_STATUS status = VOS_STATUS_SUCCESS;
9062 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
9063 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
9064 tWDA_ReqParams *pWdaParams ;
9065
9066 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
9067 {
9068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009069 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009070 VOS_ASSERT(0);
9071 return VOS_STATUS_E_NOMEM;
9072 }
9073
9074 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9075 if(NULL == pWdaParams)
9076 {
9077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009078 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009079 VOS_ASSERT(0);
9080 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
9081 return VOS_STATUS_E_NOMEM;
9082 }
9083
9084 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = NULL;
9085
9086 VOS_ASSERT((NULL == pWDA->wdaMsgParam) &&
9087 (NULL == pWDA->wdaWdiApiMsgParam));
9088
9089 /* Store Params pass it to WDI */
9090 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
9091 pWdaParams->pWdaContext = pWDA;
9092 /* Store param pointer as passed in by caller */
9093 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
9094
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009095 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
9096 pGtkOffloadGetInfoRsp->bssId, sizeof(wpt_macAddr))
9097
Jeff Johnson295189b2012-06-20 16:38:30 -07009098 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoCallback, pWdaParams);
9099
9100 if(IS_WDI_STATUS_FAILURE(status))
9101 {
9102 /* failure returned by WDI API */
9103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9104 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
9105 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9106 vos_mem_free(pWdaParams) ;
9107 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
9108 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
9109 }
9110
9111 return CONVERT_WDI2VOS_STATUS(status) ;
9112}
9113#endif // WLAN_FEATURE_GTK_OFFLOAD
9114
9115/*
9116 * -------------------------------------------------------------------------
9117 * DATA interface with WDI for Mgmt Frames
9118 * -------------------------------------------------------------------------
9119 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009120/*
9121 * FUNCTION: WDA_TxComplete
9122 * Callback function for the WDA_TxPacket
9123 */
9124VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
9125 VOS_STATUS status )
9126{
9127
9128 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9129 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009130 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009131
9132 if(NULL == wdaContext)
9133 {
9134 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9135 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009136 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 VOS_ASSERT(0);
9138 return VOS_STATUS_E_FAILURE;
9139 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009140
9141 /*Check if frame was timed out or not*/
9142 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
9143 (v_PVOID_t)&uUserData);
9144
9145 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
9146 {
9147 /*Discard frame - no further processing is needed*/
9148 vos_pkt_return_packet(pData);
9149 return VOS_STATUS_SUCCESS;
9150 }
9151
Jeff Johnson295189b2012-06-20 16:38:30 -07009152 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
9153 if( NULL!=wdaContext->pTxCbFunc)
9154 {
9155 /*check if packet is freed already*/
9156 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
9157 {
9158 wdaContext->pTxCbFunc(pMac, pData);
9159 }
9160 else
9161 {
9162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
9163 "%s:packet (0x%X) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009164 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009165 //Return from here since we reaching here because the packet already timeout
9166 return status;
9167 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009168 }
9169
9170 /*
9171 * Trigger the event to bring the HAL TL Tx complete function to come
9172 * out of wait
9173 * Let the coe above to complete the packet first. When this event is set,
9174 * the thread waiting for the event may run and set Vospacket_freed causing the original
9175 * packet not being freed.
9176 */
9177 status = vos_event_set(&wdaContext->txFrameEvent);
9178 if(!VOS_IS_STATUS_SUCCESS(status))
9179 {
9180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9181 "NEW VOS Event Set failed - status = %d \n", status);
9182 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009183 return status;
9184}
Jeff Johnson295189b2012-06-20 16:38:30 -07009185/*
9186 * FUNCTION: WDA_TxPacket
9187 * Forward TX management frame to WDI
9188 */
9189VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
9190 void *pFrmBuf,
9191 tANI_U16 frmLen,
9192 eFrameType frmType,
9193 eFrameTxDir txDir,
9194 tANI_U8 tid,
9195 pWDATxRxCompFunc pCompFunc,
9196 void *pData,
9197 pWDAAckFnTxComp pAckTxComp,
9198 tANI_U8 txFlag)
9199{
9200 VOS_STATUS status = VOS_STATUS_SUCCESS ;
9201 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
9202 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
9203 tANI_U8 eventIdx = 0;
9204 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
9205 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -07009206 if((NULL == pWDA)||(NULL == pFrmBuf))
9207 {
9208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9209 "%s:pWDA %x or pFrmBuf %x is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009210 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009211 VOS_ASSERT(0);
9212 return VOS_STATUS_E_FAILURE;
9213 }
9214
9215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9216 "Tx Mgmt Frame Subtype: %d alloc(%x)\n", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -07009217 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
9218 if(NULL == pMac)
9219 {
9220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009221 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 VOS_ASSERT(0);
9223 return VOS_STATUS_E_FAILURE;
9224 }
9225
9226
9227
9228 /* store the call back function in WDA context */
9229 pWDA->pTxCbFunc = pCompFunc;
9230 /* store the call back for the function of ackTxComplete */
9231 if( pAckTxComp )
9232 {
Jeff Johnsone7245742012-09-05 17:12:55 -07009233 if( NULL != pWDA->pAckTxCbFunc )
9234 {
9235 /* Already TxComp is active no need to active again */
9236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9237 "There is already one request pending for tx complete\n");
9238 pWDA->pAckTxCbFunc( pMac, 0);
9239 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009240
Jeff Johnsone7245742012-09-05 17:12:55 -07009241 if( VOS_STATUS_SUCCESS !=
9242 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9243 {
9244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9245 "Tx Complete timeout Timer Stop Failed ");
9246 }
9247 else
9248 {
9249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9250 "Tx Complete timeout Timer Stop Sucess ");
9251 }
9252 }
9253
9254 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
9255 pWDA->pAckTxCbFunc = pAckTxComp;
9256 if( VOS_STATUS_SUCCESS !=
9257 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
9258 {
9259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9260 "Tx Complete Timer Start Failed ");
9261 pWDA->pAckTxCbFunc = NULL;
9262 return eHAL_STATUS_FAILURE;
9263 }
9264 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009265 /* Reset the event to be not signalled */
9266 status = vos_event_reset(&pWDA->txFrameEvent);
9267 if(!VOS_IS_STATUS_SUCCESS(status))
9268 {
9269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9270 "VOS Event reset failed - status = %d\n",status);
9271 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
9272 if( pAckTxComp )
9273 {
9274 pWDA->pAckTxCbFunc = NULL;
9275 if( VOS_STATUS_SUCCESS !=
9276 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9277 {
9278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9279 "Tx Complete timeout Timer Stop Failed ");
9280 }
9281 }
9282 return VOS_STATUS_E_FAILURE;
9283 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009284
9285 /* If Peer Sta mask is set don't overwrite to self sta */
9286 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -07009287 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009288 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -07009289 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009290 else
9291 {
9292 /* Get system role, use the self station if in unknown role or STA role */
9293 systemRole = wdaGetGlobalSystemRole(pMac);
9294 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
9295 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -08009296#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -08009297 && frmType == HAL_TXRX_FRM_802_11_MGMT
9298#endif
9299 ))
9300 {
9301 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
9302 }
9303 }
9304
Jeff Johnson295189b2012-06-20 16:38:30 -07009305
Jeff Johnsone7245742012-09-05 17:12:55 -07009306 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
9307 disassoc frame reaches the HW, HAL has already deleted the peer station */
9308 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -07009309 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -08009310 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -07009311 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -07009312 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 /*Send Probe request frames on self sta idx*/
9314 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -07009315 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009316 /* Since we donot want probe responses to be retried, send probe responses
9317 through the NO_ACK queues */
9318 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
9319 {
9320 //probe response is sent out using self station and no retries options.
9321 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
9322 }
9323 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
9324 {
9325 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
9326 }
9327 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
9329
9330 /*Set frame tag to 0
9331 We will use the WDA user data in order to tag a frame as expired*/
9332 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9333 (v_PVOID_t)0);
9334
9335
9336 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
9337 frmLen, ucTypeSubType, tid,
9338 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
9339 {
9340 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9341 "Sending Mgmt Frame failed - status = %d\n", status);
9342 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
9343 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
9344 if( pAckTxComp )
9345 {
9346 pWDA->pAckTxCbFunc = NULL;
9347 if( VOS_STATUS_SUCCESS !=
9348 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9349 {
9350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9351 "Tx Complete timeout Timer Stop Failed ");
9352 }
9353 }
9354 return VOS_STATUS_E_FAILURE;
9355 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009356 /*
9357 * Wait for the event to be set by the TL, to get the response of TX
9358 * complete, this event should be set by the Callback function called by TL
9359 */
9360 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
9361 &eventIdx);
9362 if(!VOS_IS_STATUS_SUCCESS(status))
9363 {
9364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9365 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009366 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009367 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
9368 after the packet gets completed(packet freed once)*/
9369
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -07009370 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
9371 WDA_TransportChannelDebug(0, 1);
9372
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009373 /*Tag Frame as timed out for later deletion*/
9374 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
9375 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
9376
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 /* check whether the packet was freed already,so need not free again when
9378 * TL calls the WDA_Txcomplete routine
9379 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009380 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
9381 /*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 -07009382 {
9383 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -07009384 } */
9385
Jeff Johnson295189b2012-06-20 16:38:30 -07009386 if( pAckTxComp )
9387 {
9388 pWDA->pAckTxCbFunc = NULL;
9389 if( VOS_STATUS_SUCCESS !=
9390 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
9391 {
9392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9393 "Tx Complete timeout Timer Stop Failed ");
9394 }
9395 }
9396 status = VOS_STATUS_E_FAILURE;
9397 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 return status;
9399}
Jeff Johnson295189b2012-06-20 16:38:30 -07009400/*
9401 * FUNCTION: WDA_McProcessMsg
9402 * Trigger DAL-AL to start CFG download
9403 */
9404VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
9405{
9406 VOS_STATUS status = VOS_STATUS_SUCCESS;
9407 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009408 if(NULL == pMsg)
9409 {
9410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009411 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009412 VOS_ASSERT(0);
9413 return VOS_STATUS_E_FAILURE;
9414 }
9415
9416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009417 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -07009418
9419 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9420 if(NULL == pWDA )
9421 {
9422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009423 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009425 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 return VOS_STATUS_E_FAILURE;
9427 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 /* Process all the WDA messages.. */
9429 switch( pMsg->type )
9430 {
9431 case WNI_CFG_DNLD_REQ:
9432 {
9433 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 /* call WDA complete event if config download success */
9435 if( VOS_IS_STATUS_SUCCESS(status) )
9436 {
9437 vos_WDAComplete_cback(pVosContext);
9438 }
9439 else
9440 {
9441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9442 "WDA Config Download failure" );
9443 }
9444 break ;
9445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009446 /*
9447 * Init SCAN request from PE, convert it into DAL format
9448 * and send it to DAL
9449 */
9450 case WDA_INIT_SCAN_REQ:
9451 {
9452 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
9453 break ;
9454 }
9455 /* start SCAN request from PE */
9456 case WDA_START_SCAN_REQ:
9457 {
9458 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
9459 break ;
9460 }
9461 /* end SCAN request from PE */
9462 case WDA_END_SCAN_REQ:
9463 {
9464 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
9465 break ;
9466 }
9467 /* end SCAN request from PE */
9468 case WDA_FINISH_SCAN_REQ:
9469 {
9470 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
9471 break ;
9472 }
9473 /* join request from PE */
9474 case WDA_CHNL_SWITCH_REQ:
9475 {
9476 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
9477 {
9478 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
9479 }
9480 else
9481 {
9482 WDA_ProcessChannelSwitchReq(pWDA,
9483 (tSwitchChannelParams*)pMsg->bodyptr) ;
9484 }
9485 break ;
9486 }
9487 /* ADD BSS request from PE */
9488 case WDA_ADD_BSS_REQ:
9489 {
9490 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
9491 break ;
9492 }
9493 case WDA_ADD_STA_REQ:
9494 {
9495 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
9496 break ;
9497 }
9498 case WDA_DELETE_BSS_REQ:
9499 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009500 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
9501 break ;
9502 }
9503 case WDA_DELETE_STA_REQ:
9504 {
Jeff Johnson295189b2012-06-20 16:38:30 -07009505 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
9506 break ;
9507 }
9508 case WDA_CONFIG_PARAM_UPDATE_REQ:
9509 {
9510 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
9511 break ;
9512 }
9513 case WDA_SET_BSSKEY_REQ:
9514 {
9515 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
9516 break ;
9517 }
9518 case WDA_SET_STAKEY_REQ:
9519 {
9520 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9521 break ;
9522 }
9523 case WDA_SET_STA_BCASTKEY_REQ:
9524 {
9525 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
9526 break ;
9527 }
9528 case WDA_REMOVE_BSSKEY_REQ:
9529 {
9530 WDA_ProcessRemoveBssKeyReq(pWDA,
9531 (tRemoveBssKeyParams *)pMsg->bodyptr);
9532 break ;
9533 }
9534 case WDA_REMOVE_STAKEY_REQ:
9535 {
9536 WDA_ProcessRemoveStaKeyReq(pWDA,
9537 (tRemoveStaKeyParams *)pMsg->bodyptr);
9538 break ;
9539 }
9540 case WDA_REMOVE_STA_BCASTKEY_REQ:
9541 {
9542 /* TODO: currently UMAC is not sending this request, Add the code for
9543 handling this request when UMAC supports */
9544 break;
9545 }
9546#ifdef FEATURE_WLAN_CCX
9547 case WDA_TSM_STATS_REQ:
9548 {
9549 WDA_ProcessTsmStatsReq(pWDA, (tTSMStats *)pMsg->bodyptr);
9550 break;
9551 }
9552#endif
9553 case WDA_UPDATE_EDCA_PROFILE_IND:
9554 {
9555 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
9556 break;
9557 }
9558 case WDA_ADD_TS_REQ:
9559 {
9560 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
9561 break;
9562 }
9563 case WDA_DEL_TS_REQ:
9564 {
9565 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
9566 break;
9567 }
9568 case WDA_ADDBA_REQ:
9569 {
9570 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
9571 break;
9572 }
9573 case WDA_DELBA_IND:
9574 {
9575 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
9576 break;
9577 }
9578 case WDA_SET_LINK_STATE:
9579 {
9580 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
9581 break;
9582 }
9583 case WDA_GET_STATISTICS_REQ:
9584 {
9585 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
9586 break;
9587 }
9588 case WDA_PWR_SAVE_CFG:
9589 {
9590 if(pWDA->wdaState == WDA_READY_STATE)
9591 {
9592 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
9593 }
9594 else
9595 {
9596 if(NULL != pMsg->bodyptr)
9597 {
9598 vos_mem_free(pMsg->bodyptr);
9599 }
9600 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9601 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
9602 }
9603 break;
9604 }
9605 case WDA_ENTER_IMPS_REQ:
9606 {
9607 if(pWDA->wdaState == WDA_READY_STATE)
9608 {
9609 WDA_ProcessEnterImpsReq(pWDA);
9610 }
9611 else
9612 {
9613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9614 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9615 }
9616 break;
9617 }
9618 case WDA_EXIT_IMPS_REQ:
9619 {
9620 if(pWDA->wdaState == WDA_READY_STATE)
9621 {
9622 WDA_ProcessExitImpsReq(pWDA);
9623 }
9624 else
9625 {
9626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9627 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
9628 }
9629 break;
9630 }
9631 case WDA_ENTER_BMPS_REQ:
9632 {
9633 if(pWDA->wdaState == WDA_READY_STATE)
9634 {
9635 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
9636 }
9637 else
9638 {
9639 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9640 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9641 }
9642 break;
9643 }
9644 case WDA_EXIT_BMPS_REQ:
9645 {
9646 if(pWDA->wdaState == WDA_READY_STATE)
9647 {
9648 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
9649 }
9650 else
9651 {
9652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9653 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
9654 }
9655 break;
9656 }
9657 case WDA_ENTER_UAPSD_REQ:
9658 {
9659 if(pWDA->wdaState == WDA_READY_STATE)
9660 {
9661 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
9662 }
9663 else
9664 {
9665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9666 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9667 }
9668 break;
9669 }
9670 case WDA_EXIT_UAPSD_REQ:
9671 {
9672 if(pWDA->wdaState == WDA_READY_STATE)
9673 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009674 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009675 }
9676 else
9677 {
9678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9679 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
9680 }
9681 break;
9682 }
9683 case WDA_UPDATE_UAPSD_IND:
9684 {
9685 if(pWDA->wdaState == WDA_READY_STATE)
9686 {
9687 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
9688 }
9689 else
9690 {
9691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9692 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
9693 }
9694 break;
9695 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009696 case WDA_REGISTER_PE_CALLBACK :
9697 {
9698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9699 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
9700 /*TODO: store the PE callback */
9701 /* Do Nothing? MSG Body should be freed at here */
9702 if(NULL != pMsg->bodyptr)
9703 {
9704 vos_mem_free(pMsg->bodyptr);
9705 }
9706 break;
9707 }
9708 case WDA_SYS_READY_IND :
9709 {
9710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9711 "Handling msg type WDA_SYS_READY_IND " );
9712 pWDA->wdaState = WDA_READY_STATE;
9713 if(NULL != pMsg->bodyptr)
9714 {
9715 vos_mem_free(pMsg->bodyptr);
9716 }
9717 break;
9718 }
9719 case WDA_BEACON_FILTER_IND :
9720 {
9721 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
9722 break;
9723 }
9724 case WDA_BTC_SET_CFG:
9725 {
9726 /*TODO: handle this while dealing with BTC */
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9728 "Handling msg type WDA_BTC_SET_CFG " );
9729 /* Do Nothing? MSG Body should be freed at here */
9730 if(NULL != pMsg->bodyptr)
9731 {
9732 vos_mem_free(pMsg->bodyptr);
9733 }
9734 break;
9735 }
9736 case WDA_SIGNAL_BT_EVENT:
9737 {
9738 /*TODO: handle this while dealing with BTC */
9739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
9740 "Handling msg type WDA_SIGNAL_BT_EVENT " );
9741 /* Do Nothing? MSG Body should be freed at here */
9742 if(NULL != pMsg->bodyptr)
9743 {
9744 vos_mem_free(pMsg->bodyptr);
9745 }
9746 break;
9747 }
9748 case WDA_CFG_RXP_FILTER_REQ:
9749 {
9750 WDA_ProcessConfigureRxpFilterReq(pWDA,
9751 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
9752 break;
9753 }
9754 case WDA_SET_HOST_OFFLOAD:
9755 {
9756 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9757 break;
9758 }
9759 case WDA_SET_KEEP_ALIVE:
9760 {
9761 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
9762 break;
9763 }
9764#ifdef WLAN_NS_OFFLOAD
9765 case WDA_SET_NS_OFFLOAD:
9766 {
9767 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
9768 break;
9769 }
9770#endif //WLAN_NS_OFFLOAD
9771 case WDA_ADD_STA_SELF_REQ:
9772 {
9773 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
9774 break;
9775 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009776 case WDA_DEL_STA_SELF_REQ:
9777 {
9778 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
9779 break;
9780 }
9781 case WDA_WOWL_ADD_BCAST_PTRN:
9782 {
9783 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
9784 break;
9785 }
9786 case WDA_WOWL_DEL_BCAST_PTRN:
9787 {
9788 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
9789 break;
9790 }
9791 case WDA_WOWL_ENTER_REQ:
9792 {
9793 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
9794 break;
9795 }
9796 case WDA_WOWL_EXIT_REQ:
9797 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009798 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -07009799 break;
9800 }
9801 case WDA_TL_FLUSH_AC_REQ:
9802 {
9803 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
9804 break;
9805 }
9806 case WDA_SIGNAL_BTAMP_EVENT:
9807 {
9808 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
9809 break;
9810 }
9811#ifdef WDA_UT
9812 case WDA_WDI_EVENT_MSG:
9813 {
9814 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
9815 break ;
9816 }
9817#endif
9818 case WDA_UPDATE_BEACON_IND:
9819 {
9820 WDA_ProcessUpdateBeaconParams(pWDA,
9821 (tUpdateBeaconParams *)pMsg->bodyptr);
9822 break;
9823 }
9824 case WDA_SEND_BEACON_REQ:
9825 {
9826 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
9827 break;
9828 }
9829 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
9830 {
9831 WDA_ProcessUpdateProbeRspTemplate(pWDA,
9832 (tSendProbeRespParams *)pMsg->bodyptr);
9833 break;
9834 }
9835#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
9836 case WDA_SET_MAX_TX_POWER_REQ:
9837 {
9838 WDA_ProcessSetMaxTxPowerReq(pWDA,
9839 (tMaxTxPowerParams *)pMsg->bodyptr);
9840 break;
9841 }
9842#endif
9843#ifdef WLAN_FEATURE_P2P
9844 case WDA_SET_P2P_GO_NOA_REQ:
9845 {
9846 WDA_ProcessSetP2PGONOAReq(pWDA,
9847 (tP2pPsParams *)pMsg->bodyptr);
9848 break;
9849 }
9850#endif
9851 /* timer related messages */
9852 case WDA_TIMER_BA_ACTIVITY_REQ:
9853 {
9854 WDA_BaCheckActivity(pWDA) ;
9855 break ;
9856 }
9857#ifdef WLAN_FEATURE_VOWIFI_11R
9858 case WDA_AGGR_QOS_REQ:
9859 {
9860 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
9861 break;
9862 }
9863#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07009864#ifdef ANI_MANF_DIAG
9865 case WDA_FTM_CMD_REQ:
9866 {
9867 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
9868 break ;
9869 }
9870#endif /* ANI_MANF_DIAG */
Jeff Johnsone7245742012-09-05 17:12:55 -07009871#ifdef FEATURE_OEM_DATA_SUPPORT
9872 case WDA_START_OEM_DATA_REQ:
9873 {
9874 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
9875 break;
9876 }
9877#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -07009878 /* Tx Complete Time out Indication */
9879 case WDA_TX_COMPLETE_TIMEOUT_IND:
9880 {
9881 WDA_ProcessTxCompleteTimeOutInd(pWDA);
9882 break;
9883 }
9884 case WDA_WLAN_SUSPEND_IND:
9885 {
9886 WDA_ProcessWlanSuspendInd(pWDA,
9887 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
9888 break;
9889 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009890 case WDA_WLAN_RESUME_REQ:
9891 {
9892 WDA_ProcessWlanResumeReq(pWDA,
9893 (tSirWlanResumeParam *)pMsg->bodyptr) ;
9894 break;
9895 }
9896
9897 case WDA_UPDATE_CF_IND:
9898 {
9899 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
9900 pMsg->bodyptr = NULL;
9901 break;
9902 }
9903#ifdef FEATURE_WLAN_SCAN_PNO
9904 case WDA_SET_PNO_REQ:
9905 {
9906 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
9907 break;
9908 }
9909 case WDA_UPDATE_SCAN_PARAMS_REQ:
9910 {
9911 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
9912 break;
9913 }
9914 case WDA_SET_RSSI_FILTER_REQ:
9915 {
9916 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
9917 break;
9918 }
9919#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 case WDA_SET_TX_PER_TRACKING_REQ:
9921 {
9922 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
9923 break;
9924 }
9925
9926#ifdef WLAN_FEATURE_PACKET_FILTERING
9927 case WDA_8023_MULTICAST_LIST_REQ:
9928 {
9929 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
9930 break;
9931 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009932 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
9933 {
9934 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
9935 break;
9936 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009937 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
9938 {
9939 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
9940 break;
9941 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009942 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
9943 {
9944 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
9945 break;
9946 }
9947#endif // WLAN_FEATURE_PACKET_FILTERING
9948
9949
9950 case WDA_TRANSMISSION_CONTROL_IND:
9951 {
9952 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
9953 break;
9954 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 case WDA_SET_POWER_PARAMS_REQ:
9956 {
9957 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
9958 break;
9959 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009960#ifdef WLAN_FEATURE_GTK_OFFLOAD
9961 case WDA_GTK_OFFLOAD_REQ:
9962 {
9963 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
9964 break;
9965 }
9966
9967 case WDA_GTK_OFFLOAD_GETINFO_REQ:
9968 {
9969 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
9970 break;
9971 }
9972#endif //WLAN_FEATURE_GTK_OFFLOAD
9973
9974 case WDA_SET_TM_LEVEL_REQ:
9975 {
9976 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
9977 break;
9978 }
Mohit Khanna4a70d262012-09-11 16:30:12 -07009979#ifdef WLAN_FEATURE_11AC
9980 case WDA_UPDATE_OP_MODE:
9981 {
9982 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
9983 {
9984 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
9985 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
9986 else
9987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9988 " VHT OpMode Feature is Not Supported \n");
9989 }
9990 else
9991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9992 " 11AC Feature is Not Supported \n");
9993 break;
9994 }
9995#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 default:
9997 {
9998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9999 "No Handling for msg type %x in WDA "
10000 ,pMsg->type);
10001 /* Do Nothing? MSG Body should be freed at here */
10002 if(NULL != pMsg->bodyptr)
10003 {
10004 vos_mem_free(pMsg->bodyptr);
10005 }
10006 //WDA_VOS_ASSERT(0) ;
10007 }
10008 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010009 return status ;
10010}
10011
Jeff Johnson295189b2012-06-20 16:38:30 -070010012/*
10013 * FUNCTION: WDA_LowLevelIndCallback
10014 * IND API callback from WDI, send Ind to PE
10015 */
10016void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
10017 void* pUserData )
10018{
10019 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
10020#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10021 tSirRSSINotification rssiNotification;
10022#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010023 if(NULL == pWDA)
10024 {
10025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010026 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010027 VOS_ASSERT(0);
10028 return ;
10029 }
10030
10031 switch(wdiLowLevelInd->wdiIndicationType)
10032 {
10033 case WDI_RSSI_NOTIFICATION_IND:
10034 {
10035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10036 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010037#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
10038 rssiNotification.bReserved =
10039 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
10040 rssiNotification.bRssiThres1NegCross =
10041 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
10042 rssiNotification.bRssiThres1PosCross =
10043 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
10044 rssiNotification.bRssiThres2NegCross =
10045 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
10046 rssiNotification.bRssiThres2PosCross =
10047 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
10048 rssiNotification.bRssiThres3NegCross =
10049 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
10050 rssiNotification.bRssiThres3PosCross =
10051 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 WLANTL_BMPSRSSIRegionChangedNotification(
10053 pWDA->pVosContext,
10054 &rssiNotification);
10055#endif
10056 break ;
10057 }
10058 case WDI_MISSED_BEACON_IND:
10059 {
10060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10061 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010062 /* send IND to PE */
10063 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, NULL, 0) ;
10064 break ;
10065 }
10066 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
10067 {
10068 /* TODO: Decode Ind and send Ind to PE */
10069 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10070 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
10071 break ;
10072 }
10073
10074 case WDI_MIC_FAILURE_IND:
10075 {
10076 tpSirSmeMicFailureInd pMicInd =
10077 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
10078
10079 if(NULL == pMicInd)
10080 {
10081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010082 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010083 break;
10084 }
10085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10086 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010087 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
10088 pMicInd->length = sizeof(tSirSmeMicFailureInd);
10089 vos_mem_copy(pMicInd->bssId,
10090 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
10091 sizeof(tSirMacAddr));
10092 vos_mem_copy(pMicInd->info.srcMacAddr,
10093 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
10094 sizeof(tSirMacAddr));
10095 vos_mem_copy(pMicInd->info.taMacAddr,
10096 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
10097 sizeof(tSirMacAddr));
10098 vos_mem_copy(pMicInd->info.dstMacAddr,
10099 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
10100 sizeof(tSirMacAddr));
10101 vos_mem_copy(pMicInd->info.rxMacAddr,
10102 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
10103 sizeof(tSirMacAddr));
10104 pMicInd->info.multicast =
10105 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
10106 pMicInd->info.keyId=
10107 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
10108 pMicInd->info.IV1=
10109 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
10110 vos_mem_copy(pMicInd->info.TSC,
10111 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070010112 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
10113 (void *)pMicInd , 0) ;
10114 break ;
10115 }
10116 case WDI_FATAL_ERROR_IND:
10117 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070010118 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070010119 /* TODO: Decode Ind and send Ind to PE */
10120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10121 "Received WDI_FATAL_ERROR_IND from WDI ");
10122 break ;
10123 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010124 case WDI_DEL_STA_IND:
10125 {
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 tpDeleteStaContext pDelSTACtx =
10127 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
10128
10129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10130 "Received WDI_DEL_STA_IND from WDI ");
10131 if(NULL == pDelSTACtx)
10132 {
10133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010134 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010135 break;
10136 }
10137 vos_mem_copy(pDelSTACtx->addr2,
10138 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
10139 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010140 vos_mem_copy(pDelSTACtx->bssId,
10141 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
10142 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010143 pDelSTACtx->assocId =
10144 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
10145 pDelSTACtx->reasonCode =
10146 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
10147 pDelSTACtx->staId =
10148 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
10150 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 break ;
10152 }
10153 case WDI_COEX_IND:
10154 {
10155 tANI_U32 index;
10156 vos_msg_t vosMsg;
10157 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
10158 if(NULL == pSmeCoexInd)
10159 {
10160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010161 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010162 break;
10163 }
10164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10165 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070010166 /* Message Header */
10167 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
10168 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070010169 /* Info from WDI Indication */
10170 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
10171 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
10172 {
10173 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
10174 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010175 /* VOS message wrapper */
10176 vosMsg.type = eWNI_SME_COEX_IND;
10177 vosMsg.bodyptr = (void *)pSmeCoexInd;
10178 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010179 /* Send message to SME */
10180 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10181 {
10182 /* free the mem and return */
10183 vos_mem_free((v_VOID_t *)pSmeCoexInd);
10184 }
10185 else
10186 {
10187 /* DEBUG */
10188 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10189 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
10190 pSmeCoexInd->coexIndType,
10191 pSmeCoexInd->coexIndData[0],
10192 pSmeCoexInd->coexIndData[1],
10193 pSmeCoexInd->coexIndData[2],
10194 pSmeCoexInd->coexIndData[3]);
10195 }
10196 break;
10197 }
10198 case WDI_TX_COMPLETE_IND:
10199 {
10200 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
10201 /* Calling TxCompleteAck Indication from wda context*/
10202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10203 "Complete Indication received from HAL");
10204 if( pWDA->pAckTxCbFunc )
10205 {
10206 if( VOS_STATUS_SUCCESS !=
10207 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
10208 {
10209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10210 "Tx Complete timeout Timer Stop Failed ");
10211 }
10212 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
10213 pWDA->pAckTxCbFunc = NULL;
10214 }
10215 else
10216 {
10217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10218 "Tx Complete Indication is received after timeout ");
10219 }
10220 break;
10221 }
10222#ifdef WLAN_FEATURE_P2P
10223 case WDI_P2P_NOA_ATTR_IND :
10224 {
10225 tSirP2PNoaAttr *pP2pNoaAttr =
10226 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010227 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10228 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010229 if (NULL == pP2pNoaAttr)
10230 {
10231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10232 "Memory allocation failure, "
10233 "WDI_P2P_NOA_ATTR_IND not forwarded");
10234 break;
10235 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010236 pP2pNoaAttr->index =
10237 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
10238 pP2pNoaAttr->oppPsFlag =
10239 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
10240 pP2pNoaAttr->ctWin =
10241 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
10242
10243 pP2pNoaAttr->uNoa1IntervalCnt =
10244 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
10245 pP2pNoaAttr->uNoa1Duration =
10246 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
10247 pP2pNoaAttr->uNoa1Interval =
10248 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
10249 pP2pNoaAttr->uNoa1StartTime =
10250 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 pP2pNoaAttr->uNoa2IntervalCnt =
10252 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
10253 pP2pNoaAttr->uNoa2Duration =
10254 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
10255 pP2pNoaAttr->uNoa2Interval =
10256 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
10257 pP2pNoaAttr->uNoa2StartTime =
10258 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070010259 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
10260 (void *)pP2pNoaAttr , 0) ;
10261 break;
10262 }
10263#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070010264#ifdef FEATURE_WLAN_SCAN_PNO
10265 case WDI_PREF_NETWORK_FOUND_IND:
10266 {
10267 vos_msg_t vosMsg;
10268 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070010269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10270 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070010271 if (NULL == pPrefNetworkFoundInd)
10272 {
10273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10274 "Memory allocation failure, "
10275 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
10276 break;
10277 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010278 /* Message Header */
10279 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
10280 pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
10281
10282 /* Info from WDI Indication */
10283 pPrefNetworkFoundInd->ssId.length =
10284 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070010285 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010286 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
10287 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
10288 pPrefNetworkFoundInd->ssId.length);
Jeff Johnson295189b2012-06-20 16:38:30 -070010289 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070010290 /* VOS message wrapper */
10291 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
10292 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
10293 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010294 /* Send message to SME */
10295 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10296 {
10297 /* free the mem and return */
10298 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
10299 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010300 break;
10301 }
10302#endif // FEATURE_WLAN_SCAN_PNO
10303
10304#ifdef WLAN_WAKEUP_EVENTS
10305 case WDI_WAKE_REASON_IND:
10306 {
10307 vos_msg_t vosMsg;
10308 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
10309 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
10310 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
10311
10312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10313 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
10314 wdiLowLevelInd->wdiIndicationType,
10315 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
10316 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
10317 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10318
10319 if (NULL == pWakeReasonInd)
10320 {
10321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10322 "Memory allocation failure, "
10323 "WDI_WAKE_REASON_IND not forwarded");
10324 break;
10325 }
10326
10327 vos_mem_zero(pWakeReasonInd, allocSize);
10328
10329 /* Message Header */
10330 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
10331 pWakeReasonInd->mesgLen = allocSize;
10332
10333 /* Info from WDI Indication */
10334 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
10335 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
10336 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
10337 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
10338 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
10339 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
10340 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
10341 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
10342
10343 /* VOS message wrapper */
10344 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
10345 vosMsg.bodyptr = (void *) pWakeReasonInd;
10346 vosMsg.bodyval = 0;
10347
10348 /* Send message to SME */
10349 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10350 {
10351 /* free the mem and return */
10352 vos_mem_free((v_VOID_t *) pWakeReasonInd);
10353 }
10354
10355 break;
10356 }
10357#endif // WLAN_WAKEUP_EVENTS
10358
10359 case WDI_TX_PER_HIT_IND:
10360 {
10361 vos_msg_t vosMsg;
10362 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
10363 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
10364 /* VOS message wrapper */
10365 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
10366 vosMsg.bodyptr = NULL;
10367 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010368 /* Send message to SME */
10369 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10370 {
10371 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
10372 }
10373 break;
10374 }
10375
10376 default:
10377 {
10378 /* TODO error */
10379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10380 "Received UNKNOWN Indication from WDI ");
10381 }
10382 }
10383 return ;
10384}
10385
Jeff Johnson295189b2012-06-20 16:38:30 -070010386/*
10387 * BA related processing in WDA.
10388 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010389void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
10390 void* pUserData)
10391{
10392 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10393 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 if(NULL == pWdaParams)
10395 {
10396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010397 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 VOS_ASSERT(0) ;
10399 return ;
10400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010401 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070010402 vos_mem_free(pWdaParams->wdaMsgParam) ;
10403 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10404 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010406 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
10408 {
10409 tANI_U8 i = 0 ;
10410 tBaActivityInd *baActivityInd = NULL ;
10411 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
10412 tANI_U8 allocSize = sizeof(tBaActivityInd)
10413 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
10414 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
10415 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010416 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 if(NULL == baActivityInd)
10418 {
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010420 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 VOS_ASSERT(0) ;
10422 return;
10423 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010424 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
10425 sizeof(tSirMacAddr)) ;
10426 baActivityInd->baCandidateCnt = baCandidateCount ;
10427
10428 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
10429 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
10430
10431 for(i = 0 ; i < baCandidateCount ; i++)
10432 {
10433 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010434 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
10435 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010436 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
10437 {
10438 baCandidate->baInfo[tid].fBaEnable =
10439 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
10440 baCandidate->baInfo[tid].startingSeqNum =
10441 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
10442 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070010443 wdiBaCandidate++ ;
10444 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010445 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010446 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
10447 }
10448 else
10449 {
10450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10451 "BA Trigger RSP with Failure received ");
10452 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010453 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010454}
Jeff Johnson295189b2012-06-20 16:38:30 -070010455/*
10456 * BA Activity check timer handler
10457 */
10458void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
10459{
10460 tANI_U8 curSta = 0 ;
10461 tANI_U8 tid = 0 ;
10462 tANI_U8 size = 0 ;
10463 tANI_U8 baCandidateCount = 0 ;
10464 tANI_U8 newBaCandidate = 0 ;
10465 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
10466
10467 if(NULL == pWDA)
10468 {
10469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010470 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010471 VOS_ASSERT(0);
10472 return ;
10473 }
10474 if(WDA_MAX_STA < pWDA->wdaMaxSta)
10475 {
10476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10477 "Inconsistent STA entries in WDA");
10478 VOS_ASSERT(0) ;
10479 }
10480 /* walk through all STA entries and find out TX packet count */
10481 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
10482 {
10483 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
10484 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010485 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010486 tANI_U32 txPktCount = 0 ;
10487 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010488 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010489 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
10490 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070010491 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
10492 curSta, tid, &txPktCount)))
10493 {
10494#if 0
10495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10496 "************* %d:%d, %d ",curSta, txPktCount,
10497 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
10498#endif
10499 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070010500 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070010501 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
10502 curSta, tid)))
10503 {
10504 /* get prepare for sending message to HAL */
10505 //baCandidate[baCandidateCount].staIdx = curSta ;
10506 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
10507 newBaCandidate = WDA_ENABLE_BA ;
10508 }
10509 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
10510 }
10511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010512 /* fill the entry for all the sta with given TID's */
10513 if(WDA_ENABLE_BA == newBaCandidate)
10514 {
10515 /* move to next BA candidate */
10516 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
10517 size += sizeof(WDI_TriggerBAReqCandidateType) ;
10518 baCandidateCount++ ;
10519 newBaCandidate = WDA_DISABLE_BA ;
10520 }
10521 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 /* prepare and send message to hal */
10523 if( 0 < baCandidateCount)
10524 {
10525 WDI_Status status = WDI_STATUS_SUCCESS ;
10526 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
10527 tWDA_ReqParams *pWdaParams =
10528 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 if(NULL == pWdaParams)
10530 {
10531 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010532 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 VOS_ASSERT(0) ;
10534 return;
10535 }
10536 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
10537 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
10538 if(NULL == wdiTriggerBaReq)
10539 {
10540 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010541 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010542 VOS_ASSERT(0) ;
10543 vos_mem_free(pWdaParams);
10544 return;
10545 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010546 do
10547 {
10548 WDI_TriggerBAReqinfoType *triggerBaInfo =
10549 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
10550 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
10551 /* TEMP_FIX: Need to see if WDI need check for assoc session for
10552 * for each request */
10553 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
10554 triggerBaInfo->ucBASessionID = 0;
10555 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
10556 } while(0) ;
10557 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
10558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010560 pWdaParams->pWdaContext = pWDA;
10561 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
10562 pWdaParams->wdaMsgParam = NULL;
10563 status = WDI_TriggerBAReq(wdiTriggerBaReq,
10564 WDA_TriggerBaReqCallback, pWdaParams) ;
10565 if(IS_WDI_STATUS_FAILURE(status))
10566 {
10567 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10568 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
10569 vos_mem_free(pWdaParams->wdaMsgParam) ;
10570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10571 vos_mem_free(pWdaParams) ;
10572 }
10573 }
10574 else
10575 {
10576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
10577 "There is no TID for initiating BA");
10578 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010579 if( VOS_STATUS_SUCCESS !=
10580 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10581 {
10582 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10583 "BA Activity Timer Stop Failed ");
10584 return ;
10585 }
10586 if( VOS_STATUS_SUCCESS !=
10587 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
10588 {
10589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10590 "BA Activity Timer Start Failed ");
10591 return;
10592 }
10593 return ;
10594}
Jeff Johnson295189b2012-06-20 16:38:30 -070010595/*
10596 * WDA common routine to create timer used by WDA.
10597 */
10598static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
10599{
Jeff Johnson295189b2012-06-20 16:38:30 -070010600 VOS_STATUS status = VOS_STATUS_SUCCESS ;
10601 tANI_U32 val = 0 ;
10602 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10603
10604 if(NULL == pMac)
10605 {
10606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010607 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010608 VOS_ASSERT(0);
10609 return VOS_STATUS_E_FAILURE;
10610 }
10611 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
10612 != eSIR_SUCCESS)
10613 {
10614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10615 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
10616 return VOS_STATUS_E_FAILURE;
10617 }
10618 val = SYS_MS_TO_TICKS(val) ;
10619
10620 /* BA activity check timer */
10621 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
10622 "BA Activity Check timer", WDA_TimerHandler,
10623 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
10624 if(status != TX_SUCCESS)
10625 {
10626 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10627 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010628 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010629 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010630 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010631 /* Tx Complete Timeout timer */
10632 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
10633 "Tx Complete Check timer", WDA_TimerHandler,
10634 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010635 if(status != TX_SUCCESS)
10636 {
10637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10638 "Unable to create Tx Complete Timeout timer");
10639 /* Destroy timer of BA activity check timer */
10640 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10641 if(status != TX_SUCCESS)
10642 {
10643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10644 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010645 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010646 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010647 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010648 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080010649 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010650}
Jeff Johnson295189b2012-06-20 16:38:30 -070010651/*
10652 * WDA common routine to destroy timer used by WDA.
10653 */
10654static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
10655{
10656 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010657 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
10658 if(status != TX_SUCCESS)
10659 {
10660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10661 "Unable to Destroy Tx Complete Timeout timer");
10662 return eSIR_FAILURE ;
10663 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010664 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
10665 if(status != TX_SUCCESS)
10666 {
10667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10668 "Unable to Destroy BA activity timer");
10669 return eSIR_FAILURE ;
10670 }
10671
10672 return eSIR_SUCCESS ;
10673}
Jeff Johnson295189b2012-06-20 16:38:30 -070010674/*
10675 * WDA timer handler.
10676 */
10677void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
10678{
10679 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
10680 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010681 /*
10682 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
10683 */
10684 wdaMsg.type = timerInfo ;
10685 wdaMsg.bodyptr = NULL;
10686 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070010687 /* post the message.. */
10688 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
10689 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
10690 {
10691 vosStatus = VOS_STATUS_E_BADMSG;
10692 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010693}
Jeff Johnson295189b2012-06-20 16:38:30 -070010694/*
10695 * WDA Tx Complete timeout Indication.
10696 */
10697void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
10698{
10699 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010700 if( pWDA->pAckTxCbFunc )
10701 {
10702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10703 "TxComplete timer expired\n");
10704 pWDA->pAckTxCbFunc( pMac, 0);
10705 pWDA->pAckTxCbFunc = NULL;
10706 }
10707 else
10708 {
10709 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10710 "There is no request pending for TxComplete and wait timer expired\n");
10711 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010712}
Jeff Johnson295189b2012-06-20 16:38:30 -070010713/*
10714 * WDA Set REG Domain to VOS NV
10715 */
10716eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
10717{
10718 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
10719 {
10720 return eHAL_STATUS_INVALID_PARAMETER;
10721 }
10722 return eHAL_STATUS_SUCCESS;
10723}
10724#endif /* FEATURE_WLAN_INTEGRATED_SOC */
10725
Jeff Johnson295189b2012-06-20 16:38:30 -070010726#ifdef FEATURE_WLAN_SCAN_PNO
10727/*
10728 * FUNCTION: WDA_PNOScanReqCallback
10729 *
10730 */
10731void WDA_PNOScanReqCallback(WDI_Status status, void* pUserData)
10732{
10733 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010735 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010736 if(NULL == pWdaParams)
10737 {
10738 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010739 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010740 VOS_ASSERT(0) ;
10741 return ;
10742 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 if( pWdaParams != NULL )
10744 {
10745 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10746 {
10747 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010749 if( pWdaParams->wdaMsgParam != NULL)
10750 {
10751 vos_mem_free(pWdaParams->wdaMsgParam);
10752 }
10753
10754 vos_mem_free(pWdaParams) ;
10755 }
10756
10757 return ;
10758}
Jeff Johnson295189b2012-06-20 16:38:30 -070010759/*
10760 * FUNCTION: WDA_UpdateScanParamsCallback
10761 *
10762 */
10763void WDA_UpdateScanParamsCallback(WDI_Status status, void* pUserData)
10764{
10765 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010767 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010768 if(NULL == pWdaParams)
10769 {
10770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010771 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010772 VOS_ASSERT(0) ;
10773 return ;
10774 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010775 if( pWdaParams != NULL )
10776 {
10777 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10778 {
10779 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10780 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010781 if( pWdaParams->wdaMsgParam != NULL)
10782 {
10783 vos_mem_free(pWdaParams->wdaMsgParam);
10784 }
10785 vos_mem_free(pWdaParams) ;
10786 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010787 return ;
10788}
Jeff Johnson295189b2012-06-20 16:38:30 -070010789/*
10790 * FUNCTION: WDA_SetPowerParamsCallback
10791 *
10792 */
10793void WDA_SetPowerParamsCallback(WDI_Status status, void* pUserData)
10794{
Jeff Johnsone7245742012-09-05 17:12:55 -070010795 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010796
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010798 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010799 if(NULL == pWdaParams)
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010802 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010803 VOS_ASSERT(0) ;
10804 return ;
10805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010806 if( pWdaParams != NULL )
10807 {
10808 if( pWdaParams->wdaWdiApiMsgParam != NULL )
10809 {
10810 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10811 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010812 if( pWdaParams->wdaMsgParam != NULL)
10813 {
10814 vos_mem_free(pWdaParams->wdaMsgParam);
10815 }
10816 vos_mem_free(pWdaParams) ;
10817 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010818 return ;
10819}
Jeff Johnson295189b2012-06-20 16:38:30 -070010820/*
10821 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10822 * Request to WDI to set Preferred Network List.Offload
10823 */
10824VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
10825 tSirPNOScanReq *pPNOScanReqParams)
10826{
Jeff Johnson43971f52012-07-17 12:26:56 -070010827 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010828 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
10829 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
10830 tWDA_ReqParams *pWdaParams ;
10831 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834 if(NULL == pwdiPNOScanReqInfo)
10835 {
10836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010837 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010838 VOS_ASSERT(0);
10839 return VOS_STATUS_E_NOMEM;
10840 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010841 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10842 if(NULL == pWdaParams)
10843 {
10844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010845 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010846 VOS_ASSERT(0);
10847 vos_mem_free(pwdiPNOScanReqInfo);
10848 return VOS_STATUS_E_NOMEM;
10849 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010850 //
10851 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
10852 //
10853 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
10854 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070010855 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
10856 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
10857 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010858 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
10859 {
10860 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
10861 &pPNOScanReqParams->aNetworks[i],
10862 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
10863 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010864 /*Scan timer intervals*/
10865 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
10866 &pPNOScanReqParams->scanTimers,
10867 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070010868 /*Probe template for 2.4GHz band*/
10869 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
10870 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10871 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010872 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
10873 pPNOScanReqParams->p24GProbeTemplate,
10874 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010875 /*Probe template for 5GHz band*/
10876 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
10877 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
10878 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010879 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
10880 pPNOScanReqParams->p5GProbeTemplate,
10881 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070010882 pwdiPNOScanReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010883
Jeff Johnson295189b2012-06-20 16:38:30 -070010884 /* Store Params pass it to WDI */
10885 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
10886 pWdaParams->pWdaContext = pWDA;
10887 /* Store param pointer as passed in by caller */
10888 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010889 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
10890 (WDI_PNOScanCb)WDA_PNOScanReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010891 if(IS_WDI_STATUS_FAILURE(status))
10892 {
10893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10894 "Failure in Set PNO REQ WDI API, free all the memory " );
10895 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10896 vos_mem_free(pWdaParams->wdaMsgParam);
10897 pWdaParams->wdaWdiApiMsgParam = NULL;
10898 pWdaParams->wdaMsgParam = NULL;
10899 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010900 return CONVERT_WDI2VOS_STATUS(status) ;
10901}
Jeff Johnson295189b2012-06-20 16:38:30 -070010902/*
10903 * FUNCTION: WDA_RssiFilterCallback
10904 *
10905 */
10906void WDA_RssiFilterCallback(WDI_Status status, void* pUserData)
10907{
10908 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10909
10910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010911 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010912
10913 VOS_ASSERT(NULL != pWdaParams);
10914
10915 vos_mem_free(pWdaParams->wdaMsgParam) ;
10916 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10917 vos_mem_free(pWdaParams) ;
10918
10919 return ;
10920}
10921/*
10922 * FUNCTION: WDA_ProcessSetPreferredNetworkList
10923 * Request to WDI to set Preferred Network List.Offload
10924 */
10925VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
10926 tSirSetRSSIFilterReq* pRssiFilterParams)
10927{
Jeff Johnson43971f52012-07-17 12:26:56 -070010928 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010929 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
10930 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
10931 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010933 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010934 if(NULL == pwdiSetRssiFilterReqInfo)
10935 {
10936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010937 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010938 VOS_ASSERT(0);
10939 return VOS_STATUS_E_NOMEM;
10940 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010941 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10942 if(NULL == pWdaParams)
10943 {
10944 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010945 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010946 VOS_ASSERT(0);
10947 vos_mem_free(pwdiSetRssiFilterReqInfo);
10948 return VOS_STATUS_E_NOMEM;
10949 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010950 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
10951 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010952
Jeff Johnson295189b2012-06-20 16:38:30 -070010953 /* Store Params pass it to WDI */
10954 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
10955 pWdaParams->pWdaContext = pWDA;
10956 /* Store param pointer as passed in by caller */
10957 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010958 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
10959 (WDI_PNOScanCb)WDA_RssiFilterCallback,
10960 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010961 if(IS_WDI_STATUS_FAILURE(status))
10962 {
10963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10964 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
10965 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10966 vos_mem_free(pWdaParams->wdaMsgParam);
10967 pWdaParams->wdaWdiApiMsgParam = NULL;
10968 pWdaParams->wdaMsgParam = NULL;
10969 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010970 return CONVERT_WDI2VOS_STATUS(status) ;
10971}
10972
Jeff Johnson295189b2012-06-20 16:38:30 -070010973/*
10974 * FUNCTION: WDA_ProcessUpdateScanParams
10975 * Request to WDI to update Scan Parameters
10976 */
10977VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
10978 tSirUpdateScanParams *pUpdateScanParams)
10979{
Jeff Johnson43971f52012-07-17 12:26:56 -070010980 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010981 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
10982 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
10983 sizeof(WDI_UpdateScanParamsInfoType)) ;
10984 tWDA_ReqParams *pWdaParams ;
10985 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070010986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010987 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010988 if(NULL == wdiUpdateScanParamsInfoType)
10989 {
10990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010992 VOS_ASSERT(0);
10993 return VOS_STATUS_E_NOMEM;
10994 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010995 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10996 if ( NULL == pWdaParams )
10997 {
10998 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010999 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011000 VOS_ASSERT(0);
11001 vos_mem_free(wdiUpdateScanParamsInfoType);
11002 return VOS_STATUS_E_NOMEM;
11003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011004 //
11005 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
11006 //
Jeff Johnson295189b2012-06-20 16:38:30 -070011007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11008 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
11009 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
11010 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
11011 "sir struct %d wdi struct %d",
11012 pUpdateScanParams->b11dEnabled,
11013 pUpdateScanParams->b11dResolved,
11014 pUpdateScanParams->ucChannelCount,
11015 pUpdateScanParams->usPassiveMinChTime,
11016 pUpdateScanParams->usPassiveMaxChTime,
11017 pUpdateScanParams->usActiveMinChTime,
11018 pUpdateScanParams->usActiveMaxChTime,
11019 sizeof(tSirUpdateScanParams),
11020 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
11021
Jeff Johnson295189b2012-06-20 16:38:30 -070011022 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
11023 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070011024 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
11025 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070011026 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
11027 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070011028 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
11029 pUpdateScanParams->usActiveMaxChTime;
11030 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
11031 pUpdateScanParams->usActiveMinChTime;
11032 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
11033 pUpdateScanParams->usPassiveMaxChTime;
11034 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
11035 pUpdateScanParams->usPassiveMinChTime;
11036
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053011038 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
11039 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070011040
Jeff Johnson295189b2012-06-20 16:38:30 -070011041 for ( i = 0; i <
11042 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
11043 i++)
11044 {
11045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11046 "Update Scan Parameters channel: %d",
11047 pUpdateScanParams->aChannels[i]);
11048
11049 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
11050 pUpdateScanParams->aChannels[i];
11051 }
11052
Jeff Johnson295189b2012-06-20 16:38:30 -070011053 wdiUpdateScanParamsInfoType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011054
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 /* Store Params pass it to WDI */
11056 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
11057 pWdaParams->pWdaContext = pWDA;
11058 /* Store param pointer as passed in by caller */
11059 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070011060
Jeff Johnson295189b2012-06-20 16:38:30 -070011061
11062
11063 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
11064 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsCallback,
11065 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011066 if(IS_WDI_STATUS_FAILURE(status))
11067 {
11068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11069 "Failure in Update Scan Params EQ WDI API, free all the memory " );
11070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11071 vos_mem_free(pWdaParams->wdaMsgParam);
11072 vos_mem_free(pWdaParams);
11073 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011074 return CONVERT_WDI2VOS_STATUS(status) ;
11075}
11076#endif // FEATURE_WLAN_SCAN_PNO
Jeff Johnson295189b2012-06-20 16:38:30 -070011077#ifdef WLAN_FEATURE_PACKET_FILTERING
11078/*
11079 * FUNCTION: WDA_8023MulticastListReqCallback
11080 *
11081 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011082void WDA_8023MulticastListReqCallback(
11083 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
11084 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011085{
11086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011088 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011089 if(NULL == pWdaParams)
11090 {
11091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011093 VOS_ASSERT(0) ;
11094 return ;
11095 }
11096
11097 vos_mem_free(pWdaParams->wdaMsgParam) ;
11098 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11099 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011100 //print a msg, nothing else to do
11101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11102 "WDA_8023MulticastListReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011103 return ;
11104}
Jeff Johnson295189b2012-06-20 16:38:30 -070011105/*
11106 * FUNCTION: WDA_Process8023MulticastListReq
11107 * Request to WDI to add 8023 Multicast List
11108 */
11109VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
11110 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
11111{
Jeff Johnson43971f52012-07-17 12:26:56 -070011112 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011113 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
11114 tWDA_ReqParams *pWdaParams ;
11115 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011116 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011117 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011118 pwdiFltPktSetMcListReqParamsType =
11119 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
11120 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
11121 ) ;
11122 if(NULL == pwdiFltPktSetMcListReqParamsType)
11123 {
11124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011126 return VOS_STATUS_E_NOMEM;
11127 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011128 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11129 if(NULL == pWdaParams)
11130 {
11131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011132 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011133 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
11134 return VOS_STATUS_E_NOMEM;
11135 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011136
Jeff Johnson295189b2012-06-20 16:38:30 -070011137 //
11138 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
11139 //
11140 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070011141 pRcvFltMcAddrList->ulMulticastAddrCnt;
11142
11143 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
11144 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
11145 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
11146 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
11147
Jeff Johnson295189b2012-06-20 16:38:30 -070011148 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
11149 {
11150 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
11151 &(pRcvFltMcAddrList->multicastAddr[i]),
11152 sizeof(tSirMacAddr));
11153 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011154 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011155
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 /* Store Params pass it to WDI */
11157 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
11158 pWdaParams->pWdaContext = pWDA;
11159 /* Store param pointer as passed in by caller */
11160 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070011161 status = WDI_8023MulticastListReq(
11162 pwdiFltPktSetMcListReqParamsType,
11163 (WDI_8023MulticastListCb)WDA_8023MulticastListReqCallback,
11164 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011165 if(IS_WDI_STATUS_FAILURE(status))
11166 {
11167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11168 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
11169 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11170 vos_mem_free(pWdaParams->wdaMsgParam);
11171 vos_mem_free(pWdaParams);
11172 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 return CONVERT_WDI2VOS_STATUS(status) ;
11174}
Jeff Johnson295189b2012-06-20 16:38:30 -070011175/*
11176 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11177 *
11178 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011179void WDA_ReceiveFilterSetFilterReqCallback(
11180 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
11181 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011182{
11183 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011185 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011186 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 if(NULL == pWdaParams)
11188 {
11189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011190 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011191 VOS_ASSERT(0) ;
11192 return ;
11193 }
11194
11195 vos_mem_free(pWdaParams->wdaMsgParam) ;
11196 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11197 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011198 //print a msg, nothing else to do
11199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11200 "WDA_ReceiveFilterSetFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011201 return ;
11202}
Jeff Johnson295189b2012-06-20 16:38:30 -070011203/*
11204 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
11205 * Request to WDI to set Receive Filters
11206 */
11207VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
11208 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
11209{
Jeff Johnson43971f52012-07-17 12:26:56 -070011210 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011211 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
11212 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
11213 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
11214 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
11215 tWDA_ReqParams *pWdaParams ;
11216 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070011217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011218 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011219 if(NULL == pwdiSetRcvPktFilterReqParamsType)
11220 {
11221 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011222 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011223 VOS_ASSERT(0);
11224 return VOS_STATUS_E_NOMEM;
11225 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011226 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11227 if(NULL == pWdaParams)
11228 {
11229 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011230 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011231 VOS_ASSERT(0);
11232 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
11233 return VOS_STATUS_E_NOMEM;
11234 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
11236 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
11237 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
11238 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070011239 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
11240 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
11241
11242 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
11243 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011244
11245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11246 "FID %d FT %d NParams %d CT %d",
11247 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
11248 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
11249 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
11250 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070011251 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
11252 {
11253 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
11254 &pRcvPktFilterCfg->paramsData[i],
11255 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070011256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11257 "Proto %d Comp Flag %d \n",
11258 pwdiSetRcvPktFilterReqParamsType->
11259 wdiPktFilterCfg.paramsData[i].protocolLayer,
11260 pwdiSetRcvPktFilterReqParamsType->
11261 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070011262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11263 "Data Offset %d Data Len %d\n",
11264 pwdiSetRcvPktFilterReqParamsType->
11265 wdiPktFilterCfg.paramsData[i].dataOffset,
11266 pwdiSetRcvPktFilterReqParamsType->
11267 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070011268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11269 "CData: %d:%d:%d:%d:%d:%d\n",
11270 pwdiSetRcvPktFilterReqParamsType->
11271 wdiPktFilterCfg.paramsData[i].compareData[0],
11272 pwdiSetRcvPktFilterReqParamsType->
11273 wdiPktFilterCfg.paramsData[i].compareData[1],
11274 pwdiSetRcvPktFilterReqParamsType->
11275 wdiPktFilterCfg.paramsData[i].compareData[2],
11276 pwdiSetRcvPktFilterReqParamsType->
11277 wdiPktFilterCfg.paramsData[i].compareData[3],
11278 pwdiSetRcvPktFilterReqParamsType->
11279 wdiPktFilterCfg.paramsData[i].compareData[4],
11280 pwdiSetRcvPktFilterReqParamsType->
11281 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11283 "MData: %d:%d:%d:%d:%d:%d\n",
11284 pwdiSetRcvPktFilterReqParamsType->
11285 wdiPktFilterCfg.paramsData[i].dataMask[0],
11286 pwdiSetRcvPktFilterReqParamsType->
11287 wdiPktFilterCfg.paramsData[i].dataMask[1],
11288 pwdiSetRcvPktFilterReqParamsType->
11289 wdiPktFilterCfg.paramsData[i].dataMask[2],
11290 pwdiSetRcvPktFilterReqParamsType->
11291 wdiPktFilterCfg.paramsData[i].dataMask[3],
11292 pwdiSetRcvPktFilterReqParamsType->
11293 wdiPktFilterCfg.paramsData[i].dataMask[4],
11294 pwdiSetRcvPktFilterReqParamsType->
11295 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070011296 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011297 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011298 /* Store Params pass it to WDI */
11299 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
11300 pWdaParams->pWdaContext = pWDA;
11301 /* Store param pointer as passed in by caller */
11302 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070011303 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
11304 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterReqCallback,
11305 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011306 if(IS_WDI_STATUS_FAILURE(status))
11307 {
11308 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11309 "Failure in SetFilter(),free all the memory,status %d ",status);
11310 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11311 vos_mem_free(pWdaParams->wdaMsgParam);
11312 vos_mem_free(pWdaParams);
11313 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011314 return CONVERT_WDI2VOS_STATUS(status) ;
11315}
Jeff Johnson295189b2012-06-20 16:38:30 -070011316/*
11317 * FUNCTION: WDA_FilterMatchCountReqCallback
11318 *
11319 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011320void WDA_FilterMatchCountReqCallback(
11321 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
11322 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011323{
11324 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11325 tWDA_CbContext *pWDA;
11326 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
11327 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
11328 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
11329 tANI_U8 i;
11330 vos_msg_t vosMsg;
11331
11332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011333 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011334 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
11335
Jeff Johnsone7245742012-09-05 17:12:55 -070011336 if(NULL == pRcvFltPktMatchCntRsp)
11337 {
11338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011339 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070011340 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011341 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070011342 return ;
11343 }
11344
Jeff Johnson295189b2012-06-20 16:38:30 -070011345 if(NULL == pWdaParams)
11346 {
11347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011348 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011349 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011350 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070011351 return ;
11352 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011353 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
11354 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011355 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
11356 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
11357
11358 /* Message Header */
11359 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11360 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
11361
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011362 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011363
11364 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
11365 {
11366 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
11367 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
11368 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011369 /* VOS message wrapper */
11370 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
11371 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
11372 vosMsg.bodyval = 0;
11373 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
11374 {
11375 /* free the mem and return */
11376 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
11377 }
11378
11379 vos_mem_free(pWdaParams->wdaMsgParam) ;
11380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11381 vos_mem_free(pWdaParams) ;
11382}
Jeff Johnson295189b2012-06-20 16:38:30 -070011383/*
11384 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
11385 * Request to WDI to get PC Filter Match Count
11386 */
11387VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
11388{
Jeff Johnson43971f52012-07-17 12:26:56 -070011389 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011390 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
11391 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
11392 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011393 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011394 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011395 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
11396 {
11397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011398 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011399 VOS_ASSERT(0);
11400 return VOS_STATUS_E_NOMEM;
11401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011402 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11403 if(NULL == pWdaParams)
11404 {
11405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011406 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011407 VOS_ASSERT(0);
11408 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
11409 return VOS_STATUS_E_NOMEM;
11410 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011411
Jeff Johnson295189b2012-06-20 16:38:30 -070011412 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = NULL;
11413
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011414 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
11415 pRcvFltPktMatchRsp->bssId,
11416 sizeof(wpt_macAddr));
11417
Jeff Johnson295189b2012-06-20 16:38:30 -070011418 /* Store Params pass it to WDI */
11419 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
11420 pWdaParams->pWdaContext = pWDA;
11421 /* Store param pointer as passed in by caller */
11422 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070011423 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
11424 (WDI_FilterMatchCountCb)WDA_FilterMatchCountReqCallback,
11425 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011426 if(IS_WDI_STATUS_FAILURE(status))
11427 {
11428 /* failure returned by WDI API */
11429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11430 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
11431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11432 vos_mem_free(pWdaParams) ;
11433 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
11434 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
11435 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011436 return CONVERT_WDI2VOS_STATUS(status) ;
11437}
Jeff Johnson295189b2012-06-20 16:38:30 -070011438/*
11439 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
11440 *
11441 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011442void WDA_ReceiveFilterClearFilterReqCallback(
11443 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
11444 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011445{
11446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011448 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011449/* WDA_VOS_ASSERT(NULL != pWdaParams); */
11450 if(NULL == pWdaParams)
11451 {
11452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011453 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011454 VOS_ASSERT(0) ;
11455 return ;
11456 }
11457
11458 vos_mem_free(pWdaParams->wdaMsgParam) ;
11459 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11460 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011461 //print a msg, nothing else to do
11462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11463 "WDA_ReceiveFilterClearFilterReqCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070011464 return ;
11465}
Jeff Johnson295189b2012-06-20 16:38:30 -070011466/*
11467 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
11468 * Request to WDI to clear Receive Filters
11469 */
11470VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
11471 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
11472{
Jeff Johnson43971f52012-07-17 12:26:56 -070011473 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011474 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
11475 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
11476 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011478 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011479 if(NULL == pwdiRcvFltPktClearReqParamsType)
11480 {
11481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011482 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011483 VOS_ASSERT(0);
11484 return VOS_STATUS_E_NOMEM;
11485 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011486 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11487 if(NULL == pWdaParams)
11488 {
11489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011490 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011491 VOS_ASSERT(0);
11492 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
11493 return VOS_STATUS_E_NOMEM;
11494 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011495 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
11496 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070011497 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
11498 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
11499 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
11500 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070011501
11502 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011503 /* Store Params pass it to WDI */
11504 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
11505 pWdaParams->pWdaContext = pWDA;
11506 /* Store param pointer as passed in by caller */
11507 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011508 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
11509 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterReqCallback,
11510 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011511 if(IS_WDI_STATUS_FAILURE(status))
11512 {
11513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11514 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
11515 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11516 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011517 return CONVERT_WDI2VOS_STATUS(status) ;
11518}
11519#endif // WLAN_FEATURE_PACKET_FILTERING
11520
Jeff Johnson295189b2012-06-20 16:38:30 -070011521/*
11522 * FUNCTION: WDA_ProcessSetPowerParamsReq
11523 * Request to WDI to set power params
11524 */
11525VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
11526 tSirSetPowerParamsReq *pPowerParams)
11527{
Jeff Johnson43971f52012-07-17 12:26:56 -070011528 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011529 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
11530 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011531 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011533 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011534 if(NULL == pwdiSetPowerParamsReqInfo)
11535 {
11536 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011537 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011538 VOS_ASSERT(0);
11539 return VOS_STATUS_E_NOMEM;
11540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011541 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11542 if(NULL == pWdaParams)
11543 {
11544 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011545 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011546 VOS_ASSERT(0);
11547 vos_mem_free(pwdiSetPowerParamsReqInfo);
11548 return VOS_STATUS_E_NOMEM;
11549 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011550
Jeff Johnson295189b2012-06-20 16:38:30 -070011551
11552 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
11553 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070011554 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
11555 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070011556 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
11557 pPowerParams->uListenInterval;
11558 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
11559 pPowerParams->uBcastMcastFilter;
11560 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
11561 pPowerParams->uEnableBET;
11562 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
11563 pPowerParams->uBETInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -070011564 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011565
Jeff Johnson295189b2012-06-20 16:38:30 -070011566 /* Store Params pass it to WDI */
11567 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
11568 pWdaParams->pWdaContext = pWDA;
11569 /* Store param pointer as passed in by caller */
11570 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011571 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
11572 (WDI_SetPowerParamsCb)WDA_SetPowerParamsCallback,
11573 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011574 if(IS_WDI_STATUS_FAILURE(status))
11575 {
11576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11577 "Failure in Set power params REQ WDI API, free all the memory " );
11578 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11579 vos_mem_free(pWdaParams->wdaMsgParam);
11580 pWdaParams->wdaWdiApiMsgParam = NULL;
11581 pWdaParams->wdaMsgParam = NULL;
11582 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011583 return CONVERT_WDI2VOS_STATUS(status) ;
11584}
11585
11586/*
11587 * FUNCTION: WDA_SetTmLevelRspCallback
11588 * Set TM Level response
11589 */
11590void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
11591{
11592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11593
11594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011595 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011596
11597 if(NULL == pWdaParams)
11598 {
11599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011600 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011601 VOS_ASSERT(0) ;
11602 return ;
11603 }
11604
11605 /* Dose not need to send notification to upper layer
11606 * Just free allocated resources */
11607 if( pWdaParams != NULL )
11608 {
11609 if( pWdaParams->wdaWdiApiMsgParam != NULL )
11610 {
11611 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11612 }
11613 vos_mem_free(pWdaParams->wdaMsgParam) ;
11614 vos_mem_free(pWdaParams) ;
11615 }
11616}
11617
11618/*
11619 * FUNCTION: WDA_ProcessSetTmLevelReq
11620 * Set TM Level request
11621 */
11622VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
11623 tAniSetTmLevelReq *setTmLevelReq)
11624{
11625 WDI_Status status = WDI_STATUS_SUCCESS ;
11626 tWDA_ReqParams *pWdaParams ;
11627 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
11628 (WDI_SetTmLevelReqType *)vos_mem_malloc(
11629 sizeof(WDI_SetTmLevelReqType)) ;
11630 if(NULL == wdiSetTmLevelReq)
11631 {
11632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011633 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011634 VOS_ASSERT(0);
11635 return VOS_STATUS_E_NOMEM;
11636 }
11637
11638 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11639 if(NULL == pWdaParams)
11640 {
11641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011642 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011643 VOS_ASSERT(0);
11644 vos_mem_free(wdiSetTmLevelReq);
11645 return VOS_STATUS_E_NOMEM;
11646 }
11647
11648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011649 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011650
11651 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
11652 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
11653
11654 pWdaParams->pWdaContext = pWDA;
11655 pWdaParams->wdaMsgParam = setTmLevelReq;
11656 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
11657
11658 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
11659 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
11660
11661 if(IS_WDI_STATUS_FAILURE(status))
11662 {
11663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11664 "Failure set thernal mitigation level free all the memory " );
11665 vos_mem_free(pWdaParams->wdaMsgParam) ;
11666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11667 vos_mem_free(pWdaParams) ;
11668 }
11669
11670 return CONVERT_WDI2VOS_STATUS(status) ;
11671}
11672
11673VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
11674 tpTxControlParams pTxCtrlParam)
11675{
11676 VOS_STATUS wdaStatus;
11677
11678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011679 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011680 if( pTxCtrlParam == NULL )
11681 {
11682 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011683 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011684 return VOS_STATUS_E_FAILURE;
11685 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011686 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
11687 {
11688 wdaStatus = WDA_SuspendDataTx(pWDA);
11689 }
11690 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
11691 {
11692 wdaStatus = WDA_ResumeDataTx(pWDA);
11693 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011694 return wdaStatus;
11695}
11696
11697 /* FUNCTION WDA_featureCapsExchange
11698 * WDA API to invoke capability exchange between host and FW.
11699 */
11700void WDA_featureCapsExchange(v_PVOID_t pVosContext)
11701{
11702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011703 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011704 WDI_featureCapsExchangeReq( NULL, pVosContext);
11705}
11706
11707 /* FUNCTION WDA_getHostWlanFeatCaps
11708 * Wrapper for WDI API, that will return if the feature (enum value).passed
11709 * to this API is supported or not in Host
11710 * return value
11711 * 0 - implies feature is NOT Supported
11712 * any non zero value - implies feature is SUPPORTED
11713 */
11714tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
11715{
11716 return WDI_getHostWlanFeatCaps(featEnumValue);
11717}
11718
11719 /* FUNCTION WDA_getFwWlanFeatCaps
11720 * Wrapper for WDI API, that will return if the feature (enum value).passed
11721 * to this API is supported or not in FW
11722 * return value
11723 * 0 - implies feature is NOT Supported
11724 * any non zero value - implies feature is SUPPORTED
11725 */
11726tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
11727{
11728 return WDI_getFwWlanFeatCaps(featEnumValue);
11729}
11730
11731/*
11732 * FUNCTION: WDA_shutdown
11733 * Shutdown WDA/WDI without handshaking with Riva.
11734 * Synchronous function.
11735 */
11736VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
11737{
11738 WDI_Status wdiStatus;
11739 //tANI_U8 eventIdx = 0;
11740 VOS_STATUS status = VOS_STATUS_SUCCESS;
11741 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011742 if (NULL == pWDA)
11743 {
11744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011745 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070011746 VOS_ASSERT(0);
11747 return VOS_STATUS_E_FAILURE;
11748 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011749 /* FTM mode stay START_STATE */
11750 if( (WDA_READY_STATE != pWDA->wdaState) &&
11751 (WDA_INIT_STATE != pWDA->wdaState) &&
11752 (WDA_START_STATE != pWDA->wdaState) )
11753 {
11754 VOS_ASSERT(0);
11755 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011756
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011757 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
11758 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070011759 {
11760 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080011761 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011762 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070011763
Jeff Johnson295189b2012-06-20 16:38:30 -070011764 /* call WDI shutdown */
11765 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070011766 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
11767 {
11768 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11769 "error in WDA Stop" );
11770 status = VOS_STATUS_E_FAILURE;
11771 }
11772 /* WDI stop is synchrnous, shutdown is complete when it returns */
11773 pWDA->wdaState = WDA_STOP_STATE;
11774
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 /* shutdown should perform the stop & close actions. */
11776 /* Destroy the event */
11777 status = vos_event_destroy(&pWDA->txFrameEvent);
11778 if(!VOS_IS_STATUS_SUCCESS(status))
11779 {
11780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11781 "VOS Event destroy failed - status = %d\n", status);
11782 status = VOS_STATUS_E_FAILURE;
11783 }
11784 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
11785 if(!VOS_IS_STATUS_SUCCESS(status))
11786 {
11787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11788 "VOS Event destroy failed - status = %d\n", status);
11789 status = VOS_STATUS_E_FAILURE;
11790 }
11791 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
11792 if(!VOS_IS_STATUS_SUCCESS(status))
11793 {
11794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11795 "VOS Event destroy failed - status = %d\n", status);
11796 status = VOS_STATUS_E_FAILURE;
11797 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011798 /* free WDA context */
11799 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
11800 if ( !VOS_IS_STATUS_SUCCESS(status) )
11801 {
11802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11803 "error in WDA close " );
11804 status = VOS_STATUS_E_FAILURE;
11805 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011806 return status;
11807}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011808
Jeff Johnsone7245742012-09-05 17:12:55 -070011809/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011810 * FUNCTION: WDA_setNeedShutdown
11811 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070011812 */
11813
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080011814void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070011815{
11816 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011817 if(pWDA == NULL)
11818 {
11819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11820 "Could not get the WDA Context pointer" );
11821 return;
11822 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011823 pWDA->needShutdown = TRUE;
11824}
11825/*
11826 * FUNCTION: WDA_needShutdown
11827 * WDA needs a shutdown
11828 */
11829
11830v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
11831{
11832 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070011833 if(pWDA == NULL)
11834 {
11835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11836 "Could not get the WDA Context pointer" );
11837 return 0;
11838 }
11839 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070011840}
11841
Mohit Khanna4a70d262012-09-11 16:30:12 -070011842#ifdef WLAN_FEATURE_11AC
11843/*
11844 * FUNCTION: WDA_SetBeaconFilterReqCallback
11845 *
11846 */
11847void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
11848{
11849 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011851 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011852 if(NULL == pWdaParams)
11853 {
11854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011855 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011856 VOS_ASSERT(0) ;
11857 return ;
11858 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011859
Mohit Khanna4a70d262012-09-11 16:30:12 -070011860 vos_mem_free(pWdaParams->wdaMsgParam) ;
11861 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11862 vos_mem_free(pWdaParams) ;
11863 /*
11864 * No respone required for SetBeaconFilter req so just free the request
11865 * param here
11866 */
11867
11868 return ;
11869}
11870
11871VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
11872 tUpdateVHTOpMode *pData)
11873{
11874 WDI_Status status = WDI_STATUS_SUCCESS ;
11875 tWDA_ReqParams *pWdaParams ;
11876 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
11877 sizeof(WDI_UpdateVHTOpMode)) ;
11878 if(NULL == wdiTemp)
11879 {
11880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011881 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011882 VOS_ASSERT(0);
11883 return VOS_STATUS_E_NOMEM;
11884 }
11885 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11886 if(NULL == pWdaParams)
11887 {
11888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011889 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070011890 VOS_ASSERT(0);
11891 vos_mem_free(wdiTemp);
11892 return VOS_STATUS_E_NOMEM;
11893 }
11894
11895 wdiTemp->opMode = pData->opMode;
11896 wdiTemp->staId = pData->staId;
11897
11898 pWdaParams->pWdaContext = pWDA;
11899 /* Store Req pointer, as this will be used for response */
11900 pWdaParams->wdaMsgParam = (void *)pData;
11901 /* store Params pass it to WDI */
11902 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
11903
11904 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
11905
11906 if(IS_WDI_STATUS_FAILURE(status))
11907 {
11908 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11909 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
11910 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
11911 vos_mem_free(pWdaParams->wdaMsgParam);
11912 vos_mem_free(pWdaParams);
11913 }
11914 return CONVERT_WDI2VOS_STATUS(status) ;
11915}
11916#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011917
11918/*==========================================================================
11919 FUNCTION WDA_TransportChannelDebug
11920
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070011921 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011922 Display Transport Channel debugging information
11923 User may request to display DXE channel snapshot
11924 Or if host driver detects any abnormal stcuk may display
11925
11926 PARAMETERS
11927 displaySnapshot : Dispaly DXE snapshot option
11928 enableStallDetect : Enable stall detect feature
11929 This feature will take effect to data performance
11930 Not integrate till fully verification
11931
11932 RETURN VALUE
11933 NONE
11934
11935===========================================================================*/
11936void WDA_TransportChannelDebug
11937(
11938 v_BOOL_t displaySnapshot,
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011939 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011940)
11941{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070011942 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070011943 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070011944}