blob: 367bf17f9b242843d05b23c593ca7215153eb3bc [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
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/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070043 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070044 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070045 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070046 The functions externalized by this module are to be called ONLY by other
47 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070048 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070049 Are listed for each API below.
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 Copyright (c) 2010-2011 QUALCOMM Incorporated.
52 All Rights Reserved.
53 Qualcomm Confidential and Proprietary
54===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070055/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070056 EDIT HISTORY FOR FILE
57
Jeff Johnson295189b2012-06-20 16:38:30 -070058 This section contains comments describing changes made to the module.
59 Notice that changes are listed in reverse chronological order.
60
Jeff Johnson295189b2012-06-20 16:38:30 -070061 $Header$$DateTime$$Author$
62
Jeff Johnson295189b2012-06-20 16:38:30 -070063 when who what, where, why
64---------- --- -------------------------------------------------
6510/05/2011 haparna Adding support for Keep Alive Feature
662010-12-30 smiryala UMAC convergence changes
672010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
68===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070069#include "vos_mq.h"
70#include "vos_api.h"
71#include "vos_packet.h"
72#include "vos_nvitem.h"
73#include "sirApi.h"
74#include "wlan_qct_pal_packet.h"
75#include "wlan_qct_wda.h"
76#include "wlan_qct_wda_msg.h"
77#include "wlan_qct_wdi_cfg.h"
78#include "wlan_qct_wdi.h"
79#include "wlan_qct_wdi_ds.h"
80#include "wlan_hal_cfg.h"
81/**********************/
82#include "wniApi.h"
83#include "cfgApi.h"
84#include "limApi.h"
85#include "wlan_qct_tl.h"
86#include "wlan_qct_tli_ba.h"
87#include "limUtils.h"
88#include "btcApi.h"
89#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070090#include "pttMsgApi.h"
91#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070092/* Used MACRO's */
93/* Get WDA context from vOSS module */
94#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
95#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
96#define OFFSET_OF(structType,fldName) (&((structType*)0)->fldName)
97#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define CONVERT_WDI2SIR_STATUS(x) \
99 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
100
101#define IS_WDI_STATUS_FAILURE(status) \
102 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -0700103#define CONVERT_WDI2VOS_STATUS(x) \
104 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
105
106/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -0700107#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -0700109#define WDA_GET_BA_TXFLAG(a, b, c) \
110 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
111
112#define WDA_SET_BA_TXFLAG(a, b, c) \
113 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
114
115#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
116 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
118 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119/* timer related Macros */
120#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
121 tx_timer_create(a, b, c, d, e, f, g)
122#define WDA_START_TIMER(a) tx_timer_activate(a)
123#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
124#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700125#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700126
127#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
128 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700131#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700132#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800133#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700134
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700135#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700136
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700137#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700138#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
139 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
140 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
141
142#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
143#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800144#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
145
Jeff Johnson295189b2012-06-20 16:38:30 -0700146/* extern declarations */
147extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700148extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
149
Jeff Johnson295189b2012-06-20 16:38:30 -0700150/* forward declarations */
151void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
152 void *pBodyptr, tANI_U32 bodyVal) ;
153VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
154 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700155VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
156VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
157
158extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
159 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
160void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
161 tANI_U32 *pConfig) ;
162void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
163 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
164void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
165 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
166void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
167 void* pUserData ) ;
168static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
169static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
170void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800171void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700172void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700173#ifdef WLAN_FEATURE_VOWIFI_11R
174VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
175#endif /* WLAN_FEATURE_VOWIFI_11R */
176
Jeff Johnson295189b2012-06-20 16:38:30 -0700177void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
178void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
179VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef FEATURE_WLAN_SCAN_PNO
181static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
182static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
183static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
184#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700185#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700186VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700187void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
188void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
189void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
190#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700191#ifdef WLAN_FEATURE_PACKET_FILTERING
192static VOS_STATUS WDA_Process8023MulticastListReq (
193 tWDA_CbContext *pWDA,
194 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
195 );
196static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
197 tWDA_CbContext *pWDA,
198 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
199 );
200static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
201 tWDA_CbContext *pWDA,
202 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
203 );
204static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
205 tWDA_CbContext *pWDA,
206 tSirRcvFltPktClearParam *pRcvFltPktClearParam
207 );
208#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700209VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700210static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
211 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700212VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
213 v_U8_t *pDefaultKeyId,
214 v_U8_t *pNumKeys,
215 WDI_KeysType *pWdiKeys );
216
217#ifdef WLAN_FEATURE_GTK_OFFLOAD
218static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
219static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
220#endif // WLAN_FEATURE_GTK_OFFLOAD
221
222VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
223 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700224#ifdef WLAN_FEATURE_11AC
225VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
226 tUpdateVHTOpMode *pData);
227#endif
Leo Chang9056f462013-08-01 19:21:11 -0700228
229#ifdef FEATURE_WLAN_LPHB
230VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
231 tSirLPHBReq *pData);
232#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700233/*
234 * FUNCTION: WDA_open
235 * Allocate the WDA context
236 */
237VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t pOSContext,
238 tMacOpenParameters *pMacParams )
239{
240 tWDA_CbContext *wdaContext;
241 VOS_STATUS status;
242 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700243 /* Allocate WDA context */
244 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
245 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
246 if(!VOS_IS_STATUS_SUCCESS(status))
247 {
248 return VOS_STATUS_E_NOMEM;
249 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700250 /*__asm int 3;*/
251 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
252
253 /* Initialize data structures */
254 wdaContext->pVosContext = pVosContext;
255 wdaContext->wdaState = WDA_INIT_STATE;
256 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
257
258 /* Initialize WDA-WDI synchronization event */
259 status = vos_event_init(&wdaContext->wdaWdiEvent);
260 if(!VOS_IS_STATUS_SUCCESS(status))
261 {
262 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800263 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800264 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700265 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700266 /* Init Frame transfer event */
267 status = vos_event_init(&wdaContext->txFrameEvent);
268 if(!VOS_IS_STATUS_SUCCESS(status))
269 {
270 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800271 "VOS Mgmt Frame Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800272 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700274 status = vos_event_init(&wdaContext->suspendDataTxEvent);
275 if(!VOS_IS_STATUS_SUCCESS(status))
276 {
277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800278 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800279 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
282 if(!VOS_IS_STATUS_SUCCESS(status))
283 {
284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800285 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800286 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700287 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700289 wdaContext->driverMode = pMacParams->driverType;
290 if(WDI_STATUS_SUCCESS != WDI_Init(pOSContext, &wdaContext->pWdiContext,
291 &wdiDevCapability, pMacParams->driverType))
292 {
293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
294 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800295 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700296 }
297 else
298 {
299 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
300 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
301 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700302 /* update max STA in WDA used for BA */
303 wdaContext->wdaMaxSta = pMacParams->maxStation;
304 /* store the frameTransRequired flag in wdaContext, to send this to HAL
305 * in WDA_Start
306 */
307 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
308 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700309 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800310
311error:
312 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
313 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700314}
315
Jeff Johnson295189b2012-06-20 16:38:30 -0700316/*
317 * FUNCTION: WDA_preStart
318 * Trigger DAL-AL to start CFG download
319 */
320VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
321{
322 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
323 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700324 /*
325 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
326 */
327 wdaMsg.type = WNI_CFG_DNLD_REQ ;
328 wdaMsg.bodyptr = NULL;
329 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700330 /* post the message.. */
331 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
332 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
333 {
334 vosStatus = VOS_STATUS_E_BADMSG;
335 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700336 return( vosStatus );
337}
Jeff Johnson295189b2012-06-20 16:38:30 -0700338/*
339 * FUNCTION: WDA_wdiStartCallback
340 * Once WDI_Start is finished, WDI start callback will be called by WDI
341 * to indicate completion of WDI_Start.
342 */
343void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
344 void *pVosContext)
345{
346 tWDA_CbContext *wdaContext;
347 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700348 if (NULL == pVosContext)
349 {
350 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700351 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700352 return;
353 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700354 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
355 if (NULL == wdaContext)
356 {
357 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700358 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700359 return;
360 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700361 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
362 {
363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700364 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700365 }
366 else
367 {
368 wdaContext->wdaState = WDA_START_STATE;
369 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700370 /* extract and save version information from the Start Response */
371 wdaContext->wcnssWlanCompiledVersion.major =
372 wdiRspParams->wlanCompiledVersion.major;
373 wdaContext->wcnssWlanCompiledVersion.minor =
374 wdiRspParams->wlanCompiledVersion.minor;
375 wdaContext->wcnssWlanCompiledVersion.version =
376 wdiRspParams->wlanCompiledVersion.version;
377 wdaContext->wcnssWlanCompiledVersion.revision =
378 wdiRspParams->wlanCompiledVersion.revision;
379 wdaContext->wcnssWlanReportedVersion.major =
380 wdiRspParams->wlanReportedVersion.major;
381 wdaContext->wcnssWlanReportedVersion.minor =
382 wdiRspParams->wlanReportedVersion.minor;
383 wdaContext->wcnssWlanReportedVersion.version =
384 wdiRspParams->wlanReportedVersion.version;
385 wdaContext->wcnssWlanReportedVersion.revision =
386 wdiRspParams->wlanReportedVersion.revision;
387 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
388 wdiRspParams->wcnssSoftwareVersion,
389 sizeof(wdaContext->wcnssSoftwareVersionString));
390 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
391 wdiRspParams->wcnssHardwareVersion,
392 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700393 /* Notify WDA_start that WDI_Start has completed */
394 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700395 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 {
397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700398 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700399 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700400 return;
401}
402
Jeff Johnson295189b2012-06-20 16:38:30 -0700403/*
404 * FUNCTION: WDA_start
405 * Prepare TLV configuration and call WDI_Start.
406 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700407VOS_STATUS WDA_start(v_PVOID_t pVosContext)
408{
409 tWDA_CbContext *wdaContext;
410 VOS_STATUS status;
411 WDI_Status wdiStatus;
412 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700413 if (NULL == pVosContext)
414 {
415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700416 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700417 return VOS_STATUS_E_FAILURE;
418 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700419 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
420 if (NULL == wdaContext)
421 {
422 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700423 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700424 return VOS_STATUS_E_FAILURE;
425 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 /* Non-FTM mode, WDA status for START must be INIT
427 * FTM mode, WDA Status for START can be INIT or STOP */
428 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
429 (WDA_STOP_STATE != wdaContext->wdaState) )
430 {
431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
432 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700433 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700434 return VOS_STATUS_E_FAILURE;
435 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700436 /* initialize the wdiStartParam. Note that we can create this on
437 the stack since we won't exit until WDI_Start() completes or
438 times out */
439 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* prepare the config TLV for the WDI */
442 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
443 if ( !VOS_IS_STATUS_SUCCESS(status) )
444 {
445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700446 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700447 return VOS_STATUS_E_FAILURE;
448 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700449 /* note from here onwards if an error occurs we must
450 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700451 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
452 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
453 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700454 /* initialize the WDA-WDI synchronization event */
455 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 /* call WDI start */
457 wdiStatus = WDI_Start(&wdiStartParam,
458 (WDI_StartRspCb)WDA_wdiStartCallback,
459 (v_VOID_t *)pVosContext);
460 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
461 {
462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700463 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700464 vos_mem_free(wdiStartParam.pConfigBuffer);
465 return VOS_STATUS_E_FAILURE;
466 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700467 /* wait for WDI start to invoke our callback */
468 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
469 WDA_WDI_START_TIMEOUT );
470 if ( !VOS_IS_STATUS_SUCCESS(status) )
471 {
472 if ( VOS_STATUS_E_TIMEOUT == status )
473 {
474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700475 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700476 }
477 else
478 {
479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
480 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700481 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700482 }
483 vos_mem_free(wdiStartParam.pConfigBuffer);
484 return VOS_STATUS_E_FAILURE;
485 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700487 /* we no longer need the config TLV */
488 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700489 /* if we are not in the START state then WDI_Start() failed */
490 if (WDA_START_STATE != wdaContext->wdaState)
491 {
492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700493 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700494 return VOS_STATUS_E_FAILURE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 /* FTM mode does not need to monitor BA activity */
497 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
498 {
499 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800500 if(VOS_STATUS_SUCCESS == status)
501 {
502 wdaContext->wdaTimersCreated = VOS_TRUE;
503 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700504 }
Leo Chang9d76f622013-08-23 16:34:52 -0700505 else
506 {
507 vos_event_init(&wdaContext->ftmStopDoneEvent);
508 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700509 return status;
510}
511
Jeff Johnson295189b2012-06-20 16:38:30 -0700512/*
513 * FUNCTION: WDA_prepareConfigTLV
514 * Function to prepare CFG for DAL(WDA)
515 */
516VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
517 WDI_StartReqParamsType *wdiStartParams )
518{
519 /* get pMac to acess CFG data base */
520 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
521 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
522 tHalCfg *tlvStruct = NULL ;
523 tANI_U8 *tlvStructStart = NULL ;
524 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
525 v_PVOID_t *configParam;
526 tANI_U32 configParamSize;
527 tANI_U32 *configDataValue;
528 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700529 tANI_U8 i;
530
Jeff Johnson295189b2012-06-20 16:38:30 -0700531 if ((NULL == pMac)||(NULL == wdaContext))
532 {
533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 VOS_ASSERT(0);
536 return VOS_STATUS_E_FAILURE;
537 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700538 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
539 WNI_CFG_STA_ID_LEN +
540 WNI_CFG_EDCA_WME_ACBK_LEN +
541 WNI_CFG_EDCA_WME_ACBE_LEN +
542 WNI_CFG_EDCA_WME_ACVI_LEN +
543 WNI_CFG_EDCA_WME_ACVO_LEN +
544 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700545 /* malloc memory for all configs in one shot */
546 configParam = vos_mem_malloc(configParamSize);
547
548 if(NULL == configParam )
549 {
550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700551 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700552 VOS_ASSERT(0) ;
553 return VOS_STATUS_E_NOMEM;
554 }
555 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700556 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700557 tlvStruct = (tHalCfg *)configParam;
558 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700559 /* TODO: Remove Later */
560 /* QWLAN_HAL_CFG_STA_ID */
561 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
562 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
563 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
564 eSIR_SUCCESS)
565 {
566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
567 "Failed to get value for WNI_CFG_STA_ID");
568 goto handle_failure;
569 }
570 tlvStruct->length = strLength ;
571 /* calculate the pad bytes to have the CFG in aligned format */
572 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
573 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700574 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
575 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700576 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
577 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
578 tlvStruct->length = sizeof(tANI_U32);
579 configDataValue = (tANI_U32 *)(tlvStruct + 1);
580 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
581 != eSIR_SUCCESS)
582 {
583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
584 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
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_CURRENT_RX_ANTENNA */
590 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
591 tlvStruct->length = sizeof(tANI_U32);
592 configDataValue = (tANI_U32 *)(tlvStruct + 1);
593 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
594 eSIR_SUCCESS)
595 {
596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
597 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
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_LOW_GAIN_OVERRIDE */
603 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
604 tlvStruct->length = sizeof(tANI_U32);
605 configDataValue = (tANI_U32 *)(tlvStruct + 1);
606 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
607 != eSIR_SUCCESS)
608 {
609 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
610 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
611 goto handle_failure;
612 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700613 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
614 + sizeof(tHalCfg) + tlvStruct->length)) ;
615
616 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
617 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
618 tlvStruct->length = sizeof(tANI_U32);
619 configDataValue = (tANI_U32 *)(tlvStruct + 1);
620 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
621 configDataValue ) != eSIR_SUCCESS)
622 {
623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
624 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
625 goto handle_failure;
626 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700627 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
628 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700629 /* QWLAN_HAL_CFG_CAL_PERIOD */
630 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
631 tlvStruct->length = sizeof(tANI_U32);
632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
633 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
634 != eSIR_SUCCESS)
635 {
636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
637 "Failed to get value for WNI_CFG_CAL_PERIOD");
638 goto handle_failure;
639 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700640 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
641 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700642 /* QWLAN_HAL_CFG_CAL_CONTROL */
643 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
644 tlvStruct->length = sizeof(tANI_U32);
645 configDataValue = (tANI_U32 *)(tlvStruct + 1);
646 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
647 != eSIR_SUCCESS)
648 {
649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
650 "Failed to get value for WNI_CFG_CAL_CONTROL");
651 goto handle_failure;
652 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700653 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
654 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700655 /* QWLAN_HAL_CFG_PROXIMITY */
656 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
657 tlvStruct->length = sizeof(tANI_U32);
658 configDataValue = (tANI_U32 *)(tlvStruct + 1);
659 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
660 != eSIR_SUCCESS)
661 {
662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
663 "Failed to get value for WNI_CFG_PROXIMITY");
664 goto handle_failure;
665 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700666 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
667 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700668 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
669 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
670 tlvStruct->length = sizeof(tANI_U32);
671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
672 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
673 != eSIR_SUCCESS)
674 {
675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
676 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
677 goto handle_failure;
678 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700679 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
680 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700681 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
682 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
683 tlvStruct->length = sizeof(tANI_U32);
684 configDataValue = (tANI_U32 *)(tlvStruct + 1);
685 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
686 eSIR_SUCCESS)
687 {
688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
689 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
690 goto handle_failure;
691 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700692 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
693 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700694 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
695 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
696 tlvStruct->length = sizeof(tANI_U32);
697 configDataValue = (tANI_U32 *)(tlvStruct + 1);
698 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
699 configDataValue ) != eSIR_SUCCESS)
700 {
701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
702 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
703 goto handle_failure;
704 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700705 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
706 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700707 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
708 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
709 tlvStruct->length = sizeof(tANI_U32);
710 configDataValue = (tANI_U32 *)(tlvStruct + 1);
711 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
712 eSIR_SUCCESS)
713 {
714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
715 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
716 goto handle_failure;
717 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700718 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
719 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700720 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
721 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
722 tlvStruct->length = sizeof(tANI_U32);
723 configDataValue = (tANI_U32 *)(tlvStruct + 1);
724 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
725 eSIR_SUCCESS)
726 {
727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
728 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
729 goto handle_failure;
730 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700731 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
732 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700733 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
734 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
735 tlvStruct->length = sizeof(tANI_U32);
736 configDataValue = (tANI_U32 *)(tlvStruct + 1);
737 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
738 eSIR_SUCCESS)
739 {
740 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
741 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
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_FRAGMENTATION_THRESHOLD */
747 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
748 tlvStruct->length = sizeof(tANI_U32);
749 configDataValue = (tANI_U32 *)(tlvStruct + 1);
750 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
751 configDataValue ) != eSIR_SUCCESS)
752 {
753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
754 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
755 goto handle_failure;
756 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700757 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
758 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700759 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
760 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
761 tlvStruct->length = sizeof(tANI_U32);
762 configDataValue = (tANI_U32 *)(tlvStruct + 1);
763 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
764 configDataValue ) != eSIR_SUCCESS)
765 {
766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
767 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
768 goto handle_failure;
769 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
771 + sizeof(tHalCfg) + tlvStruct->length));
772
773 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
774 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
775 tlvStruct->length = sizeof(tANI_U32);
776 configDataValue = (tANI_U32 *)(tlvStruct + 1);
777 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
778 configDataValue ) != eSIR_SUCCESS)
779 {
780 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
781 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
782 goto handle_failure;
783 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
785 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700786 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
787 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
788 tlvStruct->length = sizeof(tANI_U32);
789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
790 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
791 configDataValue ) != eSIR_SUCCESS)
792 {
793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
794 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
795 goto handle_failure;
796 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700797 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
798 + sizeof(tHalCfg) + tlvStruct->length));
799
800 /* QWLAN_HAL_CFG_FIXED_RATE */
801 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
802 tlvStruct->length = sizeof(tANI_U32);
803 configDataValue = (tANI_U32 *)(tlvStruct + 1);
804 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
805 != eSIR_SUCCESS)
806 {
807 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
808 "Failed to get value for WNI_CFG_FIXED_RATE");
809 goto handle_failure;
810 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700811 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
812 + sizeof(tHalCfg) + tlvStruct->length));
813
814 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
815 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
816 tlvStruct->length = sizeof(tANI_U32);
817 configDataValue = (tANI_U32 *)(tlvStruct + 1);
818 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
819 != eSIR_SUCCESS)
820 {
821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
822 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
823 goto handle_failure;
824 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700825 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
826 + sizeof(tHalCfg) + tlvStruct->length));
827
828 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
829 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
830 tlvStruct->length = sizeof(tANI_U32);
831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
832 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
833 configDataValue ) != eSIR_SUCCESS)
834 {
835 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
836 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
837 goto handle_failure;
838 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700839 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
840 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700841 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
842 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
843 tlvStruct->length = sizeof(tANI_U32);
844 configDataValue = (tANI_U32 *)(tlvStruct + 1);
845 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
846 configDataValue ) != eSIR_SUCCESS)
847 {
848 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
849 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
850 goto handle_failure;
851 }
852 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
853 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700854 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
855 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
856 tlvStruct->length = sizeof(tANI_U32);
857 configDataValue = (tANI_U32 *)(tlvStruct + 1);
858 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
859 configDataValue ) != eSIR_SUCCESS)
860 {
861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
862 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
863 goto handle_failure;
864 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700865 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
866 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700867 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
868 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
869 tlvStruct->length = sizeof(tANI_U32);
870 configDataValue = (tANI_U32 *)(tlvStruct + 1);
871 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
872 configDataValue ) != eSIR_SUCCESS)
873 {
874 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
875 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
876 goto handle_failure;
877 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700878 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
879 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700880 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
881 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
882 tlvStruct->length = sizeof(tANI_U32);
883 configDataValue = (tANI_U32 *)(tlvStruct + 1);
884 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
885 configDataValue ) != eSIR_SUCCESS)
886 {
887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
888 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
889 goto handle_failure;
890 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700891 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
892 + sizeof(tHalCfg) + tlvStruct->length);
893
894#if 0 /*FIXME_PRIMA : Enable this after the RA is enabled in HAL*/
895 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
896 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
897 tlvStruct->length = sizeof(tANI_U32);
898 configDataValue = (tANI_U32 *)(tlvStruct + 1);
899 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
900 configDataValue ) != eSIR_SUCCESS)
901 {
902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
903 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
904 goto handle_failure;
905 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700906 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
907 + sizeof(tHalCfg) + tlvStruct->length);
908#endif
909 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
910 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
911 tlvStruct->length = sizeof(tANI_U32);
912 configDataValue = (tANI_U32 *)(tlvStruct + 1);
913 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
914 configDataValue ) != eSIR_SUCCESS)
915 {
916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
917 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
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_MAX_BA_SESSIONS */
923 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
924 tlvStruct->length = sizeof(tANI_U32);
925 configDataValue = (tANI_U32 *)(tlvStruct + 1);
926 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
927 eSIR_SUCCESS)
928 {
929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
930 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
931 goto handle_failure;
932 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700933 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
934 + sizeof(tHalCfg) + tlvStruct->length);
935
936 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
937 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
938 tlvStruct->length = sizeof(tANI_U32);
939 configDataValue = (tANI_U32 *)(tlvStruct + 1);
940 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
941 configDataValue ) != eSIR_SUCCESS)
942 {
943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
944 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
945 goto handle_failure;
946 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700947 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
948 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700949 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
950 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
951 tlvStruct->length = sizeof(tANI_U32);
952 configDataValue = (tANI_U32 *)(tlvStruct + 1);
953 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
954 configDataValue ) != eSIR_SUCCESS)
955 {
956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
957 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
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_PS_ENABLE_RSSI_MONITOR */
963 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
964 tlvStruct->length = sizeof(tANI_U32);
965 configDataValue = (tANI_U32 *)(tlvStruct + 1);
966 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
967 configDataValue ) != eSIR_SUCCESS)
968 {
969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
970 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
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_NUM_BEACON_PER_RSSI_AVERAGE */
976 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
977 tlvStruct->length = sizeof(tANI_U32);
978 configDataValue = (tANI_U32 *)(tlvStruct + 1);
979 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
980 configDataValue ) != eSIR_SUCCESS)
981 {
982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
983 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
984 goto handle_failure;
985 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700986 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
987 + sizeof(tHalCfg) + tlvStruct->length);
988
989 /* QWLAN_HAL_CFG_STATS_PERIOD */
990 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
991 tlvStruct->length = sizeof(tANI_U32);
992 configDataValue = (tANI_U32 *)(tlvStruct + 1);
993 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
994 eSIR_SUCCESS)
995 {
996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
997 "Failed to get value for WNI_CFG_STATS_PERIOD");
998 goto handle_failure;
999 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001000 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1001 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -07001002 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
1003 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
1004 tlvStruct->length = sizeof(tANI_U32);
1005 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1006 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
1007 eSIR_SUCCESS)
1008 {
1009 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1010 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1011 goto handle_failure;
1012 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1014 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001015 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1016 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1017 tlvStruct->length = sizeof(tANI_U32);
1018 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1019 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1020 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001021 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1022 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001023 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1024 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1025 tlvStruct->length = sizeof(tANI_U32);
1026 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1027 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1028 != eSIR_SUCCESS)
1029 {
1030 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1031 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1032 goto handle_failure;
1033 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001034 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1035 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001036 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1037 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1038 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1039 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1040 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1041 &strLength) != eSIR_SUCCESS)
1042 {
1043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1044 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1045 goto handle_failure;
1046 }
1047 tlvStruct->length = strLength;
1048 /* calculate the pad bytes to have the CFG in aligned format */
1049 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1050 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001051 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1052 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001053 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1054 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1055 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1056 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1057 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1058 &strLength) != eSIR_SUCCESS)
1059 {
1060 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1061 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1062 goto handle_failure;
1063 }
1064 tlvStruct->length = strLength;
1065 /* calculate the pad bytes to have the CFG in aligned format */
1066 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1067 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001068 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1069 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001070 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1071 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1072 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1073 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1074 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1075 &strLength) != eSIR_SUCCESS)
1076 {
1077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1078 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1079 goto handle_failure;
1080 }
1081 tlvStruct->length = strLength;
1082 /* calculate the pad bytes to have the CFG in aligned format */
1083 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1084 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001085 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1086 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001087 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1088 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1089 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1090 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1091 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1092 &strLength) != eSIR_SUCCESS)
1093 {
1094 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1095 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1096 goto handle_failure;
1097 }
1098 tlvStruct->length = strLength;
1099 /* calculate the pad bytes to have the CFG in aligned format */
1100 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1101 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001102 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1103 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001104 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1105 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1106 tlvStruct->length = sizeof(tANI_U32);
1107 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1108 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1109 != eSIR_SUCCESS)
1110 {
1111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1112 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1113 goto handle_failure;
1114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001115 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1116 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001117 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1118 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1119 tlvStruct->length = sizeof(tANI_U32);
1120 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1121 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1122 != eSIR_SUCCESS)
1123 {
1124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1125 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1126 goto handle_failure;
1127 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001128 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1129 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001130 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1131 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1132 tlvStruct->length = sizeof(tANI_U32);
1133 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1134 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1135 != eSIR_SUCCESS)
1136 {
1137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1138 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1139 goto handle_failure;
1140 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001141 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1142 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001143 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1144 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1145 tlvStruct->length = sizeof(tANI_U32);
1146 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1147 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1148 != eSIR_SUCCESS)
1149 {
1150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1151 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1152 goto handle_failure;
1153 }
1154 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1155 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001156 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1157 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1158 tlvStruct->length = sizeof(tANI_U32);
1159 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1160 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1161 != eSIR_SUCCESS)
1162 {
1163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1164 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1165 goto handle_failure;
1166 }
1167 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1168 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001169 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1170 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1171 tlvStruct->length = sizeof(tANI_U32);
1172 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1173 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1174 != eSIR_SUCCESS)
1175 {
1176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1177 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1178 goto handle_failure;
1179 }
1180 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1181 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001182 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1183 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1184 tlvStruct->length = sizeof(tANI_U32);
1185 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1186 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1187 != eSIR_SUCCESS)
1188 {
1189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1190 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1191 goto handle_failure;
1192 }
1193 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1194 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001195 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1196 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1197 tlvStruct->length = sizeof(tANI_U32);
1198 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1199 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1200 != eSIR_SUCCESS)
1201 {
1202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1203 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1204 goto handle_failure;
1205 }
1206 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1207 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001208 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1209 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1210 tlvStruct->length = sizeof(tANI_U32);
1211 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1212 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1213 != eSIR_SUCCESS)
1214 {
1215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1216 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1217 goto handle_failure;
1218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001219 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1220 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001221 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1222 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1223 tlvStruct->length = sizeof(tANI_U32);
1224 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1225 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1226 != eSIR_SUCCESS)
1227 {
1228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1229 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1230 goto handle_failure;
1231 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001232 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1233 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001234 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1235 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1236 tlvStruct->length = sizeof(tANI_U32);
1237 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1238 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1239 != eSIR_SUCCESS)
1240 {
1241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1242 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1243 goto handle_failure;
1244 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001245 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1246 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001247 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1248 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1249 * into FW, so the parameters are added here.
1250 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001251 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1252 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1253 tlvStruct->length = sizeof(tANI_U32);
1254 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1255 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1256 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1257 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001258 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1259 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1260 tlvStruct->length = sizeof(tANI_U32);
1261 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1262 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1263 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1264 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001265 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1266 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1267 tlvStruct->length = sizeof(tANI_U32);
1268 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1269 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1270 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1271 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001272 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1273 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1274 tlvStruct->length = sizeof(tANI_U32);
1275 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1276 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1277 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1278 + sizeof(tHalCfg) + tlvStruct->length) ;
1279
1280 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1281 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1282 tlvStruct->length = sizeof(tANI_U32);
1283 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1284 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1285 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1286 + sizeof(tHalCfg) + tlvStruct->length) ;
1287
1288 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1289 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1290 tlvStruct->length = sizeof(tANI_U32);
1291 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1292 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1293 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1294 + sizeof(tHalCfg) + tlvStruct->length) ;
1295
1296 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1297 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1298 tlvStruct->length = sizeof(tANI_U32);
1299 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1300 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1301 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1302 + sizeof(tHalCfg) + tlvStruct->length) ;
1303
1304 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1305 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1306 tlvStruct->length = sizeof(tANI_U32);
1307 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1308 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1309 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1310 + sizeof(tHalCfg) + tlvStruct->length) ;
1311
1312 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1313 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1314 tlvStruct->length = sizeof(tANI_U32);
1315 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1316 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1317 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1318 + sizeof(tHalCfg) + tlvStruct->length) ;
1319
1320 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1321 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1322 tlvStruct->length = sizeof(tANI_U32);
1323 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1324 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1325 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1326 + sizeof(tHalCfg) + tlvStruct->length) ;
1327
1328 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1329 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1330 tlvStruct->length = sizeof(tANI_U32);
1331 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1332 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1333 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1334 + sizeof(tHalCfg) + tlvStruct->length) ;
1335
1336 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1337 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1338 tlvStruct->length = sizeof(tANI_U32);
1339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1340 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1341 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1342 + sizeof(tHalCfg) + tlvStruct->length) ;
1343
1344 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1345 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1346 tlvStruct->length = sizeof(tANI_U32);
1347 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1348 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1349 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1350 + sizeof(tHalCfg) + tlvStruct->length) ;
1351
1352 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1353 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1354 tlvStruct->length = sizeof(tANI_U32);
1355 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1356 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1357 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1358 + sizeof(tHalCfg) + tlvStruct->length) ;
1359
1360 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1361 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1362 tlvStruct->length = sizeof(tANI_U32);
1363 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1364 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1365 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1366 + sizeof(tHalCfg) + tlvStruct->length) ;
1367
1368 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1369 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
Wilson Tsaof8b37942013-09-06 10:49:00 -07001376 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1377 {
1378 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1379 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1380 tlvStruct->length = sizeof(tANI_U32);
1381 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1382 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1383 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1384 + sizeof(tHalCfg) + tlvStruct->length) ;
1385
1386 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1387 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1388 tlvStruct->length = sizeof(tANI_U32);
1389 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1390 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1391 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1392 + sizeof(tHalCfg) + tlvStruct->length) ;
1393
1394 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1395 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1396 tlvStruct->length = sizeof(tANI_U32);
1397 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1398 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1399 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1400 + sizeof(tHalCfg) + tlvStruct->length) ;
1401
1402 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1403 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1404 tlvStruct->length = sizeof(tANI_U32);
1405 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1406 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1407 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1408 + sizeof(tHalCfg) + tlvStruct->length) ;
1409 }
1410
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418
1419 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1420 {
1421 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1422 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1423 tlvStruct->length = sizeof(tANI_U32);
1424 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1425 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1426 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1427 + sizeof(tHalCfg) + tlvStruct->length) ;
1428 }
1429
1430 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1431 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1432 tlvStruct->length = sizeof(tANI_U32);
1433 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1434 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1435 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1436 + sizeof(tHalCfg) + tlvStruct->length) ;
1437
Jeff Johnson32d95a32012-09-10 13:15:23 -07001438 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001439 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1440 tlvStruct->length = sizeof(tANI_U32);
1441 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1442 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1443 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1444 wcnssCompiledApiVersion.minor,
1445 wcnssCompiledApiVersion.version,
1446 wcnssCompiledApiVersion.revision);
1447 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1448 + sizeof(tHalCfg) + tlvStruct->length) ;
1449
Jeff Johnsond13512a2012-07-17 11:42:19 -07001450 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1451 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1452 tlvStruct->length = sizeof(tANI_U32);
1453 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1454 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1455 configDataValue ) != eSIR_SUCCESS)
1456 {
1457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1458 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1459 goto handle_failure;
1460 }
1461
1462 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1463 + sizeof(tHalCfg) + tlvStruct->length) ;
1464 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1465 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1466 tlvStruct->length = sizeof(tANI_U32);
1467 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1468 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1469 configDataValue ) != eSIR_SUCCESS)
1470 {
1471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1472 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1473 goto handle_failure;
1474 }
1475
1476 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1477 + sizeof(tHalCfg) + tlvStruct->length) ;
1478
1479 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1480 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1481 tlvStruct->length = sizeof(tANI_U32);
1482 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1483 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1484 != eSIR_SUCCESS)
1485 {
1486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1487 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1488 goto handle_failure;
1489 }
1490
1491 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1492 + sizeof(tHalCfg) + tlvStruct->length) ;
1493
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001494 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1495 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1496 tlvStruct->length = sizeof(tANI_U32);
1497 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1498 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1499 != eSIR_SUCCESS)
1500 {
1501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1502 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1503 goto handle_failure;
1504 }
1505
1506 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1507 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001508#ifdef WLAN_SOFTAP_VSTA_FEATURE
1509 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1510 tlvStruct->length = sizeof(tANI_U32);
1511 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1512 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1513 != eSIR_SUCCESS)
1514 {
1515 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1516 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1517 goto handle_failure;
1518 }
1519
1520 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1521 + sizeof(tHalCfg) + tlvStruct->length) ;
1522#endif
1523
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001524 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1525 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1526 tlvStruct->length = sizeof(tANI_U32);
1527 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1528
1529 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1530 != eSIR_SUCCESS)
1531 {
1532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1533 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1534 goto handle_failure;
1535 }
1536
1537 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1538 + sizeof(tHalCfg) + tlvStruct->length) ;
1539
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301540/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1541 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1542 tlvStruct->length = sizeof(tANI_U32);
1543 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1544 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1545 configDataValue ) != eSIR_SUCCESS)
1546 {
1547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1548 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1549 goto handle_failure;
1550 }
1551
1552 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1553 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301554#ifdef FEATURE_WLAN_TDLS
1555 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1556 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1557 tlvStruct->length = sizeof(tANI_U32);
1558 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1559 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1560 configDataValue ) != eSIR_SUCCESS)
1561 {
1562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1563 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1564 goto handle_failure;
1565 }
1566 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1567 + sizeof(tHalCfg) + tlvStruct->length) ;
1568
1569 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1570 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1571 tlvStruct->length = sizeof(tANI_U32);
1572 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1573 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1574 configDataValue ) != eSIR_SUCCESS)
1575 {
1576 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1577 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1578 goto handle_failure;
1579 }
1580 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1581 + sizeof(tHalCfg) + tlvStruct->length) ;
1582 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1583 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1584 tlvStruct->length = sizeof(tANI_U32);
1585 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1586 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1587 configDataValue ) != eSIR_SUCCESS)
1588 {
1589 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1590 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1591 goto handle_failure;
1592 }
1593 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1594 + sizeof(tHalCfg) + tlvStruct->length) ;
1595 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1596 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1597 tlvStruct->length = sizeof(tANI_U32);
1598 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1599 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1600 configDataValue ) != eSIR_SUCCESS)
1601 {
1602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1603 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1604 goto handle_failure;
1605 }
1606 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1607 + sizeof(tHalCfg) + tlvStruct->length) ;
1608#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301609
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001610 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1611 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1612 tlvStruct->length = sizeof(tANI_U32);
1613 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1614 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1615 configDataValue ) != eSIR_SUCCESS)
1616 {
1617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1618 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1619 goto handle_failure;
1620 }
1621
1622 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1623 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001624
1625 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1626 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1627 tlvStruct->length = sizeof(tANI_U32);
1628 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1629 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1630 != eSIR_SUCCESS)
1631 {
1632 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1633 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1634 goto handle_failure;
1635 }
1636 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1637 + sizeof(tHalCfg) + tlvStruct->length));
1638
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301639 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1640 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1641 tlvStruct->length = sizeof(tANI_U32);
1642 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1643 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1644 configDataValue ) != eSIR_SUCCESS)
1645 {
1646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1647 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1648 goto handle_failure;
1649 }
1650
1651 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1652 + sizeof(tHalCfg) + tlvStruct->length) ;
1653
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301654 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1655 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1656 tlvStruct->length = sizeof(tANI_U32);
1657 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1658 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1659 configDataValue ) != eSIR_SUCCESS)
1660 {
1661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1662 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1663 goto handle_failure;
1664 }
1665 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1666 + sizeof(tHalCfg) + tlvStruct->length) ;
1667
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301668 /* QWLAN_HAL_CFG_ATH_DISABLE */
1669 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1670 tlvStruct->length = sizeof(tANI_U32);
1671 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1672 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1673 configDataValue ) != eSIR_SUCCESS)
1674 {
1675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1676 "Failed to get value for WNI_CFG_ATH_DISABLE");
1677 goto handle_failure;
1678 }
1679 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1680 + sizeof(tHalCfg) + tlvStruct->length) ;
1681
Jeff Johnson295189b2012-06-20 16:38:30 -07001682 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001683#ifdef WLAN_DEBUG
1684 {
1685 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001686 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1687 "****** Dumping CFG TLV ***** ");
1688 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1689 {
1690 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1691 "%02x %02x %02x %02x %02x %02x %02x %02x",
1692 tlvStructStart[i],
1693 tlvStructStart[i+1],
1694 tlvStructStart[i+2],
1695 tlvStructStart[i+3],
1696 tlvStructStart[i+4],
1697 tlvStructStart[i+5],
1698 tlvStructStart[i+6],
1699 tlvStructStart[i+7]);
1700 }
1701 /* Dump the bytes in the last line*/
1702 for (; i < wdiStartParams->usConfigBufferLen; i++)
1703 {
1704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1705 "%02x ",tlvStructStart[i]);
1706 }
1707 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1708 "**************************** ");
1709 }
1710#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001711 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001712handle_failure:
1713 vos_mem_free(configParam);
1714 return VOS_STATUS_E_FAILURE;
1715}
Jeff Johnson295189b2012-06-20 16:38:30 -07001716/*
1717 * FUNCTION: WDA_wdiCompleteCB
1718 * call the voss call back function
1719 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001720void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001721{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001722 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1723 tWDA_CbContext *wdaContext;
1724
1725 if(NULL == pWdaParams)
1726 {
1727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001728 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001729 VOS_ASSERT(0) ;
1730 return ;
1731 }
1732
1733 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1734
Jeff Johnson295189b2012-06-20 16:38:30 -07001735 if (NULL == wdaContext)
1736 {
1737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001738 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001739 return ;
1740 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001741
Jeff Johnson295189b2012-06-20 16:38:30 -07001742 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001743 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001744 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001745 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001746 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001747 vos_mem_free(pWdaParams);
1748
Jeff Johnson295189b2012-06-20 16:38:30 -07001749 if(WDI_STATUS_SUCCESS != status)
1750 {
1751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1752 "WDI stop callback returned failure" );
1753 VOS_ASSERT(0) ;
1754 }
1755 else
1756 {
1757 wdaContext->wdaState = WDA_STOP_STATE;
1758 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001759
Leo Chang9d76f622013-08-23 16:34:52 -07001760 /* FTM Driver stop procedure should be synced.
1761 * Stop and Close will happen on same context */
1762 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1763 {
1764 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1765 {
1766 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1767 "%s: FTM Stop Event Set Fail", __func__);
1768 VOS_ASSERT(0);
1769 }
1770 }
1771
Jeff Johnson295189b2012-06-20 16:38:30 -07001772 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001773 vos_WDAComplete_cback(wdaContext->pVosContext);
1774
Jeff Johnson295189b2012-06-20 16:38:30 -07001775 return ;
1776}
Jeff Johnson295189b2012-06-20 16:38:30 -07001777/*
1778 * FUNCTION: WDA_stop
1779 * call WDI_stop
1780 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001781VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1782{
1783 WDI_Status wdiStatus;
1784 VOS_STATUS status = VOS_STATUS_SUCCESS;
1785 WDI_StopReqParamsType *wdiStopReq;
1786 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001787 tWDA_ReqParams *pWdaParams ;
1788
Jeff Johnson295189b2012-06-20 16:38:30 -07001789 if (NULL == pWDA)
1790 {
1791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001792 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001793 VOS_ASSERT(0);
1794 return VOS_STATUS_E_FAILURE;
1795 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001796 if (pWDA->wdiFailed == true)
1797 {
1798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001799 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07001800 return VOS_STATUS_E_ALREADY;
1801 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001802
Jeff Johnson295189b2012-06-20 16:38:30 -07001803 /* FTM mode stay START_STATE */
1804 if( (WDA_READY_STATE != pWDA->wdaState) &&
1805 (WDA_INIT_STATE != pWDA->wdaState) &&
1806 (WDA_START_STATE != pWDA->wdaState) )
1807 {
1808 VOS_ASSERT(0);
1809 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001810 wdiStopReq = (WDI_StopReqParamsType *)
1811 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
1812 if(NULL == wdiStopReq)
1813 {
1814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001815 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001816 VOS_ASSERT(0);
1817 return VOS_STATUS_E_NOMEM;
1818 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001819
Jeff Johnson295189b2012-06-20 16:38:30 -07001820 wdiStopReq->wdiStopReason = reason;
1821 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001822
1823 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
1824 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07001825 {
1826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001828 VOS_ASSERT(0);
1829 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001830 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07001831 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001832
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001833 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
1834 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07001835 {
1836 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001837 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001838 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08001839
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001840 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
1841 pWdaParams->wdaMsgParam = NULL;
1842 pWdaParams->pWdaContext = pWDA;
1843
Jeff Johnson295189b2012-06-20 16:38:30 -07001844 /* call WDI stop */
1845 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001846 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
1847
Jeff Johnson295189b2012-06-20 16:38:30 -07001848 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
1849 {
1850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1851 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001852 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
1853 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07001854 status = VOS_STATUS_E_FAILURE;
1855 }
Leo Chang9d76f622013-08-23 16:34:52 -07001856
1857 /* FTM Driver stop procedure should be synced.
1858 * Stop and Close will happen on same context */
1859 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
1860 {
1861 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
1862 WDI_RESPONSE_TIMEOUT);
1863 if (status != VOS_STATUS_SUCCESS)
1864 {
1865 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1866 "%s: FTM Stop Timepoout", __func__);
1867 VOS_ASSERT(0);
1868 vos_event_reset(&pWDA->ftmStopDoneEvent);
1869 }
1870 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001871 return status;
1872}
Jeff Johnson295189b2012-06-20 16:38:30 -07001873/*
1874 * FUNCTION: WDA_close
1875 * call WDI_close and free the WDA context
1876 */
1877VOS_STATUS WDA_close(v_PVOID_t pVosContext)
1878{
Jeff Johnson43971f52012-07-17 12:26:56 -07001879 VOS_STATUS status = VOS_STATUS_SUCCESS;
1880 WDI_Status wstatus;
1881 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07001882 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07001883 if (NULL == wdaContext)
1884 {
1885 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001886 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001887 return VOS_STATUS_E_FAILURE;
1888 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001889 if((WDA_INIT_STATE != wdaContext->wdaState) &&
1890 (WDA_STOP_STATE != wdaContext->wdaState))
1891 {
1892 VOS_ASSERT(0);
1893 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001894 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07001895 wstatus = WDI_Close();
1896 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07001897 {
1898 status = VOS_STATUS_E_FAILURE;
1899 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001900 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07001901 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07001902 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
1903 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001904 {
1905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001906 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001907 status = VOS_STATUS_E_FAILURE;
1908 }
1909
Jeff Johnson43971f52012-07-17 12:26:56 -07001910 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001911 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001912 {
1913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001914 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001915 status = VOS_STATUS_E_FAILURE;
1916 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001917 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07001918 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001919 {
1920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001921 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001922 status = VOS_STATUS_E_FAILURE;
1923 }
Jeff Johnson43971f52012-07-17 12:26:56 -07001924 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07001925 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07001926 {
1927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08001928 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07001929 status = VOS_STATUS_E_FAILURE;
1930 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001931 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07001932 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07001933 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07001934 {
1935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1936 "error in WDA close " );
1937 status = VOS_STATUS_E_FAILURE;
1938 }
1939 return status;
1940}
Jeff Johnson295189b2012-06-20 16:38:30 -07001941/*
1942 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
1943 * returns 1 if the compiled version is greater than or equal to the input version
1944 */
1945
1946uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1947{
1948 VOS_STATUS status = VOS_STATUS_SUCCESS;
1949 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1950 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001951 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
1953 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
1954 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
1955 (compiledVersion.revision >= revision)))
1956 return 1;
1957 else
1958 return 0;
1959}
Jeff Johnson295189b2012-06-20 16:38:30 -07001960/*
1961 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
1962 * returns 1 if the compiled version is greater than or equal to the input version
1963 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001964uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
1965{
1966 VOS_STATUS status = VOS_STATUS_SUCCESS;
1967 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
1968 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07001969 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07001970 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
1971 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
1972 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
1973 (reportedVersion.revision >= revision)))
1974 return 1;
1975 else
1976 return 0;
1977}
Jeff Johnson295189b2012-06-20 16:38:30 -07001978/*
1979 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
1980 * Returns the version of the WCNSS WLAN API with which the HOST
1981 * device driver was compiled
1982 */
1983VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
1984 tSirVersionType *pVersion)
1985{
1986 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07001987 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001988 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001989 if ((NULL == pvosGCtx) || (NULL == pVersion))
1990 {
1991 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001992 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07001993 VOS_ASSERT(0);
1994 return VOS_STATUS_E_FAILURE;
1995 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001996 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
1997 if (NULL == pWDA )
1998 {
1999 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002000 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002001 VOS_ASSERT(0);
2002 return VOS_STATUS_E_FAILURE;
2003 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002004 *pVersion = pWDA->wcnssWlanCompiledVersion;
2005 return VOS_STATUS_SUCCESS;
2006}
Jeff Johnson295189b2012-06-20 16:38:30 -07002007/*
2008 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2009 * Returns the version of the WCNSS WLAN API with which the WCNSS
2010 * device driver was compiled
2011 */
2012VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2013 tSirVersionType *pVersion)
2014{
2015 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002016 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002017 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002018 if ((NULL == pvosGCtx) || (NULL == pVersion))
2019 {
2020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002021 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 VOS_ASSERT(0);
2023 return VOS_STATUS_E_FAILURE;
2024 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002025 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2026 if (NULL == pWDA )
2027 {
2028 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002029 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002030 VOS_ASSERT(0);
2031 return VOS_STATUS_E_FAILURE;
2032 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002033 *pVersion = pWDA->wcnssWlanReportedVersion;
2034 return VOS_STATUS_SUCCESS;
2035}
Jeff Johnson295189b2012-06-20 16:38:30 -07002036/*
2037 * FUNCTION: WDA_GetWcnssSoftwareVersion
2038 * Returns the WCNSS Software version string
2039 */
2040VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2041 tANI_U8 *pVersion,
2042 tANI_U32 versionBufferSize)
2043{
2044 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002045 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002046 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002047 if ((NULL == pvosGCtx) || (NULL == pVersion))
2048 {
2049 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002050 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002051 VOS_ASSERT(0);
2052 return VOS_STATUS_E_FAILURE;
2053 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002054 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2055 if (NULL == pWDA )
2056 {
2057 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002058 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002059 VOS_ASSERT(0);
2060 return VOS_STATUS_E_FAILURE;
2061 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002062 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2063 return VOS_STATUS_SUCCESS;
2064}
Jeff Johnson295189b2012-06-20 16:38:30 -07002065/*
2066 * FUNCTION: WDA_GetWcnssHardwareVersion
2067 * Returns the WCNSS Hardware version string
2068 */
2069VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2070 tANI_U8 *pVersion,
2071 tANI_U32 versionBufferSize)
2072{
2073 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002074 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002075 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002076 if ((NULL == pvosGCtx) || (NULL == pVersion))
2077 {
2078 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002079 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002080 VOS_ASSERT(0);
2081 return VOS_STATUS_E_FAILURE;
2082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002083 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2084 if (NULL == pWDA )
2085 {
2086 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002087 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 VOS_ASSERT(0);
2089 return VOS_STATUS_E_FAILURE;
2090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002091 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2092 return VOS_STATUS_SUCCESS;
2093}
Jeff Johnson295189b2012-06-20 16:38:30 -07002094/*
2095 * FUNCTION: WDA_WniCfgDnld
2096 * Trigger CFG Download
2097 */
2098VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2099{
2100 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002101 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002102 v_VOID_t *pFileImage = NULL;
2103 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002104 v_VOID_t *pCfgBinary = NULL;
2105 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002107
Jeff Johnson295189b2012-06-20 16:38:30 -07002108 if (NULL == pMac )
2109 {
2110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002111 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002112 VOS_ASSERT(0);
2113 return VOS_STATUS_E_FAILURE;
2114 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002115 /* get the number of bytes in the CFG Binary... */
2116 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2117 &cbFileImageSize );
2118 if ( VOS_STATUS_E_NOMEM != vosStatus )
2119 {
2120 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2121 "Error obtaining binary size" );
2122 goto fail;
2123 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002124 // malloc a buffer to read in the Configuration binary file.
2125 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002126 if ( NULL == pFileImage )
2127 {
2128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2129 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2130 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002131 vosStatus = VOS_STATUS_E_NOMEM;
2132 goto fail;
2133 }
2134
2135 /* Get the entire CFG file image... */
2136 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2137 &cbFileImageSize );
2138 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2139 {
2140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2141 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2142 cbFileImageSize );
2143 goto fail;
2144 }
2145
2146 /*
2147 * Validate the binary image. This function will return a pointer
2148 * and length where the CFG binary is located within the binary image file.
2149 */
2150 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2151 &pCfgBinary, &cbCfgBinarySize );
2152 if ( VOS_FALSE == bStatus )
2153 {
2154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2155 "Error: Cannot find STA CFG in binary image file" );
2156 vosStatus = VOS_STATUS_E_FAILURE;
2157 goto fail;
2158 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002159 /*
2160 * TODO: call the config download function
2161 * for now calling the existing cfg download API
2162 */
2163 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002164 vosStatus = VOS_STATUS_SUCCESS;
2165
2166 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002167
2168fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002169 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002170 return vosStatus;
2171}
Jeff Johnson295189b2012-06-20 16:38:30 -07002172/* -----------------------------------------------------------------
2173 * WDI interface
2174 * -----------------------------------------------------------------
2175 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002176/*
2177 * FUNCTION: WDA_suspendDataTxCallback
2178 * call back function called from TL after suspend Transmission
2179 */
2180VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2181 v_U8_t* ucSTAId,
2182 VOS_STATUS vosStatus)
2183{
2184 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002186 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002187 if (NULL == pWDA )
2188 {
2189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002190 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002191 VOS_ASSERT(0);
2192 return VOS_STATUS_E_FAILURE;
2193 }
2194 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2195 {
2196 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2197 }
2198 else
2199 {
2200 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2201 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002202 /* Trigger the event to bring the WDA TL suspend function to come
2203 * out of wait*/
2204 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2205 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2206 {
2207 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002208 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002209 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002210 /* If TL suspended had timedout before this callback was called, resume back
2211 * TL.*/
2212 if (pWDA->txSuspendTimedOut)
2213 {
2214 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002215 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002216 WDA_ResumeDataTx(pWDA);
2217 pWDA->txSuspendTimedOut = FALSE;
2218 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002219 return VOS_STATUS_SUCCESS;
2220}
Jeff Johnson295189b2012-06-20 16:38:30 -07002221/*
2222 * FUNCTION: WDA_suspendDataTx
2223 * Update TL to suspend the data Transmission
2224 */
2225VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2226{
2227 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2228 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002229
2230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002231 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002233 if (pWDA->txSuspendTimedOut)
2234 {
2235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002236 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002237 return status;
2238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002239 /* Reset the event to be not signalled */
2240 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2241 if(!VOS_IS_STATUS_SUCCESS(status))
2242 {
2243 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002244 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002245 return VOS_STATUS_E_FAILURE;
2246 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002248 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 WDA_SuspendDataTxCallback);
2250 if(status != VOS_STATUS_SUCCESS)
2251 {
2252 return status;
2253 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002254 /* Wait for the event to be set by the TL, to get the response of
2255 * suspending the TX queues, this event should be set by the Callback
2256 * function called by TL*/
2257 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2258 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2259 if(!VOS_IS_STATUS_SUCCESS(status))
2260 {
2261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2262 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002263 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 /* Set this flag to true when TL suspend times out, so that when TL
2265 * suspend eventually happens and calls the callback, TL can be resumed
2266 * right away by looking at this flag when true.*/
2267 pWDA->txSuspendTimedOut = TRUE;
2268 }
2269 else
2270 {
2271 pWDA->txSuspendTimedOut = FALSE;
2272 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002273 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2274 {
2275 status = VOS_STATUS_SUCCESS;
2276 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002277 return status;
2278}
Jeff Johnson295189b2012-06-20 16:38:30 -07002279/*
2280 * FUNCTION: WDA_resumeDataTx
2281 * Update TL to resume the data Transmission
2282 */
2283VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2284{
2285 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002286
2287 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002288 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002289
2290 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002291 return status;
2292}
Jeff Johnson295189b2012-06-20 16:38:30 -07002293/*
2294 * FUNCTION: WDA_InitScanReqCallback
2295 * Trigger Init SCAN callback
2296 */
2297void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2298{
2299 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2300 tWDA_CbContext *pWDA;
2301 tInitScanParams *pWDA_ScanParam ;
2302 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002304 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002305 if(NULL == pWdaParams)
2306 {
2307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002308 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002309 VOS_ASSERT(0) ;
2310 return ;
2311 }
2312 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2313 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 if(NULL == pWDA_ScanParam)
2315 {
2316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002317 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002318 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2320 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002321 return ;
2322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002323 if(WDI_STATUS_SUCCESS != wdiStatus)
2324 {
2325 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 if(VOS_STATUS_SUCCESS != status)
2327 {
2328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002329 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002330 }
2331 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002332 /* free WDI command buffer */
2333 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002334 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002335
Jeff Johnson295189b2012-06-20 16:38:30 -07002336
2337 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002338 /* without converting the Status to Failure or Success Just
2339 pass the same status to lim */
2340 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002341 /* send SCAN RSP message back to PE */
2342 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002343 return ;
2344}
2345
2346/*
2347 * FUNCTION: WDA_ProcessInitScanReq
2348 * Trigger Init SCAN in DAL
2349 */
2350VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2351 tInitScanParams *initScanParams)
2352{
2353 WDI_Status status = WDI_STATUS_SUCCESS ;
2354 WDI_InitScanReqParamsType *wdiInitScanParam =
2355 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2356 sizeof(WDI_InitScanReqParamsType)) ;
2357 tWDA_ReqParams *pWdaParams;
2358 tANI_U8 i = 0;
2359
2360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002361 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002362 if(NULL == wdiInitScanParam)
2363 {
2364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002365 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002366 VOS_ASSERT(0);
2367 return VOS_STATUS_E_NOMEM;
2368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2370 if(NULL == pWdaParams)
2371 {
2372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002374 VOS_ASSERT(0);
2375 vos_mem_free(wdiInitScanParam);
2376 return VOS_STATUS_E_NOMEM;
2377 }
2378
2379 /* Copy init Scan params to WDI structure */
2380 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2381 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2382 sizeof(tSirMacAddr)) ;
2383 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2384 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2385 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002386 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2387 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002388 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2389 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002390 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2391 {
2392 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2393 initScanParams->scanEntry.bssIdx[i] ;
2394 }
2395
2396 /* if Frame length, copy macMgmtHdr or WDI structure */
2397 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2398 {
2399 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2400 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2401 }
2402 wdiInitScanParam->wdiReqStatusCB = NULL ;
2403
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 /* Store Init Req pointer, as this will be used for response */
2405 pWdaParams->pWdaContext = pWDA;
2406 pWdaParams->wdaMsgParam = initScanParams;
2407 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002408 /* first try to suspend TX */
2409 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002410 if(WDI_STATUS_SUCCESS != status)
2411 {
2412 goto handleWdiFailure;
2413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002414 /* call DAL API to pass init scan request to DAL */
2415 status = WDI_InitScanReq(wdiInitScanParam,
2416 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002417 if(IS_WDI_STATUS_FAILURE(status))
2418 {
2419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2420 "error in WDA Init Scan, Resume Tx " );
2421 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002422 VOS_ASSERT(0) ;
2423
2424 goto handleWdiFailure;
2425 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002426 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002427handleWdiFailure:
2428 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2429 "Failure in WDI Api, free all the memory " );
2430 /* free WDI command buffer */
2431 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2432 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002433 /* send Failure to PE */
2434 initScanParams->status = eSIR_FAILURE ;
2435 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002436 return CONVERT_WDI2VOS_STATUS(status) ;
2437}
2438
Jeff Johnson295189b2012-06-20 16:38:30 -07002439/*
2440 * FUNCTION: WDA_StartScanReqCallback
2441 * send Start SCAN RSP back to PE
2442 */
2443void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2444 void* pUserData)
2445{
2446 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2447 tWDA_CbContext *pWDA;
2448 tStartScanParams *pWDA_ScanParam;
2449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002450 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 if(NULL == pWdaParams)
2452 {
2453 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002454 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002455 VOS_ASSERT(0) ;
2456 return ;
2457 }
2458 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2459 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002460 if(NULL == pWDA_ScanParam)
2461 {
2462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002463 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002464 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002465 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 return ;
2467 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002468 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2469 {
2470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002471 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002472 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002473 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002474 return ;
2475 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002476 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2477 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002478
Jeff Johnson295189b2012-06-20 16:38:30 -07002479
2480 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002481 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002482 /* send SCAN RSP message back to PE */
2483 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002484 return ;
2485}
2486
Jeff Johnson295189b2012-06-20 16:38:30 -07002487/*
2488 * FUNCTION: WDA_ProcessStartScanReq
2489 * Trigger start SCAN in WDI
2490 */
2491VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2492 tStartScanParams *startScanParams)
2493{
2494 WDI_Status status = WDI_STATUS_SUCCESS;
2495 WDI_StartScanReqParamsType *wdiStartScanParams =
2496 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2497 sizeof(WDI_StartScanReqParamsType)) ;
2498 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002500 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002501 if(NULL == wdiStartScanParams)
2502 {
2503 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002504 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 VOS_ASSERT(0);
2506 return VOS_STATUS_E_NOMEM;
2507 }
2508 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2509 if(NULL == pWdaParams)
2510 {
2511 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002512 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002513 VOS_ASSERT(0);
2514 vos_mem_free(wdiStartScanParams);
2515 return VOS_STATUS_E_NOMEM;
2516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002517 /* Copy init Scan params to WDI structure */
2518 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2519 wdiStartScanParams->wdiReqStatusCB = NULL ;
2520
Jeff Johnson295189b2012-06-20 16:38:30 -07002521 /* Store Init Req pointer, as this will be used for response */
2522 /* store Params pass it to WDI */
2523 pWdaParams->pWdaContext = pWDA;
2524 pWdaParams->wdaMsgParam = startScanParams;
2525 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002526 /* call DAL API to pass init scan request to DAL */
2527 status = WDI_StartScanReq(wdiStartScanParams,
2528 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002529 /* failure returned by WDI API */
2530 if(IS_WDI_STATUS_FAILURE(status))
2531 {
2532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2533 "Failure in Start Scan WDI API, free all the memory "
2534 "It should be due to previous abort scan." );
2535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2536 vos_mem_free(pWdaParams) ;
2537 startScanParams->status = eSIR_FAILURE ;
2538 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2539 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002540 return CONVERT_WDI2VOS_STATUS(status) ;
2541}
Jeff Johnson295189b2012-06-20 16:38:30 -07002542/*
2543 * FUNCTION: WDA_EndScanReqCallback
2544 * END SCAN callback
2545 */
2546void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2547{
2548 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2549 tWDA_CbContext *pWDA;
2550 tEndScanParams *endScanParam;
2551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002552 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002553 if(NULL == pWdaParams)
2554 {
2555 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002556 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002557 VOS_ASSERT(0) ;
2558 return ;
2559 }
2560 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2561 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002562 if(NULL == endScanParam)
2563 {
2564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002565 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002566 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002567 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2568 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002569 return ;
2570 }
2571
2572 /* Free WDI command buffer */
2573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2574 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002575 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002576 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002577 /* send response back to PE */
2578 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2579 return ;
2580}
2581
Jeff Johnson295189b2012-06-20 16:38:30 -07002582/*
2583 * FUNCTION: WDA_ProcessEndScanReq
2584 * Trigger END SCAN in WDI
2585 */
2586VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2587 tEndScanParams *endScanParams)
2588{
2589 WDI_Status status = WDI_STATUS_SUCCESS;
2590 WDI_EndScanReqParamsType *wdiEndScanParams =
2591 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2592 sizeof(WDI_EndScanReqParamsType)) ;
2593 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002595 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002596 if(NULL == wdiEndScanParams)
2597 {
2598 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002599 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002600 VOS_ASSERT(0);
2601 return VOS_STATUS_E_NOMEM;
2602 }
2603 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2604 if(NULL == pWdaParams)
2605 {
2606 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002607 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002608 VOS_ASSERT(0);
2609 vos_mem_free(wdiEndScanParams);
2610 return VOS_STATUS_E_NOMEM;
2611 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 /* Copy init Scan params to WDI structure */
2613 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2614 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002615 /* Store Init Req pointer, as this will be used for response */
2616 /* store Params pass it to WDI */
2617 pWdaParams->pWdaContext = pWDA;
2618 pWdaParams->wdaMsgParam = endScanParams;
2619 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002620 /* call DAL API to pass init scan request to DAL */
2621 status = WDI_EndScanReq(wdiEndScanParams,
2622 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002623 if(IS_WDI_STATUS_FAILURE(status))
2624 {
2625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2626 "Failure in End Scan WDI API, free all the memory "
2627 "It should be due to previous abort scan." );
2628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2629 vos_mem_free(pWdaParams) ;
2630 endScanParams->status = eSIR_FAILURE ;
2631 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2632 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002633 return CONVERT_WDI2VOS_STATUS(status) ;
2634}
Jeff Johnson295189b2012-06-20 16:38:30 -07002635/*
2636 * FUNCTION: WDA_FinishScanReqCallback
2637 * Trigger Finish SCAN callback
2638 */
2639void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2640{
2641 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2642 tWDA_CbContext *pWDA;
2643 tFinishScanParams *finishScanParam;
2644 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002645 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002646 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002647 if(NULL == pWdaParams)
2648 {
2649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002650 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002651 VOS_ASSERT(0) ;
2652 return ;
2653 }
2654
2655 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2656 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 if(NULL == finishScanParam)
2658 {
2659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002660 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002661 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2663 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002664 return ;
2665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2667 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 /*
2669 * Now Resume TX, if we reached here means, TX is already suspended, we
2670 * have to resume it unconditionaly
2671 */
2672 status = WDA_ResumeDataTx(pWDA) ;
2673
2674 if(VOS_STATUS_SUCCESS != status)
2675 {
2676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002677 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002679 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002680 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2681 return ;
2682}
Jeff Johnson295189b2012-06-20 16:38:30 -07002683/*
2684 * FUNCTION: WDA_ProcessFinshScanReq
2685 * Trigger Finish SCAN in WDI
2686 */
2687VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2688 tFinishScanParams *finishScanParams)
2689{
2690 WDI_Status status = WDI_STATUS_SUCCESS;
2691 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2692 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2693 sizeof(WDI_FinishScanReqParamsType)) ;
2694 tWDA_ReqParams *pWdaParams ;
2695 tANI_U8 i = 0;
2696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002697 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002698 if(NULL == wdiFinishScanParams)
2699 {
2700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002701 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002702 VOS_ASSERT(0);
2703 return VOS_STATUS_E_NOMEM;
2704 }
2705 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2706 if(NULL == pWdaParams)
2707 {
2708 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002709 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002710 VOS_ASSERT(0);
2711 vos_mem_free(wdiFinishScanParams);
2712 return VOS_STATUS_E_NOMEM;
2713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002714 /* Copy init Scan params to WDI structure */
2715 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2716 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2717 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002718 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2719 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2720 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2721 finishScanParams->frameLength ;
2722 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2723 finishScanParams->currentOperChannel ;
2724 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2725 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2726 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002727 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2728 {
2729 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2730 finishScanParams->scanEntry.bssIdx[i] ;
2731 }
2732
2733
Jeff Johnson295189b2012-06-20 16:38:30 -07002734 /* if Frame length, copy macMgmtHdr ro WDI structure */
2735 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2736 {
2737 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2738 &finishScanParams->macMgmtHdr,
2739 sizeof(WDI_MacMgmtHdr)) ;
2740 }
2741 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 /* Store Init Req pointer, as this will be used for response */
2743 /* store Params pass it to WDI */
2744 pWdaParams->pWdaContext = pWDA;
2745 pWdaParams->wdaMsgParam = finishScanParams;
2746 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002747 /* call DAL API to pass init scan request to DAL */
2748 status = WDI_FinishScanReq(wdiFinishScanParams,
2749 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002750
Jeff Johnson295189b2012-06-20 16:38:30 -07002751
2752 /*
2753 * WDI API returns failure..
2754 */
2755 if(IS_WDI_STATUS_FAILURE( status))
2756 {
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2758 "Failure in Finish Scan WDI API, free all the memory " );
2759 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2760 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002761 finishScanParams->status = eSIR_FAILURE ;
2762 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2763 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 return CONVERT_WDI2VOS_STATUS(status) ;
2765}
Jeff Johnson295189b2012-06-20 16:38:30 -07002766/*---------------------------------------------------------------------
2767 * ASSOC API's
2768 *---------------------------------------------------------------------
2769 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002770/*
2771 * FUNCTION: WDA_JoinReqCallback
2772 * Trigger Init SCAN callback
2773 */
2774void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2775{
2776 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2777 tWDA_CbContext *pWDA;
2778 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002780 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002781 if(NULL == pWdaParams)
2782 {
2783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002784 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002785 VOS_ASSERT(0) ;
2786 return ;
2787 }
2788 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2789 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002790 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2791 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002792 /* reset macBSSID */
2793 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002794 /* reset macSTASelf */
2795 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002796 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002797 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 return ;
2799}
Jeff Johnson295189b2012-06-20 16:38:30 -07002800/*
2801 * FUNCTION: WDA_ProcessJoinReq
2802 * Trigger Join REQ in WDI
2803 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002804VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
2805 tSwitchChannelParams* joinReqParam)
2806{
2807 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002808 WDI_JoinReqParamsType *wdiJoinReqParam =
2809 (WDI_JoinReqParamsType *)vos_mem_malloc(
2810 sizeof(WDI_JoinReqParamsType)) ;
2811 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002812 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002813 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 if(NULL == wdiJoinReqParam)
2815 {
2816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002817 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002818 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002819 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002820 return VOS_STATUS_E_NOMEM;
2821 }
2822 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2823 if(NULL == pWdaParams)
2824 {
2825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002826 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002827 VOS_ASSERT(0);
2828 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002829 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002830 return VOS_STATUS_E_NOMEM;
2831 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002832
2833 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
2834 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
2835 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
2836 {
2837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
2838 "%s: received join request when BSSID or self-STA is NULL "
2839 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002840 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07002841 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
2842 VOS_ASSERT(0);
2843 vos_mem_free(wdiJoinReqParam);
2844 vos_mem_free(pWdaParams);
2845 joinReqParam->status = eSIR_FAILURE ;
2846 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2847 return VOS_STATUS_E_INVAL;
2848 }
2849
Jeff Johnson295189b2012-06-20 16:38:30 -07002850 /* copy the BSSID for pWDA */
2851 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
2852 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
2854 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002855 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
2856 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07002857#ifdef WLAN_FEATURE_VOWIFI
2858 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
2859 joinReqParam->maxTxPower ;
2860#else
Jeff Johnson295189b2012-06-20 16:38:30 -07002861 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
2862 joinReqParam->localPowerConstraint ;
2863#endif
2864 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
2865 joinReqParam->secondaryChannelOffset ;
2866 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
2867
2868 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002869 /* Store Init Req pointer, as this will be used for response */
2870 /* store Params pass it to WDI */
2871 pWdaParams->pWdaContext = pWDA;
2872 pWdaParams->wdaMsgParam = joinReqParam;
2873 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002874 status = WDI_JoinReq(wdiJoinReqParam,
2875 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002876 if(IS_WDI_STATUS_FAILURE(status))
2877 {
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2879 "Failure in Join WDI API, free all the memory " );
2880 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2881 vos_mem_free(pWdaParams) ;
2882 joinReqParam->status = eSIR_FAILURE ;
2883 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
2884 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002885 return CONVERT_WDI2VOS_STATUS(status) ;
2886}
Jeff Johnson295189b2012-06-20 16:38:30 -07002887/*
2888 * FUNCTION: WDA_SwitchChannelReqCallback
2889 * send Switch channel RSP back to PE
2890 */
2891void WDA_SwitchChannelReqCallback(
2892 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
2893{
2894 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
2895 tWDA_CbContext *pWDA;
2896 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002898 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002899 if(NULL == pWdaParams)
2900 {
2901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002902 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002903 VOS_ASSERT(0) ;
2904 return ;
2905 }
2906 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2907 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
2908
2909#ifdef WLAN_FEATURE_VOWIFI
2910 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
2911#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2913 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002914 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002915 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002917 return ;
2918}
Jeff Johnson295189b2012-06-20 16:38:30 -07002919/*
2920 * FUNCTION: WDA_ProcessChannelSwitchReq
2921 * Request to WDI to switch channel REQ params.
2922 */
2923VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
2924 tSwitchChannelParams *pSwitchChanParams)
2925{
2926 WDI_Status status = WDI_STATUS_SUCCESS ;
2927 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
2928 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
2929 sizeof(WDI_SwitchChReqParamsType)) ;
2930 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002932 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002933 if(NULL == wdiSwitchChanParam)
2934 {
2935 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002936 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002937 VOS_ASSERT(0);
2938 return VOS_STATUS_E_NOMEM;
2939 }
2940 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2941 if(NULL == pWdaParams)
2942 {
2943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002944 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002945 VOS_ASSERT(0);
2946 vos_mem_free(wdiSwitchChanParam);
2947 return VOS_STATUS_E_NOMEM;
2948 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
2950#ifndef WLAN_FEATURE_VOWIFI
2951 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
2952 pSwitchChanParams->localPowerConstraint;
2953#endif
2954 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
2955 pSwitchChanParams->secondaryChannelOffset;
2956 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002957 /* Store req pointer, as this will be used for response */
2958 /* store Params pass it to WDI */
2959 pWdaParams->pWdaContext = pWDA;
2960 pWdaParams->wdaMsgParam = pSwitchChanParams;
2961 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002962#ifdef WLAN_FEATURE_VOWIFI
2963 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
2964 = pSwitchChanParams->maxTxPower;
2965 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
2966 pSwitchChanParams ->selfStaMacAddr,
2967 sizeof(tSirMacAddr));
2968#endif
2969 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
2970 pSwitchChanParams->bssId,
2971 sizeof(tSirMacAddr));
2972
2973 status = WDI_SwitchChReq(wdiSwitchChanParam,
2974 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002975 if(IS_WDI_STATUS_FAILURE(status))
2976 {
2977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2978 "Failure in process channel switch Req WDI API, free all the memory " );
2979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2980 vos_mem_free(pWdaParams) ;
2981 pSwitchChanParams->status = eSIR_FAILURE ;
2982 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
2983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002984 return CONVERT_WDI2VOS_STATUS(status) ;
2985}
Jeff Johnson295189b2012-06-20 16:38:30 -07002986/*
2987 * FUNCTION: WDA_ConfigBssReqCallback
2988 * config BSS Req Callback, called by WDI
2989 */
2990void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
2991 ,void* pUserData)
2992{
2993 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2994 tWDA_CbContext *pWDA;
2995 tAddBssParams *configBssReqParam;
2996 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002998 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 if(NULL == pWdaParams)
3000 {
3001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003002 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003003 VOS_ASSERT(0) ;
3004 return ;
3005 }
3006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3007 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3008 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003009 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003010 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003011 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3012 {
3013 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3014 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003015 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3016 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3017 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3018
3019 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3020 {
3021 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3022 {
3023 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3024 staConfigBssParam->staType = STA_ENTRY_BSSID;
3025 }
3026 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3027 (staConfigBssParam->staType == STA_ENTRY_SELF))
3028 {
3029 /* This is the 1st add BSS Req for the BTAMP STA */
3030 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3031 staConfigBssParam->staType = STA_ENTRY_BSSID;
3032 }
3033 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3034 (staConfigBssParam->staType == STA_ENTRY_PEER))
3035 {
3036 /* This is the 2nd ADD BSS Request that is sent
3037 * on the BTAMP STA side. The Sta type is
3038 * set to STA_ENTRY_PEER here.*/
3039 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3040 }
3041 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3042 (staConfigBssParam->staType == STA_ENTRY_SELF))
3043 {
3044 /* statype is already set by PE.
3045 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3046 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3047 staConfigBssParam->staType = STA_ENTRY_BSSID;
3048 }
3049 else
3050 {
3051 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3052 staConfigBssParam->staType = STA_ENTRY_PEER;
3053 }
3054 }
3055 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3056 {
3057 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3058 staConfigBssParam->staType = STA_ENTRY_SELF;
3059 }
3060 else
3061 {
3062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3063 "Invalid operation mode specified");
3064 VOS_ASSERT(0);
3065 }
3066
3067 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003068 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003069 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003070 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3072 sizeof(tSirMacAddr));
3073 staConfigBssParam->txChannelWidthSet =
3074 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003075 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3076 staConfigBssParam->htCapable)
3077 {
3078 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3079 wdiConfigBssRsp->ucBSSIdx;
3080 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3081 WDA_VALID_STA_INDEX ;
3082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003083 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3084 wdiConfigBssRsp->ucBSSIdx,
3085 wdiConfigBssRsp->ucSTAIdx))
3086 {
3087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003088 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003089 VOS_ASSERT(0) ;
3090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003091 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3092 {
3093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003094 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003095 VOS_ASSERT(0) ;
3096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003097#ifdef WLAN_FEATURE_VOWIFI
3098 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3099#endif
3100 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3102 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003103 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003104 return ;
3105}
Jeff Johnson295189b2012-06-20 16:38:30 -07003106/*
3107 * FUNCTION: WDA_UpdateEdcaParamsForAC
3108 * Update WDI EDCA params with PE edca params
3109 */
3110void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3111 WDI_EdcaParamRecord *wdiEdcaParam,
3112 tSirMacEdcaParamRecord *macEdcaParam)
3113{
3114 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3115 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3116 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3117 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3118 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3119 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3120}
Jeff Johnson295189b2012-06-20 16:38:30 -07003121/*
3122 * FUNCTION: WDA_ProcessConfigBssReq
3123 * Configure BSS before starting Assoc with AP
3124 */
3125VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3126 tAddBssParams* configBssReqParam)
3127{
3128 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303129 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003130 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003132 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303133 if (NULL == configBssReqParam)
3134 {
3135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3136 "%s: configBssReqParam is NULL", __func__);
3137 return VOS_STATUS_E_INVAL;
3138 }
3139
3140 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3141 sizeof(WDI_ConfigBSSReqParamsType)) ;
3142
Jeff Johnson295189b2012-06-20 16:38:30 -07003143 if(NULL == wdiConfigBssReqParam)
3144 {
3145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003146 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003147 VOS_ASSERT(0);
3148 return VOS_STATUS_E_NOMEM;
3149 }
3150 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3151 if(NULL == pWdaParams)
3152 {
3153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003154 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003155 VOS_ASSERT(0);
3156 vos_mem_free(wdiConfigBssReqParam);
3157 return VOS_STATUS_E_NOMEM;
3158 }
Kiran4a17ebe2013-01-31 10:43:43 -08003159 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3160 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003161 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003162 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3163 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164 /* Store Init Req pointer, as this will be used for response */
3165 /* store Params pass it to WDI */
3166 pWdaParams->pWdaContext = pWDA;
3167 pWdaParams->wdaMsgParam = configBssReqParam;
3168 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003169 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3170 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003171 if(IS_WDI_STATUS_FAILURE(status))
3172 {
3173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3174 "Failure in Config BSS WDI API, free all the memory " );
3175 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3176 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003178 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3179 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003180 return CONVERT_WDI2VOS_STATUS(status) ;
3181}
Jeff Johnson295189b2012-06-20 16:38:30 -07003182#ifdef ENABLE_HAL_COMBINED_MESSAGES
3183/*
3184 * FUNCTION: WDA_PostAssocReqCallback
3185 * Post ASSOC req callback, send RSP back to PE
3186 */
3187void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3188 void* pUserData)
3189{
3190 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3191 tPostAssocParams *postAssocReqParam =
3192 (tPostAssocParams *)pWDA->wdaMsgParam ;
3193 /*STA context within the BSS Params*/
3194 tAddStaParams *staPostAssocParam =
3195 &postAssocReqParam->addBssParams.staContext ;
3196 /*STA Params for self STA*/
3197 tAddStaParams *selfStaPostAssocParam =
3198 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003200 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003201 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003202 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003203 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3204 {
3205 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3206 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3207 sizeof(tSirMacAddr)) ;
3208 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3209 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3210 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003211 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3212 }
3213 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3214 pWDA->wdaWdiApiMsgParam = NULL;
3215 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003216 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003217 return ;
3218}
Jeff Johnson295189b2012-06-20 16:38:30 -07003219/*
3220 * FUNCTION: WDA_ProcessPostAssocReq
3221 * Trigger POST ASSOC processing in WDI
3222 */
3223VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3224 tPostAssocParams *postAssocReqParam)
3225{
Jeff Johnson295189b2012-06-20 16:38:30 -07003226 WDI_Status status = WDI_STATUS_SUCCESS ;
3227
3228 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3229 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3230 sizeof(WDI_PostAssocReqParamsType)) ;
3231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003232 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003233
Jeff Johnson295189b2012-06-20 16:38:30 -07003234 if(NULL == wdiPostAssocReqParam)
3235 {
3236 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003237 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003238 VOS_ASSERT(0);
3239 return VOS_STATUS_E_NOMEM;
3240 }
3241
3242 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003245 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_FAILURE;
3248 }
3249
Jeff Johnson295189b2012-06-20 16:38:30 -07003250 /* update BSS params into WDI structure */
3251 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3252 &postAssocReqParam->addBssParams) ;
3253 /* update STA params into WDI structure */
3254 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3255 &postAssocReqParam->addStaParams) ;
3256
3257 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3258 postAssocReqParam->addBssParams.highPerformance;
3259 WDA_UpdateEdcaParamsForAC(pWDA,
3260 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3261 &postAssocReqParam->addBssParams.acbe);
3262 WDA_UpdateEdcaParamsForAC(pWDA,
3263 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3264 &postAssocReqParam->addBssParams.acbk);
3265 WDA_UpdateEdcaParamsForAC(pWDA,
3266 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3267 &postAssocReqParam->addBssParams.acvi);
3268 WDA_UpdateEdcaParamsForAC(pWDA,
3269 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3270 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003271 /* Store Init Req pointer, as this will be used for response */
3272 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003273 /* store Params pass it to WDI */
3274 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003275 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3276 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003277 if(IS_WDI_STATUS_FAILURE(status))
3278 {
3279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3280 "Failure in Post Assoc WDI API, free all the memory " );
3281 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3282 pWDA->wdaWdiApiMsgParam = NULL;
3283 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003284 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003285 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3286 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003287 return CONVERT_WDI2VOS_STATUS(status) ;
3288}
3289#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003290/*
3291 * FUNCTION: WDA_AddStaReqCallback
3292 * ADD STA req callback, send RSP back to PE
3293 */
3294void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3295 void* pUserData)
3296{
3297 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3298 tWDA_CbContext *pWDA;
3299 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003300 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 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003305 VOS_ASSERT(0) ;
3306 return ;
3307 }
3308 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3309 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003310 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003311 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003312 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3313 {
3314 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3315 /*TODO: UMAC structure doesn't have these fields*/
3316 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3317 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3318 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3319 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3320 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3321 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003322#ifdef FEATURE_WLAN_TDLS
3323 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3324 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3325#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003327#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 {
3329 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3330 wdiConfigStaRsp->ucBssIdx;
3331 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3332 WDA_VALID_STA_INDEX ;
3333 }
3334 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3335 {
3336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003337 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003338 VOS_ASSERT(0) ;
3339 return ;
3340 }
3341 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003342 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3343 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003344 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003345 return ;
3346}
Jeff Johnson295189b2012-06-20 16:38:30 -07003347/*
3348 * FUNCTION: WDA_ConfigStaReq
3349 * Trigger Config STA processing in WDI
3350 */
3351VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3352 tAddStaParams *addStaReqParam)
3353{
Jeff Johnson295189b2012-06-20 16:38:30 -07003354 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003355 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3356 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3357 sizeof(WDI_ConfigSTAReqParamsType)) ;
3358 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003360 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003361 if(NULL == wdiConfigStaReqParam)
3362 {
3363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003364 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003365 VOS_ASSERT(0);
3366 return VOS_STATUS_E_NOMEM;
3367 }
3368 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3369 if(NULL == pWdaParams)
3370 {
3371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003372 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003373 VOS_ASSERT(0);
3374 vos_mem_free(wdiConfigStaReqParam);
3375 return VOS_STATUS_E_NOMEM;
3376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003377 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003378 /* update STA params into WDI structure */
3379 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3380 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003381 /* Store Init Req pointer, as this will be used for response */
3382 /* store Params pass it to WDI */
3383 pWdaParams->pWdaContext = pWDA;
3384 pWdaParams->wdaMsgParam = addStaReqParam;
3385 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3387 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 if(IS_WDI_STATUS_FAILURE(status))
3389 {
3390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3391 "Failure in Config STA WDI API, free all the memory " );
3392 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3393 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003394 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003395 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3396 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003397 return CONVERT_WDI2VOS_STATUS(status) ;
3398}
Jeff Johnson295189b2012-06-20 16:38:30 -07003399/*
3400 * FUNCTION: WDA_DelBSSReqCallback
3401 * Dens DEL BSS RSP back to PE
3402 */
3403void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3404 void* pUserData)
3405{
3406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3407 tWDA_CbContext *pWDA;
3408 tDeleteBssParams *delBssReqParam;
3409 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 if(NULL == pWdaParams)
3413 {
3414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003415 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003416 VOS_ASSERT(0) ;
3417 return ;
3418 }
3419 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3420 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003421 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003422 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3423 {
3424 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3425 sizeof(tSirMacAddr)) ;
3426 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003427 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3428 {
3429 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003430 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003431 VOS_ASSERT(0) ;
3432 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003433 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3434 {
3435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003436 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003437 VOS_ASSERT(0) ;
3438 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003439 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3440 {
3441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003442 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003443 VOS_ASSERT(0) ;
3444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003445 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3446 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 /* reset the the system role*/
3448 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3449
3450 /* Reset the BA related information */
3451 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3452 {
3453 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3454 {
3455 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3456 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3457 /* Reset framesTxed counters here */
3458 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3459 {
3460 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3461 }
3462 }
3463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003465 return ;
3466}
3467
Jeff Johnson295189b2012-06-20 16:38:30 -07003468/*
3469 * FUNCTION: WDA_ProcessDelBssReq
3470 * Init DEL BSS req with WDI
3471 */
3472VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3473 tDeleteBssParams *delBssParam)
3474{
3475 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003476 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3477 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3478 sizeof(WDI_DelBSSReqParamsType)) ;
3479 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003480 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003481 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003482 if(NULL == wdiDelBssReqParam)
3483 {
3484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003485 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 VOS_ASSERT(0);
3487 return VOS_STATUS_E_NOMEM;
3488 }
3489 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3490 if(NULL == pWdaParams)
3491 {
3492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003493 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 VOS_ASSERT(0);
3495 vos_mem_free(wdiDelBssReqParam);
3496 return VOS_STATUS_E_NOMEM;
3497 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003498 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3499 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3500
3501 /* Store Init Req pointer, as this will be used for response */
3502 /* store Params pass it to WDI */
3503 pWdaParams->pWdaContext = pWDA;
3504 pWdaParams->wdaMsgParam = delBssParam;
3505 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003506 status = WDI_DelBSSReq(wdiDelBssReqParam,
3507 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003508 if(IS_WDI_STATUS_FAILURE(status))
3509 {
3510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3511 "Failure in Del BSS WDI API, free all the memory " );
3512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3513 vos_mem_free(pWdaParams) ;
3514 delBssParam->status = eSIR_FAILURE ;
3515 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3516 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003517 return CONVERT_WDI2VOS_STATUS(status) ;
3518}
Jeff Johnson295189b2012-06-20 16:38:30 -07003519/*
3520 * FUNCTION: WDA_DelSTAReqCallback
3521 * Dens DEL STA RSP back to PE
3522 */
3523void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3524 void* pUserData)
3525{
3526 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3527 tWDA_CbContext *pWDA;
3528 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003529 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003530 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003531 if(NULL == pWdaParams)
3532 {
3533 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003534 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003535 VOS_ASSERT(0) ;
3536 return ;
3537 }
3538 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3539 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003540 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003541 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3542 {
3543 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3544 {
3545 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003546 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003547 VOS_ASSERT(0) ;
3548 }
3549 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3550 }
3551 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3552 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003553 /*Reset the BA information corresponding to this STAIdx */
3554 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3555 WDA_INVALID_STA_INDEX;
3556 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3557
3558 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003559 return ;
3560}
Jeff Johnson295189b2012-06-20 16:38:30 -07003561/*
3562 * FUNCTION: WDA_ProcessDelStaReq
3563 * Init DEL STA req with WDI
3564 */
3565VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3566 tDeleteStaParams *delStaParam)
3567{
3568 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003569 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3570 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3571 sizeof(WDI_DelSTAReqParamsType)) ;
3572 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003574 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003575 if(NULL == wdiDelStaReqParam)
3576 {
3577 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003578 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003579 VOS_ASSERT(0);
3580 return VOS_STATUS_E_NOMEM;
3581 }
3582 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3583 if(NULL == pWdaParams)
3584 {
3585 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003586 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003587 VOS_ASSERT(0);
3588 vos_mem_free(wdiDelStaReqParam);
3589 return VOS_STATUS_E_NOMEM;
3590 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003591 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3592 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003593 /* Store Init Req pointer, as this will be used for response */
3594 /* store Params pass it to WDI */
3595 pWdaParams->pWdaContext = pWDA;
3596 pWdaParams->wdaMsgParam = delStaParam;
3597 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003598 status = WDI_DelSTAReq(wdiDelStaReqParam,
3599 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003600 if(IS_WDI_STATUS_FAILURE(status))
3601 {
3602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3603 "Failure in Del STA WDI API, free all the memory status = %d",
3604 status );
3605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3606 vos_mem_free(pWdaParams) ;
3607 delStaParam->status = eSIR_FAILURE ;
3608 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3609 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003610 return CONVERT_WDI2VOS_STATUS(status) ;
3611}
Jeff Johnson295189b2012-06-20 16:38:30 -07003612void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3613{
3614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3615 tWDA_CbContext *pWDA;
3616 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3617 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003618 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003619 if(NULL == pWdaParams)
3620 {
3621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003622 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003623 VOS_ASSERT(0) ;
3624 return ;
3625 }
3626 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3627 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003628 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3629 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003630 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3631 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3632 pwdiAddSTASelfRsp->macSelfSta,
3633 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003634 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003635 return ;
3636}
Jeff Johnson295189b2012-06-20 16:38:30 -07003637/*
3638 * FUNCTION: WDA_ProcessAddStaSelfReq
3639 *
3640 */
3641VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3642{
3643 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003644 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3646 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3647 sizeof(WDI_AddSTASelfReqParamsType)) ;
3648 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003650 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003651 if( NULL == wdiAddStaSelfReq )
3652 {
3653 VOS_ASSERT( 0 );
3654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003655 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003656 return( VOS_STATUS_E_NOMEM );
3657 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003658 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 if( NULL == pWdaParams )
3660 {
3661 VOS_ASSERT( 0 );
3662 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003663 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003664 vos_mem_free(wdiAddStaSelfReq) ;
3665 return( VOS_STATUS_E_NOMEM );
3666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003667 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003668 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003669 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003670 /* Store Init Req pointer, as this will be used for response */
3671 /* store Params pass it to WDI */
3672 pWdaParams->pWdaContext = pWDA;
3673 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3674 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003675 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003676
Jeff Johnson43971f52012-07-17 12:26:56 -07003677 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 {
3679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3680 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003681 wstatus );
3682 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003683 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3684 vos_mem_free(pWdaParams) ;
3685 pAddStaSelfReq->status = eSIR_FAILURE ;
3686 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
3687 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003688 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003689}
Jeff Johnson295189b2012-06-20 16:38:30 -07003690/*
3691 * FUNCTION: WDA_DelSTASelfRespCallback
3692 *
3693 */
3694void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
3695 wdiDelStaSelfRspParams , void* pUserData)
3696{
3697 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3698 tWDA_CbContext *pWDA;
3699 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003701 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003702 if (NULL == pWdaParams)
3703 {
3704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003705 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003706 VOS_ASSERT(0);
3707 return;
3708 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003709 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3710 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003712 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003713
3714 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3715 vos_mem_free(pWdaParams) ;
3716
3717 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003718 return ;
3719}
Jeff Johnson295189b2012-06-20 16:38:30 -07003720/*
3721 * FUNCTION: WDA_DelSTASelfReqCallback
3722 *
3723 */
3724void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
3725 void* pUserData)
3726{
3727 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3728 tWDA_CbContext *pWDA;
3729 tDelStaSelfParams *delStaSelfParams;
3730
3731 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05303732 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003733 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003734
3735 if (NULL == pWdaParams)
3736 {
3737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003738 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 VOS_ASSERT(0);
3740 return;
3741 }
3742
3743 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3744 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
3745
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003746 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003747
3748 if(IS_WDI_STATUS_FAILURE(wdiStatus))
3749 {
3750 VOS_ASSERT(0);
3751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3752 vos_mem_free(pWdaParams) ;
3753 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
3754 }
3755
3756 return ;
3757}
3758
3759/*
3760 * FUNCTION: WDA_DelSTASelfReq
3761 * Trigger Config STA processing in WDI
3762 */
3763VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
3764 tDelStaSelfParams* pDelStaSelfReqParam)
3765{
3766 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003767 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003768 tWDA_ReqParams *pWdaParams = NULL;
3769 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
3770 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
3771 sizeof(WDI_DelSTASelfReqParamsType)) ;
3772
Jeff Johnson295189b2012-06-20 16:38:30 -07003773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003774 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003775 if( NULL == wdiDelStaSelfReq )
3776 {
3777 VOS_ASSERT( 0 );
3778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003779 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003780 return( VOS_STATUS_E_NOMEM );
3781 }
3782
3783 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3784 if( NULL == pWdaParams )
3785 {
3786 VOS_ASSERT( 0 );
3787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003788 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003789 vos_mem_free(wdiDelStaSelfReq) ;
3790 return( VOS_STATUS_E_NOMEM );
3791 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003792 pWdaParams->pWdaContext = pWDA;
3793 /* Store param pointer as passed in by caller */
3794 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
3795 /* store Params pass it to WDI */
3796 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
3798 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
3799
3800 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
3801 wdiDelStaSelfReq->pUserData = pWdaParams;
3802
Jeff Johnson43971f52012-07-17 12:26:56 -07003803 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07003804 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
3805
Jeff Johnson43971f52012-07-17 12:26:56 -07003806 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003807 {
3808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3809 "Failure in Del Sta Self REQ WDI API, free all the memory " );
3810 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07003811 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07003812 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3813 vos_mem_free(pWdaParams) ;
3814 pDelStaSelfReqParam->status = eSIR_FAILURE ;
3815 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
3816 }
Jeff Johnson43971f52012-07-17 12:26:56 -07003817 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07003818}
3819
Jeff Johnson295189b2012-06-20 16:38:30 -07003820/*
3821 * FUNCTION: WDA_SendMsg
3822 * Send Message back to PE
3823 */
3824void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
3825 void *pBodyptr, tANI_U32 bodyVal)
3826{
3827 tSirMsgQ msg = {0} ;
3828 tANI_U32 status = VOS_STATUS_SUCCESS ;
3829 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07003830 msg.type = msgType;
3831 msg.bodyval = bodyVal;
3832 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07003833 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 if (VOS_STATUS_SUCCESS != status)
3835 {
3836 if(NULL != pBodyptr)
3837 {
3838 vos_mem_free(pBodyptr);
3839 }
3840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003841 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003842 VOS_ASSERT(0) ;
3843 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003844 return ;
3845}
Jeff Johnson295189b2012-06-20 16:38:30 -07003846/*
3847 * FUNCTION: WDA_UpdateBSSParams
3848 * Translated WDA/PE BSS info into WDI BSS info..
3849 */
3850void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
3851 WDI_ConfigBSSReqInfoType *wdiBssParams,
3852 tAddBssParams *wdaBssParams)
3853{
3854 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07003855 /* copy bssReq Params to WDI structure */
3856 vos_mem_copy(wdiBssParams->macBSSID,
3857 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
3858 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
3859 sizeof(tSirMacAddr)) ;
3860 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
3861 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
3862 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003863 wdiBssParams->ucShortSlotTimeSupported =
3864 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003865 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
3866 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
3867 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
3868 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
3869 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
3870
3871 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
3872 wdiBssParams->ucTXOPProtectionFullSupport =
3873 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003874 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
3875 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003877 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
3878 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
3879 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
3880 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
3881
Chet Lanctot186b5732013-03-18 10:26:30 -07003882 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
3883
Jeff Johnson295189b2012-06-20 16:38:30 -07003884 /* copy SSID into WDI structure */
3885 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
3886 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
3887 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003888 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
3889 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07003891#ifdef WLAN_FEATURE_VOWIFI
3892 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
3893#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003894 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07003895 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07003896#ifdef WLAN_FEATURE_VOWIFI_11R
3897 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003898 if(wdiBssParams->bExtSetStaKeyParamValid)
3899 {
3900 /* copy set STA key params to WDI structure */
3901 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
3902 wdaBssParams->extSetStaKeyParam.staIdx;
3903 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
3904 wdaBssParams->extSetStaKeyParam.encType;
3905 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
3906 wdaBssParams->extSetStaKeyParam.wepType;
3907 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
3908 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003909 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
3910 {
Jeff Johnson43971f52012-07-17 12:26:56 -07003911 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07003912 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
3913 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
3914 {
3915 WDA_GetWepKeysFromCfg( pWDA,
3916 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
3917 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
3918 wdiBssParams->wdiExtSetKeyParam.wdiKey );
3919 }
3920 else
3921 {
Jeff Johnson295189b2012-06-20 16:38:30 -07003922 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
3923 keyIndex++)
3924 {
3925 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
3926 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
3927 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
3928 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
3929 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
3930 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07003931 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
3932 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
3933 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
3934 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
3935 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
3936 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
3937 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
3938 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
3939 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
3941 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07003942 }
3943 }
3944 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
3945 }
3946 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
3947 {
3948 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
3949 sizeof(wdaBssParams->extSetStaKeyParam) );
3950 }
3951#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07003952#ifdef WLAN_FEATURE_11AC
3953 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
3954 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
3955#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003956
3957 return ;
3958}
Jeff Johnson295189b2012-06-20 16:38:30 -07003959/*
3960 * FUNCTION: WDA_UpdateSTAParams
3961 * Translated WDA/PE BSS info into WDI BSS info..
3962 */
3963void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
3964 WDI_ConfigStaReqInfoType *wdiStaParams,
3965 tAddStaParams *wdaStaParams)
3966{
3967 tANI_U8 i = 0;
3968 /* Update STA params */
3969 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
3970 sizeof(tSirMacAddr)) ;
3971 wdiStaParams->usAssocId = wdaStaParams->assocId;
3972 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07003973 wdiStaParams->staIdx = wdaStaParams->staIdx;
3974
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 wdiStaParams->ucShortPreambleSupported =
3976 wdaStaParams->shortPreambleSupported;
3977 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
3978 sizeof(tSirMacAddr)) ;
3979 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
3980
3981 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
3982
3983 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
3984 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
3985 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
3986 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
3987 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
3988 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
3989 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
3990
3991 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
3992 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07003993 wdiStaParams->wdiSupportedRates.opRateMode =
3994 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 for(i = 0;i < WDI_NUM_11B_RATES;i++)
3996 {
3997 wdiStaParams->wdiSupportedRates.llbRates[i] =
3998 wdaStaParams->supportedRates.llbRates[i];
3999 }
4000 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4001 {
4002 wdiStaParams->wdiSupportedRates.llaRates[i] =
4003 wdaStaParams->supportedRates.llaRates[i];
4004 }
4005 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4006 {
4007 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4008 wdaStaParams->supportedRates.aniLegacyRates[i];
4009 }
4010 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4011 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004012#ifdef WLAN_FEATURE_11AC
4013 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4014 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4015 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4016 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4017#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004018 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4019 {
4020 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4021 wdaStaParams->supportedRates.supportedMCSSet[i];
4022 }
4023 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4024 wdaStaParams->supportedRates.rxHighestDataRate;
4025
4026 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4027
4028 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4029
4030 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4031 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4032 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4033
4034 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4035 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4036 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4037 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004038 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004039#ifdef WLAN_FEATURE_11AC
4040 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4041 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004042 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004043#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004044 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4045 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004046 return ;
4047}
Jeff Johnson295189b2012-06-20 16:38:30 -07004048/*
4049 * -------------------------------------------------------------------------
4050 * CFG update to WDI
4051 * -------------------------------------------------------------------------
4052 */
4053
4054 /*
4055 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4056 * Convert the WNI CFG ID to HAL CFG ID
4057 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004058static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004059{
4060 switch(wniCfgId)
4061 {
4062 case WNI_CFG_STA_ID:
4063 return QWLAN_HAL_CFG_STA_ID;
4064 case WNI_CFG_CURRENT_TX_ANTENNA:
4065 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4066 case WNI_CFG_CURRENT_RX_ANTENNA:
4067 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4068 case WNI_CFG_LOW_GAIN_OVERRIDE:
4069 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4070 case WNI_CFG_POWER_STATE_PER_CHAIN:
4071 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4072 case WNI_CFG_CAL_PERIOD:
4073 return QWLAN_HAL_CFG_CAL_PERIOD;
4074 case WNI_CFG_CAL_CONTROL:
4075 return QWLAN_HAL_CFG_CAL_CONTROL;
4076 case WNI_CFG_PROXIMITY:
4077 return QWLAN_HAL_CFG_PROXIMITY;
4078 case WNI_CFG_NETWORK_DENSITY:
4079 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4080 case WNI_CFG_MAX_MEDIUM_TIME:
4081 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4082 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4083 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4084 case WNI_CFG_RTS_THRESHOLD:
4085 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4086 case WNI_CFG_SHORT_RETRY_LIMIT:
4087 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4088 case WNI_CFG_LONG_RETRY_LIMIT:
4089 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4090 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4091 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4092 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4093 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4094 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4095 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4096 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4097 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4098 case WNI_CFG_FIXED_RATE:
4099 return QWLAN_HAL_CFG_FIXED_RATE;
4100 case WNI_CFG_RETRYRATE_POLICY:
4101 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4102 case WNI_CFG_RETRYRATE_SECONDARY:
4103 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4104 case WNI_CFG_RETRYRATE_TERTIARY:
4105 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4106 case WNI_CFG_FORCE_POLICY_PROTECTION:
4107 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4108 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4109 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4110 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4111 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4112 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4113 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4114 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4115 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4116 case WNI_CFG_MAX_BA_SESSIONS:
4117 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4118 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4119 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4120 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4121 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4122 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4123 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4124 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4125 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4126 case WNI_CFG_STATS_PERIOD:
4127 return QWLAN_HAL_CFG_STATS_PERIOD;
4128 case WNI_CFG_CFP_MAX_DURATION:
4129 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4130#if 0 /*This is not part of CFG*/
4131 case WNI_CFG_FRAME_TRANS_ENABLED:
4132 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4133#endif
4134 case WNI_CFG_DTIM_PERIOD:
4135 return QWLAN_HAL_CFG_DTIM_PERIOD;
4136 case WNI_CFG_EDCA_WME_ACBK:
4137 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4138 case WNI_CFG_EDCA_WME_ACBE:
4139 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4140 case WNI_CFG_EDCA_WME_ACVI:
4141 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4142 case WNI_CFG_EDCA_WME_ACVO:
4143 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4144#if 0
4145 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4146 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4147 case WNI_CFG_TELE_BCN_TRANS_LI:
4148 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4149 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4150 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4151 case WNI_CFG_TELE_BCN_MAX_LI:
4152 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4153 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4154 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4155#endif
4156 case WNI_CFG_ENABLE_CLOSE_LOOP:
4157 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004158 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4159 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004160 default:
4161 {
4162 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004163 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004164 wniCfgId);
4165 return VOS_STATUS_E_INVAL;
4166 }
4167 }
4168}
Jeff Johnson295189b2012-06-20 16:38:30 -07004169/*
4170 * FUNCTION: WDA_UpdateCfgCallback
4171 *
4172 */
4173void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4174{
4175 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4176 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4177 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004179 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 /*
4181 * currently there is no response message is expected between PE and
4182 * WDA, Failure return from WDI is a ASSERT condition
4183 */
4184 if(WDI_STATUS_SUCCESS != wdiStatus)
4185 {
4186 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004187 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004188 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4189 }
4190
4191 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4192 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4193 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 return ;
4195}
Jeff Johnson295189b2012-06-20 16:38:30 -07004196/*
4197 * FUNCTION: WDA_UpdateCfg
4198 *
4199 */
4200VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4201{
4202
4203 WDI_Status status = WDI_STATUS_SUCCESS ;
4204 tANI_U32 val =0;
4205 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4206 tHalCfg *configData;
4207 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4208 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004210 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 if (NULL == pMac )
4212 {
4213 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004214 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 return VOS_STATUS_E_FAILURE;
4216 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004217 if(WDA_START_STATE != pWDA->wdaState)
4218 {
4219 return VOS_STATUS_E_FAILURE;
4220 }
4221
4222 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4223 {
4224 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004225 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 VOS_ASSERT(0);
4227 return VOS_STATUS_E_FAILURE;
4228 }
4229
4230 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4231 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004232 if(NULL == wdiCfgReqParam)
4233 {
4234 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004235 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004236 VOS_ASSERT(0);
4237 return VOS_STATUS_E_NOMEM;
4238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4240 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004241 if(NULL == wdiCfgReqParam->pConfigBuffer)
4242 {
4243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004244 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004245 vos_mem_free(wdiCfgReqParam);
4246 VOS_ASSERT(0);
4247 return VOS_STATUS_E_NOMEM;
4248 }
4249
4250 /*convert the WNI CFG Id to HAL CFG Id*/
4251 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4252 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4253
4254 /*TODO: revisit this for handling string parameters */
4255 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4256 &val) != eSIR_SUCCESS)
4257 {
4258 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004259 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004260 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4261 vos_mem_free(wdiCfgReqParam);
4262 return eSIR_FAILURE;
4263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004264 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4265 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4266 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4267 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4268 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4269
4270 /* store Params pass it to WDI */
4271 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004272#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4273 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4274 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004275 if(IS_WDI_STATUS_FAILURE(status))
4276 {
4277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4278 "Failure in Update CFG WDI API, free all the memory " );
4279 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4280 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4281 pWDA->wdaWdiCfgApiMsgParam = NULL;
4282 /* Failure is not expected */
4283 VOS_ASSERT(0) ;
4284 }
4285#else
4286 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4287 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4288 pWDA->wdaWdiCfgApiMsgParam = NULL;
4289#endif
4290 return CONVERT_WDI2VOS_STATUS(status) ;
4291}
4292
Jeff Johnson295189b2012-06-20 16:38:30 -07004293VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4294 v_U8_t *pDefaultKeyId,
4295 v_U8_t *pNumKeys,
4296 WDI_KeysType *pWdiKeys )
4297{
4298 v_U32_t i, j, defKeyId = 0;
4299 v_U32_t val = SIR_MAC_KEY_LENGTH;
4300 VOS_STATUS status = WDI_STATUS_SUCCESS;
4301 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004302 if (NULL == pMac )
4303 {
4304 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004305 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004306 return VOS_STATUS_E_FAILURE;
4307 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004308 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4309 &defKeyId ))
4310 {
4311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4312 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4313 }
4314
4315 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004316 /* Need to extract ALL of the configured WEP Keys */
4317 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4318 {
4319 val = SIR_MAC_KEY_LENGTH;
4320 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4321 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4322 pWdiKeys[j].key,
4323 &val ))
4324 {
4325 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004326 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004327 }
4328 else
4329 {
4330 pWdiKeys[j].keyId = (tANI_U8) i;
4331 /*
4332 * Actually, a DC (Don't Care) because
4333 * this is determined (and set) by PE/MLME
4334 */
4335 pWdiKeys[j].unicast = 0;
4336 /*
4337 * Another DC (Don't Care)
4338 */
4339 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4340 /* Another DC (Don't Care). Unused for WEP */
4341 pWdiKeys[j].paeRole = 0;
4342 /* Determined from wlan_cfgGetStr() above.*/
4343 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004344 j++;
4345 *pNumKeys = (tANI_U8) j;
4346 }
4347 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004348 return status;
4349}
Jeff Johnson295189b2012-06-20 16:38:30 -07004350/*
4351 * FUNCTION: WDA_SetBssKeyReqCallback
4352 * send SET BSS key RSP back to PE
4353 */
4354void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4355{
4356 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4357 tWDA_CbContext *pWDA;
4358 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004360 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004361 if(NULL == pWdaParams)
4362 {
4363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004364 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004365 VOS_ASSERT(0) ;
4366 return ;
4367 }
4368 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4369 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004370 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4371 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004372 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004373 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004374 return ;
4375}
Jeff Johnson295189b2012-06-20 16:38:30 -07004376/*
4377 * FUNCTION: WDA_ProcessSetBssKeyReq
4378 * Request to WDI for programming the BSS key( key for
4379 * broadcast/multicast frames Encryption)
4380 */
4381VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4382 tSetBssKeyParams *setBssKeyParams )
4383{
4384 WDI_Status status = WDI_STATUS_SUCCESS ;
4385 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4386 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4387 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4388 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004389 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004390 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004391 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004392 if(NULL == wdiSetBssKeyParam)
4393 {
4394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004395 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004396 VOS_ASSERT(0);
4397 return VOS_STATUS_E_NOMEM;
4398 }
4399 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4400 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004404 VOS_ASSERT(0);
4405 vos_mem_free(wdiSetBssKeyParam);
4406 return VOS_STATUS_E_NOMEM;
4407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004408 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004409 /* copy set BSS params to WDI structure */
4410 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4411 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4412 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004413 if(setBssKeyParams->encType != eSIR_ED_NONE)
4414 {
4415 if( setBssKeyParams->numKeys == 0 &&
4416 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4417 setBssKeyParams->encType == eSIR_ED_WEP104))
4418 {
4419 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004420 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4421 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4422 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4423 }
4424 else
4425 {
4426 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4427 {
4428 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4429 setBssKeyParams->key[keyIndex].keyId;
4430 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4431 setBssKeyParams->key[keyIndex].unicast;
4432 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4433 setBssKeyParams->key[keyIndex].keyDirection;
4434 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4435 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4436 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4437 setBssKeyParams->key[keyIndex].paeRole;
4438 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4439 setBssKeyParams->key[keyIndex].keyLength;
4440 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4441 setBssKeyParams->key[keyIndex].key,
4442 SIR_MAC_MAX_KEY_LENGTH);
4443 }
4444 }
4445 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004446 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4447 setBssKeyParams->singleTidRc;
4448 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004449 /* Store set key pointer, as this will be used for response */
4450 /* store Params pass it to WDI */
4451 pWdaParams->pWdaContext = pWDA;
4452 pWdaParams->wdaMsgParam = setBssKeyParams;
4453 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004454 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4455 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4456
4457 if(IS_WDI_STATUS_FAILURE(status))
4458 {
4459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4460 "Failure in Set BSS Key Req WDI API, free all the memory " );
4461 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4462 vos_mem_free(pWdaParams) ;
4463 setBssKeyParams->status = eSIR_FAILURE ;
4464 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4465 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004466 return CONVERT_WDI2VOS_STATUS(status) ;
4467}
Jeff Johnson295189b2012-06-20 16:38:30 -07004468/*
4469 * FUNCTION: WDA_RemoveBssKeyReqCallback
4470 * send SET BSS key RSP back to PE
4471 */
4472void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4473{
4474 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4475 tWDA_CbContext *pWDA;
4476 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004478 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004479 if(NULL == pWdaParams)
4480 {
4481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004482 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004483 VOS_ASSERT(0) ;
4484 return ;
4485 }
4486 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4487 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004488 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4489 vos_mem_free(pWdaParams) ;
4490
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004491 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004492 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004493 return ;
4494}
Jeff Johnson295189b2012-06-20 16:38:30 -07004495/*
4496 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4497 * Request to WDI to remove the BSS key( key for broadcast/multicast
4498 * frames Encryption)
4499 */
4500VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4501 tRemoveBssKeyParams *removeBssKeyParams )
4502{
4503 WDI_Status status = WDI_STATUS_SUCCESS ;
4504 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4505 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4506 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4507 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004509 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004510 if(NULL == wdiRemoveBssKeyParam)
4511 {
4512 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004513 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004514 VOS_ASSERT(0);
4515 return VOS_STATUS_E_NOMEM;
4516 }
4517 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4518 if(NULL == pWdaParams)
4519 {
4520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004521 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004522 VOS_ASSERT(0);
4523 vos_mem_free(wdiRemoveBssKeyParam);
4524 return VOS_STATUS_E_NOMEM;
4525 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 /* copy Remove BSS key params to WDI structure*/
4527 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4528 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4529 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4530 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4531 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 /* Store remove key pointer, as this will be used for response */
4533 /* store Params pass it to WDI */
4534 pWdaParams->pWdaContext = pWDA;
4535 pWdaParams->wdaMsgParam = removeBssKeyParams;
4536 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004537 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4538 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004539 if(IS_WDI_STATUS_FAILURE(status))
4540 {
4541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4542 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4544 vos_mem_free(pWdaParams) ;
4545 removeBssKeyParams->status = eSIR_FAILURE ;
4546 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4547 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004548 return CONVERT_WDI2VOS_STATUS(status) ;
4549}
Jeff Johnson295189b2012-06-20 16:38:30 -07004550/*
4551 * FUNCTION: WDA_SetBssKeyReqCallback
4552 * send SET BSS key RSP back to PE
4553 */
4554void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4555{
4556 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4557 tWDA_CbContext *pWDA;
4558 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004560 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004561 if(NULL == pWdaParams)
4562 {
4563 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004564 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004565 VOS_ASSERT(0) ;
4566 return ;
4567 }
4568 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4569 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4571 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004572 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004573 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004574 return ;
4575}
Jeff Johnson295189b2012-06-20 16:38:30 -07004576/*
4577 * FUNCTION: WDA_ProcessSetStaKeyReq
4578 * Request to WDI for programming the STA key( key for Unicast frames
4579 * Encryption)
4580 */
4581VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4582 tSetStaKeyParams *setStaKeyParams )
4583{
4584 WDI_Status status = WDI_STATUS_SUCCESS ;
4585 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4586 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4587 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4588 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004591 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(NULL == wdiSetStaKeyParam)
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004595 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004596 VOS_ASSERT(0);
4597 return VOS_STATUS_E_NOMEM;
4598 }
4599 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4600 if(NULL == pWdaParams)
4601 {
4602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004603 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004604 VOS_ASSERT(0);
4605 vos_mem_free(wdiSetStaKeyParam);
4606 return VOS_STATUS_E_NOMEM;
4607 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004608 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004609 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004610 /* copy set STA key params to WDI structure */
4611 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4612 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4613 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4614 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004615 if(setStaKeyParams->encType != eSIR_ED_NONE)
4616 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004617 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004618 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4619 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4620 {
4621 WDA_GetWepKeysFromCfg( pWDA,
4622 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4623 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4624 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4625 }
4626 else
4627 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004628 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4629 keyIndex++)
4630 {
4631 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4632 setStaKeyParams->key[keyIndex].keyId;
4633 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4634 setStaKeyParams->key[keyIndex].unicast;
4635 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4636 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004637 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4638 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4639 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4640 setStaKeyParams->key[keyIndex].paeRole;
4641 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4642 setStaKeyParams->key[keyIndex].keyLength;
4643 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4644 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4645 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4646 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4647 {
4648 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4649 }
4650 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004651 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4652 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004653 }
4654 }
4655 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4656 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004657 /* Store set key pointer, as this will be used for response */
4658 /* store Params pass it to WDI */
4659 pWdaParams->pWdaContext = pWDA;
4660 pWdaParams->wdaMsgParam = setStaKeyParams;
4661 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004662 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4663 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004664 if(IS_WDI_STATUS_FAILURE(status))
4665 {
4666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4667 "Failure in set STA Key Req WDI API, free all the memory " );
4668 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4669 vos_mem_free(pWdaParams) ;
4670 setStaKeyParams->status = eSIR_FAILURE ;
4671 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4672 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004673 return CONVERT_WDI2VOS_STATUS(status) ;
4674}
Jeff Johnson295189b2012-06-20 16:38:30 -07004675/*
4676 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4677 * send SET Bcast STA key RSP back to PE
4678 */
4679void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4680{
4681 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4682 tWDA_CbContext *pWDA;
4683 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004685 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004686 if(NULL == pWdaParams)
4687 {
4688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004689 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 VOS_ASSERT(0) ;
4691 return ;
4692 }
4693 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4694 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004695 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4696 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004697 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004698 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004699 return ;
4700}
4701
Jeff Johnson295189b2012-06-20 16:38:30 -07004702/*
4703 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
4704 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
4705 * Encryption)
4706 */
4707VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
4708 tSetStaKeyParams *setStaKeyParams )
4709{
4710 WDI_Status status = WDI_STATUS_SUCCESS ;
4711 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4712 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4713 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4714 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004715 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004716 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004717 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004718 if(NULL == wdiSetStaKeyParam)
4719 {
4720 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004721 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004722 VOS_ASSERT(0);
4723 return VOS_STATUS_E_NOMEM;
4724 }
4725 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4726 if(NULL == pWdaParams)
4727 {
4728 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004729 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 VOS_ASSERT(0);
4731 vos_mem_free(wdiSetStaKeyParam);
4732 return VOS_STATUS_E_NOMEM;
4733 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004734 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004735 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004736 /* copy set STA key params to WDI structure */
4737 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4738 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4739 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4740 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004741 if(setStaKeyParams->encType != eSIR_ED_NONE)
4742 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004743 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4744 keyIndex++)
4745 {
4746 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4747 setStaKeyParams->key[keyIndex].keyId;
4748 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4749 setStaKeyParams->key[keyIndex].unicast;
4750 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4751 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004752 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4753 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4754 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4755 setStaKeyParams->key[keyIndex].paeRole;
4756 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4757 setStaKeyParams->key[keyIndex].keyLength;
4758 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4759 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4760 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004761 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4762 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 }
4764 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07004765 /* Store set key pointer, as this will be used for response */
4766 /* store Params pass it to WDI */
4767 pWdaParams->pWdaContext = pWDA;
4768 pWdaParams->wdaMsgParam = setStaKeyParams;
4769 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004770 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
4771 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004772 if(IS_WDI_STATUS_FAILURE(status))
4773 {
4774 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4775 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
4776 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4777 vos_mem_free(pWdaParams) ;
4778 setStaKeyParams->status = eSIR_FAILURE ;
4779 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
4780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004781 return CONVERT_WDI2VOS_STATUS(status) ;
4782}
Jeff Johnson295189b2012-06-20 16:38:30 -07004783/*
4784 * FUNCTION: WDA_RemoveStaKeyReqCallback
4785 * send SET BSS key RSP back to PE
4786 */
4787void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
4788{
4789 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4790 tWDA_CbContext *pWDA;
4791 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004793 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 if(NULL == pWdaParams)
4795 {
4796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004797 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004798 VOS_ASSERT(0) ;
4799 return ;
4800 }
4801 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4802 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4804 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004805 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004806 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004807 return ;
4808}
4809
Jeff Johnson295189b2012-06-20 16:38:30 -07004810/*
4811 * FUNCTION: WDA_ProcessRemoveStaKeyReq
4812 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
4813 */
4814VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
4815 tRemoveStaKeyParams *removeStaKeyParams )
4816{
4817 WDI_Status status = WDI_STATUS_SUCCESS ;
4818 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
4819 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
4820 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
4821 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004823 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004824 if(NULL == wdiRemoveStaKeyParam)
4825 {
4826 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004827 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004828 VOS_ASSERT(0);
4829 return VOS_STATUS_E_NOMEM;
4830 }
4831 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4832 if(NULL == pWdaParams)
4833 {
4834 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004835 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004836 VOS_ASSERT(0);
4837 vos_mem_free(wdiRemoveStaKeyParam);
4838 return VOS_STATUS_E_NOMEM;
4839 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004840 /* copy remove STA key params to WDI structure*/
4841 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
4842 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
4843 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
4844 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
4845 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004846 /* Store remove key pointer, as this will be used for response */
4847 /* store Params pass it to WDI */
4848 pWdaParams->pWdaContext = pWDA;
4849 pWdaParams->wdaMsgParam = removeStaKeyParams;
4850 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004851 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
4852 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004853 if(IS_WDI_STATUS_FAILURE(status))
4854 {
4855 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4856 "Failure in remove STA Key Req WDI API, free all the memory " );
4857 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4858 vos_mem_free(pWdaParams) ;
4859 removeStaKeyParams->status = eSIR_FAILURE ;
4860 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
4861 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004862 return CONVERT_WDI2VOS_STATUS(status) ;
4863}
Jeff Johnson295189b2012-06-20 16:38:30 -07004864/*
4865 * FUNCTION: WDA_IsHandleSetLinkStateReq
4866 * Update the WDA state and return the status to handle this message or not
4867 */
Jeff Johnson295189b2012-06-20 16:38:30 -07004868WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
4869 tWDA_CbContext *pWDA,
4870 tLinkStateParams *linkStateParams)
4871{
4872 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07004873 switch(linkStateParams->state)
4874 {
4875 case eSIR_LINK_PREASSOC_STATE:
4876 case eSIR_LINK_BTAMP_PREASSOC_STATE:
4877 /*
4878 * set the WDA state to PRE ASSOC
4879 * copy the BSSID into pWDA to use it in join request and return,
4880 * No need to handle these messages.
4881 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004882 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
4883 {
4884 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07004885 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004886 }
4887 else
4888 {
4889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004890 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004891 VOS_ASSERT(0);
4892 }
4893
4894 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
4895 {
4896 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07004897 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004898 }
4899 else
4900 {
4901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004902 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004903 VOS_ASSERT(0);
4904 }
4905
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 /* UMAC is issuing the setlink state with PREASSOC twice (before set
4907 *channel and after ) so reset the WDA state to ready when the second
4908 * time UMAC issue the link state with PREASSOC
4909 */
4910 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
4911 {
4912 /* RESET WDA state back to WDA_READY_STATE */
4913 pWDA->wdaState = WDA_READY_STATE;
4914 }
4915 else
4916 {
4917 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
4918 }
4919 //populate linkState info in WDACbCtxt
4920 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07004922 default:
4923 if(pWDA->wdaState != WDA_READY_STATE)
4924 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004925 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
4926 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
4927 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
4928 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
4929 *the ASSERT in WDA_Stop during module unload.*/
4930 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
4931 {
4932 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004933 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004934 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004935 else
4936 {
4937 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07004938 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07004939 status = WDA_IGNORE_SET_LINK_STATE;
4940 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004941 }
4942 break;
4943 }
4944
4945 return status;
4946}
Jeff Johnson295189b2012-06-20 16:38:30 -07004947/*
4948 * FUNCTION: WDA_SetLinkStateCallback
4949 * call back function for set link state from WDI
4950 */
4951void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
4952{
4953 tWDA_CbContext *pWDA;
4954 tLinkStateParams *linkStateParams;
4955 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07004956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004957 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004958 if(NULL == pWdaParams)
4959 {
4960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004961 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004962 VOS_ASSERT(0) ;
4963 return ;
4964 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004965 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07004966 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004967 /*
4968 * In STA mode start the BA activity check timer after association
4969 * and in AP mode start BA activity check timer after BSS start */
4970 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
4971 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07004972 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
4973 ((status == WDI_STATUS_SUCCESS) &&
4974 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07004975 {
4976 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
4977 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004978 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 /*
4980 * No respone required for WDA_SET_LINK_STATE so free the request
4981 * param here
4982 */
4983 if( pWdaParams != NULL )
4984 {
4985 if( pWdaParams->wdaWdiApiMsgParam != NULL )
4986 {
4987 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
4988 }
4989 vos_mem_free(pWdaParams);
4990 }
4991 return ;
4992}
Jeff Johnson295189b2012-06-20 16:38:30 -07004993/*
4994 * FUNCTION: WDA_ProcessSetLinkState
4995 * Request to WDI to set the link status.
4996 */
4997VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
4998 tLinkStateParams *linkStateParams)
4999{
5000 WDI_Status status = WDI_STATUS_SUCCESS ;
5001 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5002 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5003 sizeof(WDI_SetLinkReqParamsType)) ;
5004 tWDA_ReqParams *pWdaParams ;
5005 tpAniSirGlobal pMac;
5006 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5007
5008 if(NULL == pMac)
5009 {
5010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005011 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005013 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005014 return VOS_STATUS_E_FAILURE;
5015 }
5016
5017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005018 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005019 if(NULL == wdiSetLinkStateParam)
5020 {
5021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005022 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005023 VOS_ASSERT(0);
5024 return VOS_STATUS_E_NOMEM;
5025 }
5026 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5027 if(NULL == pWdaParams)
5028 {
5029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005030 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005031 VOS_ASSERT(0);
5032 vos_mem_free(wdiSetLinkStateParam);
5033 return VOS_STATUS_E_NOMEM;
5034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 if(WDA_IGNORE_SET_LINK_STATE ==
5036 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5037 {
5038 status = WDI_STATUS_E_FAILURE;
5039 }
5040 else
5041 {
5042 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5043 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005044 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5045 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005046 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5047 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005048 pWdaParams->pWdaContext = pWDA;
5049 /* Store remove key pointer, as this will be used for response */
5050 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 /* store Params pass it to WDI */
5052 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5053 /* Stop Timer only other than GO role and concurrent session */
5054 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005055 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005056 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5057 {
5058 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5059 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5061 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005062 if(IS_WDI_STATUS_FAILURE(status))
5063 {
5064 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5065 "Failure in set link state Req WDI API, free all the memory " );
5066 }
5067 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005068 if(IS_WDI_STATUS_FAILURE(status))
5069 {
5070 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005071 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005072 vos_mem_free(pWdaParams);
5073 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005074 return CONVERT_WDI2VOS_STATUS(status) ;
5075}
Jeff Johnson295189b2012-06-20 16:38:30 -07005076/*
5077 * FUNCTION: WDA_GetStatsReqParamsCallback
5078 * send the response to PE with Stats received from WDI
5079 */
5080void WDA_GetStatsReqParamsCallback(
5081 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5082 void* pUserData)
5083{
5084 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5085 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5086
5087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005088 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 pGetPEStatsRspParams =
5090 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5091 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5092
5093 if(NULL == pGetPEStatsRspParams)
5094 {
5095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005096 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005097 VOS_ASSERT(0);
5098 return;
5099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005100 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5101 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5102 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5103 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005104
5105 //Fill the Session Id Properly in PE
5106 pGetPEStatsRspParams->sessionId = 0;
5107 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005108 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5110 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 vos_mem_copy( pGetPEStatsRspParams + 1,
5112 wdiGetStatsRsp + 1,
5113 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005114 /* send response to UMAC*/
5115 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5116
5117 return;
5118}
5119
Jeff Johnson295189b2012-06-20 16:38:30 -07005120/*
5121 * FUNCTION: WDA_ProcessGetStatsReq
5122 * Request to WDI to get the statistics
5123 */
5124VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5125 tAniGetPEStatsReq *pGetStatsParams)
5126{
5127 WDI_Status status = WDI_STATUS_SUCCESS ;
5128 WDI_GetStatsReqParamsType wdiGetStatsParam;
5129 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005131 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005132 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5133 pGetStatsParams->staId;
5134 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5135 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005136 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005137 status = WDI_GetStatsReq(&wdiGetStatsParam,
5138 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 if(IS_WDI_STATUS_FAILURE(status))
5140 {
5141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5142 "Failure in Get Stats Req WDI API, free all the memory " );
5143 pGetPEStatsRspParams =
5144 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5145 if(NULL == pGetPEStatsRspParams)
5146 {
5147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005148 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005149 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005150 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005151 return VOS_STATUS_E_NOMEM;
5152 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5154 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5155 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5156 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5157 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5158 (void *)pGetPEStatsRspParams, 0) ;
5159 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005160 /* Free the request message */
5161 vos_mem_free(pGetStatsParams);
5162 return CONVERT_WDI2VOS_STATUS(status);
5163}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005164
5165#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
5166/*
5167 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5168 * send the response to PE with roam Rssi received from WDI
5169 */
5170void WDA_GetRoamRssiReqParamsCallback(
5171 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5172 void* pUserData)
5173{
5174 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5175 tWDA_CbContext *pWDA = NULL;
5176 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5177 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5178 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5179 "<------ %s " ,__func__);
5180 if(NULL == pWdaParams)
5181 {
5182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5183 "%s: pWdaParams received NULL", __func__);
5184 VOS_ASSERT(0) ;
5185 return ;
5186 }
5187 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5188 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5189
5190 if(NULL == pGetRoamRssiReqParams)
5191 {
5192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5193 "%s: pGetRoamRssiReqParams received NULL", __func__);
5194 VOS_ASSERT(0);
5195 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5196 vos_mem_free(pWdaParams);
5197 return ;
5198 }
5199 pGetRoamRssiRspParams =
5200 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5201
5202 if(NULL == pGetRoamRssiRspParams)
5203 {
5204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5205 "%s: VOS MEM Alloc Failure", __func__);
5206 VOS_ASSERT(0);
5207 return;
5208 }
5209 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5210 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005211 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005212 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5213 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5214
5215 /* Assign get roam rssi req (backup) in to the response */
5216 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5217
5218 /* free WDI command buffer */
5219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5220 vos_mem_free(pWdaParams) ;
5221
5222 /* send response to UMAC*/
5223 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5224
5225 return;
5226}
5227
5228
5229
5230/*
5231 * FUNCTION: WDA_ProcessGetRoamRssiReq
5232 * Request to WDI to get the statistics
5233 */
5234VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5235 tAniGetRssiReq *pGetRoamRssiParams)
5236{
5237 WDI_Status status = WDI_STATUS_SUCCESS ;
5238 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5239 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5240 tWDA_ReqParams *pWdaParams = NULL;
5241
5242 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5243 "------> %s " ,__func__);
5244 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5245 pGetRoamRssiParams->staId;
5246 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5247
5248 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5249 if(NULL == pWdaParams)
5250 {
5251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5252 "%s: VOS MEM Alloc Failure", __func__);
5253 VOS_ASSERT(0);
5254 return VOS_STATUS_E_NOMEM;
5255 }
5256
5257 /* Store Init Req pointer, as this will be used for response */
5258 pWdaParams->pWdaContext = pWDA;
5259
5260 /* Take Get roam Rssi req backup as it stores the callback to be called after
5261 receiving the response */
5262 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5263 pWdaParams->wdaWdiApiMsgParam = NULL;
5264
5265 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5266 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5267 if(IS_WDI_STATUS_FAILURE(status))
5268 {
5269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5270 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5271 pGetRoamRssiRspParams =
5272 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5273 if(NULL == pGetRoamRssiRspParams)
5274 {
5275 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5276 "%s: VOS MEM Alloc Failure", __func__);
5277 VOS_ASSERT(0);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005278 return VOS_STATUS_E_NOMEM;
5279 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07005280 vos_mem_free(pGetRoamRssiParams);
5281 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005282 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5283 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5284 pGetRoamRssiRspParams->rssi = 0;
5285 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5286 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5287 (void *)pGetRoamRssiRspParams, 0) ;
5288 }
5289 return CONVERT_WDI2VOS_STATUS(status);
5290}
5291#endif
5292
5293
Jeff Johnson295189b2012-06-20 16:38:30 -07005294/*
5295 * FUNCTION: WDA_UpdateEDCAParamCallback
5296 * call back function for Update EDCA params from WDI
5297 */
5298void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5299{
5300 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5301 tEdcaParams *pEdcaParams;
5302
5303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005304 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005305 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: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005309 VOS_ASSERT(0) ;
5310 return ;
5311 }
5312 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005313 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5314 vos_mem_free(pWdaParams);
5315 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005316 return ;
5317}
Jeff Johnson295189b2012-06-20 16:38:30 -07005318/*
5319 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5320 * Request to WDI to Update the EDCA params.
5321 */
5322VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5323 tEdcaParams *pEdcaParams)
5324{
5325 WDI_Status status = WDI_STATUS_SUCCESS ;
5326 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5327 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5328 sizeof(WDI_UpdateEDCAParamsType)) ;
5329 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005331 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005332 if(NULL == wdiEdcaParam)
5333 {
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005337 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005338 return VOS_STATUS_E_NOMEM;
5339 }
5340 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5341 if(NULL == pWdaParams)
5342 {
5343 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005344 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005345 VOS_ASSERT(0);
5346 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005347 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 return VOS_STATUS_E_NOMEM;
5349 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005350 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005351 /*
5352 Since firmware is not using highperformance flag, we have removed
5353 this flag from wdiEDCAInfo structure to match sizeof the structure
5354 between host and firmware.In future if we are planning to use
5355 highperformance flag then Please define this flag in wdiEDCAInfo
5356 structure, update it here and send it to firmware. i.e.
5357 Following is the original line which we removed as part of the fix
5358 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5359 pEdcaParams->highPerformance;
5360 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5362 &pEdcaParams->acbe);
5363 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5364 &pEdcaParams->acbk);
5365 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5366 &pEdcaParams->acvi);
5367 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5368 &pEdcaParams->acvo);
5369 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005370 pWdaParams->pWdaContext = pWDA;
5371 /* Store remove key pointer, as this will be used for response */
5372 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 /* store Params pass it to WDI */
5374 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005375 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5376 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 if(IS_WDI_STATUS_FAILURE(status))
5378 {
5379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5380 "Failure in Update EDCA Params WDI API, free all the memory " );
5381 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5382 vos_mem_free(pWdaParams);
5383 vos_mem_free(pEdcaParams);
5384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 return CONVERT_WDI2VOS_STATUS(status) ;
5386}
Jeff Johnson295189b2012-06-20 16:38:30 -07005387/*
5388 * FUNCTION: WDA_AddBAReqCallback
5389 * send ADD BA RSP back to PE
5390 */
5391void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5392 void* pUserData)
5393{
5394 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5395 tWDA_CbContext *pWDA;
5396 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005398 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005399 if(NULL == pWdaParams)
5400 {
5401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005402 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005403 VOS_ASSERT(0) ;
5404 return ;
5405 }
5406 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5407 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005408 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5409 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005410 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005411 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005412 return ;
5413}
5414
Jeff Johnson295189b2012-06-20 16:38:30 -07005415/*
5416 * FUNCTION: WDA_ProcessAddBAReq
5417 * Request to WDI to Update the ADDBA REQ params.
5418 */
5419VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5420 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5421{
Jeff Johnson43971f52012-07-17 12:26:56 -07005422 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005423 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5424 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5425 sizeof(WDI_AddBAReqParamsType)) ;
5426 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005427 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005428 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005429 if(NULL == wdiAddBAReqParam)
5430 {
5431 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005432 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005433 VOS_ASSERT(0);
5434 return VOS_STATUS_E_NOMEM;
5435 }
5436 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5437 if(NULL == pWdaParams)
5438 {
5439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005440 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005441 VOS_ASSERT(0);
5442 vos_mem_free(wdiAddBAReqParam);
5443 return VOS_STATUS_E_NOMEM;
5444 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005445 do
5446 {
5447 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005448 wdiAddBaInfo->ucSTAIdx = staIdx ;
5449 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5450 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005451 } while(0) ;
5452 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 pWdaParams->pWdaContext = pWDA;
5454 /* store Params pass it to WDI */
5455 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5456 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005457 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5458 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005459
Jeff Johnson43971f52012-07-17 12:26:56 -07005460 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005461 {
5462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005463 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5464 status = CONVERT_WDI2VOS_STATUS(wstatus);
5465 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 vos_mem_free(pWdaParams);
5467 pAddBAReqParams->status = eSIR_FAILURE;
5468 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5469 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005470 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005471}
Jeff Johnson295189b2012-06-20 16:38:30 -07005472/*
5473 * FUNCTION: WDA_AddBASessionReqCallback
5474 * send ADD BA SESSION RSP back to PE/(or TL)
5475 */
5476void WDA_AddBASessionReqCallback(
5477 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5478{
5479 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5480 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5481 tWDA_CbContext *pWDA;
5482 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005484 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005485 if(NULL == pWdaParams)
5486 {
5487 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005488 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005489 VOS_ASSERT(0) ;
5490 return ;
5491 }
5492 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5493 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005494 if( NULL == pAddBAReqParams )
5495 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005497 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005498 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005499 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5500 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005501 return ;
5502 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005503 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5504 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005505 /*
5506 * if WDA in update TL state, update TL with BA session parama and send
5507 * another request to HAL(/WDI) (ADD_BA_REQ)
5508 */
5509
5510 if((VOS_STATUS_SUCCESS ==
5511 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5512 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5513 {
5514 /* Update TL with BA info received from HAL/WDI */
5515 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5516 wdiAddBaSession->usBaSessionID,
5517 wdiAddBaSession->ucSTAIdx,
5518 wdiAddBaSession->ucBaTID,
5519 wdiAddBaSession->ucBaBufferSize,
5520 wdiAddBaSession->ucWinSize,
5521 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005522 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5523 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5524 }
5525 else
5526 {
5527 pAddBAReqParams->status =
5528 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5529
5530 /* Setting Flag to indicate that Set BA is success */
5531 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5532 {
5533 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5534 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5535 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5536 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005537 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5538 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005539 /*Reset the WDA state to READY */
5540 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005541 return ;
5542}
5543
Jeff Johnson295189b2012-06-20 16:38:30 -07005544/*
5545 * FUNCTION: WDA_ProcessAddBASessionReq
5546 * Request to WDI to Update the ADDBA REQ params.
5547 */
5548VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5549 tAddBAParams *pAddBAReqParams)
5550{
5551 WDI_Status status = WDI_STATUS_SUCCESS ;
5552 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5553 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5554 sizeof(WDI_AddBASessionReqParamsType)) ;
5555 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005556 WLANTL_STAStateType tlSTAState = 0;
5557
Jeff Johnson295189b2012-06-20 16:38:30 -07005558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005560 if(NULL == wdiAddBASessionReqParam)
5561 {
5562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005564 VOS_ASSERT(0);
5565 return VOS_STATUS_E_NOMEM;
5566 }
5567 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5568 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: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005572 VOS_ASSERT(0);
5573 vos_mem_free(wdiAddBASessionReqParam);
5574 return VOS_STATUS_E_NOMEM;
5575 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005576 /*
5577 * Populate ADD BA parameters and pass these paarmeters to WDI.
5578 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5579 * the state to track if these is BA recipient case or BA initiator
5580 * case.
5581 */
5582 do
5583 {
5584 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5585 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5586 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5587 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5588 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5589 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5590 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005591 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005592 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5593 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5594 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5595 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5596 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005597 /* check the BA direction and update state accordingly */
5598 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5599 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5600 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5601
5602 }while(0) ;
5603 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005604 pWdaParams->pWdaContext = pWDA;
5605 /* Store ADD BA pointer, as this will be used for response */
5606 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5607 /* store Params pass it to WDI */
5608 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005609
5610 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5611 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5612 */
5613 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5614 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5615 {
5616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005617 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005618 status = WDI_STATUS_E_NOT_ALLOWED;
5619 pAddBAReqParams->status =
5620 CONVERT_WDI2SIR_STATUS(status) ;
5621 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5622 /*Reset the WDA state to READY */
5623 pWDA->wdaState = WDA_READY_STATE;
5624 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5625 vos_mem_free(pWdaParams);
5626
5627 return CONVERT_WDI2VOS_STATUS(status) ;
5628 }
5629
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5631 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005632 if(IS_WDI_STATUS_FAILURE(status))
5633 {
5634 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005635 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005636 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005637 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005638 pAddBAReqParams->status =
5639 CONVERT_WDI2SIR_STATUS(status) ;
5640 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005641 /*Reset the WDA state to READY */
5642 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005643 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005644 vos_mem_free(pWdaParams);
5645 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005646 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005647}
Jeff Johnson295189b2012-06-20 16:38:30 -07005648/*
5649 * FUNCTION: WDA_DelBANotifyTL
5650 * send DEL BA IND to TL
5651 */
5652void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5653 tDelBAParams *pDelBAReqParams)
5654{
5655 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5656 //tSirMsgQ msg;
5657 vos_msg_t vosMsg;
5658 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005659 if(NULL == pDelBAInd)
5660 {
5661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005662 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005663 VOS_ASSERT(0) ;
5664 return;
5665 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005666 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5667 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5668 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5669 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005670
Jeff Johnson295189b2012-06-20 16:38:30 -07005671
5672 vosMsg.type = WDA_DELETEBA_IND;
5673 vosMsg.bodyptr = pDelBAInd;
5674 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5675 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5676 {
5677 vosStatus = VOS_STATUS_E_BADMSG;
5678 }
5679}
Jeff Johnson295189b2012-06-20 16:38:30 -07005680/*
5681 * FUNCTION: WDA_DelBAReqCallback
5682 * send DEL BA RSP back to PE
5683 */
5684void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
5685{
5686 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5687 tWDA_CbContext *pWDA;
5688 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005689 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005690 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005691 if(NULL == pWdaParams)
5692 {
5693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005694 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005695 VOS_ASSERT(0) ;
5696 return ;
5697 }
5698 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5699 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005700 /* Notify TL about DEL BA in case of recipinet */
5701 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
5702 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
5703 {
5704 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
5705 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005706 /*
5707 * No respone required for WDA_DELBA_IND so just free the request
5708 * param here
5709 */
5710 vos_mem_free(pDelBAReqParams);
5711 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5712 vos_mem_free(pWdaParams);
5713 return ;
5714}
5715
Jeff Johnson295189b2012-06-20 16:38:30 -07005716/*
5717 * FUNCTION: WDA_ProcessDelBAReq
5718 * Request to WDI to Update the DELBA REQ params.
5719 */
5720VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
5721 tDelBAParams *pDelBAReqParams)
5722{
5723 WDI_Status status = WDI_STATUS_SUCCESS ;
5724 WDI_DelBAReqParamsType *wdiDelBAReqParam =
5725 (WDI_DelBAReqParamsType *)vos_mem_malloc(
5726 sizeof(WDI_DelBAReqParamsType)) ;
5727 tWDA_ReqParams *pWdaParams ;
5728 tANI_U16 staIdx = 0;
5729 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07005730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005731 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005732 if(NULL == wdiDelBAReqParam)
5733 {
5734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005735 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005736 VOS_ASSERT(0);
5737 return VOS_STATUS_E_NOMEM;
5738 }
5739 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5740 if(NULL == pWdaParams)
5741 {
5742 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005743 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 VOS_ASSERT(0);
5745 vos_mem_free(wdiDelBAReqParam);
5746 return VOS_STATUS_E_NOMEM;
5747 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005748 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
5749 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
5750 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
5751 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005752 pWdaParams->pWdaContext = pWDA;
5753 /* Store DEL BA pointer, as this will be used for response */
5754 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005755 /* store Params pass it to WDI */
5756 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005757 /* if BA exchange over the air is failed, clear this tid in BaBitmap
5758 * maintained in WDA, so that WDA can retry for another BA session
5759 */
5760 staIdx = pDelBAReqParams->staIdx;
5761 tid = pDelBAReqParams->baTID;
5762 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07005763 status = WDI_DelBAReq(wdiDelBAReqParam,
5764 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 if(IS_WDI_STATUS_FAILURE(status))
5766 {
5767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5768 "Failure in DEL BA REQ Params WDI API, free all the memory " );
5769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5770 vos_mem_free(pWdaParams->wdaMsgParam);
5771 vos_mem_free(pWdaParams);
5772 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005773 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005774}
Jeff Johnson295189b2012-06-20 16:38:30 -07005775/*
5776 * FUNCTION: WDA_AddTSReqCallback
5777 * send ADD TS RSP back to PE
5778 */
5779void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
5780{
5781 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5782 tWDA_CbContext *pWDA;
5783 tAddTsParams *pAddTsReqParams;
5784
5785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005786 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005787 if(NULL == pWdaParams)
5788 {
5789 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005790 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005791 VOS_ASSERT(0) ;
5792 return ;
5793 }
5794 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
5795 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
5796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5797 vos_mem_free(pWdaParams);
5798
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005799 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005800 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005801 return ;
5802}
5803
Jeff Johnson295189b2012-06-20 16:38:30 -07005804/*
5805 * FUNCTION: WDA_ProcessAddTSReq
5806 * Request to WDI to Update the ADD TS REQ params.
5807 */
5808VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
5809 tAddTsParams *pAddTsReqParams)
5810{
5811 WDI_Status status = WDI_STATUS_SUCCESS ;
5812 WDI_AddTSReqParamsType *wdiAddTSReqParam =
5813 (WDI_AddTSReqParamsType *)vos_mem_malloc(
5814 sizeof(WDI_AddTSReqParamsType)) ;
5815 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005817 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 if(NULL == wdiAddTSReqParam)
5819 {
5820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005821 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 VOS_ASSERT(0);
5823 return VOS_STATUS_E_NOMEM;
5824 }
5825 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5826 if(NULL == pWdaParams)
5827 {
5828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005829 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005830 VOS_ASSERT(0);
5831 vos_mem_free(wdiAddTSReqParam);
5832 return VOS_STATUS_E_NOMEM;
5833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005834 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
5835 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005836 //TS IE
5837 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
5838 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
5839 pAddTsReqParams->tspec.length;
5840
5841 //TS IE : TS INFO : TRAFFIC
5842 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
5843 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
5844 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
5845 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
5846 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
5847 pAddTsReqParams->tspec.tsinfo.traffic.psb;
5848 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
5849 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
5850 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
5851 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
5852 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
5853 pAddTsReqParams->tspec.tsinfo.traffic.direction;
5854 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
5855 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
5856 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
5857 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
5858
5859 //TS IE : TS INFO : SCHEDULE
5860 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
5861 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
5862 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
5863 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07005864 //TS IE
5865 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
5866 pAddTsReqParams->tspec.nomMsduSz;
5867 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
5868 pAddTsReqParams->tspec.maxMsduSz;
5869 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
5870 pAddTsReqParams->tspec.minSvcInterval;
5871 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
5872 pAddTsReqParams->tspec.maxSvcInterval;
5873 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
5874 pAddTsReqParams->tspec.inactInterval;
5875 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
5876 pAddTsReqParams->tspec.suspendInterval;
5877 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
5878 pAddTsReqParams->tspec.svcStartTime;
5879 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
5880 pAddTsReqParams->tspec.minDataRate;
5881 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
5882 pAddTsReqParams->tspec.meanDataRate;
5883 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
5884 pAddTsReqParams->tspec.peakDataRate;
5885 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
5886 pAddTsReqParams->tspec.maxBurstSz;
5887 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
5888 pAddTsReqParams->tspec.delayBound;
5889 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
5890 pAddTsReqParams->tspec.minPhyRate;
5891 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
5892 pAddTsReqParams->tspec.surplusBw;
5893 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
5894 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07005895 /* TODO: tAddTsParams doesn't have the following fields */
5896#if 0
5897 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
5898 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
5899 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
5900 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
5901#endif
5902 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
5903
5904 pWdaParams->pWdaContext = pWDA;
5905 /* Store ADD TS pointer, as this will be used for response */
5906 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005907 /* store Params pass it to WDI */
5908 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 status = WDI_AddTSReq(wdiAddTSReqParam,
5910 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005911 if(IS_WDI_STATUS_FAILURE(status))
5912 {
5913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5914 "Failure in ADD TS REQ Params WDI API, free all the memory " );
5915 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5916 vos_mem_free(pWdaParams);
5917 pAddTsReqParams->status = eSIR_FAILURE ;
5918 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
5919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005920 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921}
5922
Jeff Johnson295189b2012-06-20 16:38:30 -07005923/*
5924 * FUNCTION: WDA_DelTSReqCallback
5925 * send DEL TS RSP back to PE
5926 */
5927void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
5928{
5929 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005931 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5933 vos_mem_free(pWdaParams->wdaMsgParam) ;
5934 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005935 /*
5936 * No respone required for WDA_DEL_TS_REQ so just free the request
5937 * param here
5938 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005939 return ;
5940}
5941
Jeff Johnson295189b2012-06-20 16:38:30 -07005942/*
5943 * FUNCTION: WDA_ProcessDelTSReq
5944 * Request to WDI to Update the DELTS REQ params.
5945 */
5946VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
5947 tDelTsParams *pDelTSReqParams)
5948{
5949 WDI_Status status = WDI_STATUS_SUCCESS ;
5950 WDI_DelTSReqParamsType *wdiDelTSReqParam =
5951 (WDI_DelTSReqParamsType *)vos_mem_malloc(
5952 sizeof(WDI_DelTSReqParamsType)) ;
5953 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005954 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005955 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005956 if(NULL == wdiDelTSReqParam)
5957 {
5958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005959 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 VOS_ASSERT(0);
5961 return VOS_STATUS_E_NOMEM;
5962 }
5963 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5964 if(NULL == pWdaParams)
5965 {
5966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005967 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005968 VOS_ASSERT(0);
5969 vos_mem_free(wdiDelTSReqParam);
5970 return VOS_STATUS_E_NOMEM;
5971 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005972 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
5973 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
5974 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
5975 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
5976 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005977 pWdaParams->pWdaContext = pWDA;
5978 /* Store DEL TS pointer, as this will be used for response */
5979 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 /* store Params pass it to WDI */
5981 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005982 status = WDI_DelTSReq(wdiDelTSReqParam,
5983 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005984 if(IS_WDI_STATUS_FAILURE(status))
5985 {
5986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5987 "Failure in DEL TS REQ Params WDI API, free all the memory " );
5988 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5989 vos_mem_free(pWdaParams->wdaMsgParam);
5990 vos_mem_free(pWdaParams);
5991 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005992 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005993}
Jeff Johnson295189b2012-06-20 16:38:30 -07005994/*
5995 * FUNCTION: WDA_UpdateBeaconParamsCallback
5996 * Free the memory. No need to send any response to PE in this case
5997 */
5998void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
5999{
6000 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006003 if(NULL == pWdaParams)
6004 {
6005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006007 VOS_ASSERT(0) ;
6008 return ;
6009 }
6010 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6011 vos_mem_free(pWdaParams->wdaMsgParam) ;
6012 vos_mem_free(pWdaParams);
6013 /*
6014 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6015 * param here
6016 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 return ;
6018}
Jeff Johnson295189b2012-06-20 16:38:30 -07006019/*
6020 * FUNCTION: WDA_ProcessUpdateBeaconParams
6021 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6022 */
6023VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6024 tUpdateBeaconParams *pUpdateBeaconParams)
6025{
6026 WDI_Status status = WDI_STATUS_SUCCESS ;
6027 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6028 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6029 sizeof(WDI_UpdateBeaconParamsType)) ;
6030 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006032 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006033 if(NULL == wdiUpdateBeaconParams)
6034 {
6035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006037 VOS_ASSERT(0);
6038 return VOS_STATUS_E_NOMEM;
6039 }
6040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6041 if(NULL == pWdaParams)
6042 {
6043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006045 VOS_ASSERT(0);
6046 vos_mem_free(wdiUpdateBeaconParams);
6047 return VOS_STATUS_E_NOMEM;
6048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6050 pUpdateBeaconParams->bssIdx;
6051 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6052 pUpdateBeaconParams->fShortPreamble;
6053 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6054 pUpdateBeaconParams->fShortSlotTime;
6055 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6056 pUpdateBeaconParams->beaconInterval;
6057 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6058 pUpdateBeaconParams->llaCoexist;
6059 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6060 pUpdateBeaconParams->llbCoexist;
6061 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6062 pUpdateBeaconParams->llgCoexist;
6063 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6064 pUpdateBeaconParams->ht20MhzCoexist;
6065 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6066 pUpdateBeaconParams->llnNonGFCoexist;
6067 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6068 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6069 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6070 pUpdateBeaconParams->fRIFSMode;
6071 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6072 pUpdateBeaconParams->paramChangeBitmap;
6073 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6074
6075 pWdaParams->pWdaContext = pWDA;
6076 /* Store UpdateBeacon Req pointer, as this will be used for response */
6077 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006078 /* store Params pass it to WDI */
6079 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6081 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6082 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006083 if(IS_WDI_STATUS_FAILURE(status))
6084 {
6085 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6086 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6088 vos_mem_free(pWdaParams->wdaMsgParam);
6089 vos_mem_free(pWdaParams);
6090 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006091 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006092}
Jeff Johnson295189b2012-06-20 16:38:30 -07006093#ifdef FEATURE_WLAN_CCX
Jeff Johnson295189b2012-06-20 16:38:30 -07006094/*
6095 * FUNCTION: WDA_TSMStatsReqCallback
6096 * send TSM Stats RSP back to PE
6097 */
6098void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6099{
6100 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6101 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006102 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6103 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006104
6105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006106 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006107 if(NULL == pWdaParams)
6108 {
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006110 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006111 VOS_ASSERT(0) ;
6112 return ;
6113 }
6114 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006115 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6116
6117 if(NULL == pGetTsmStatsReqParams)
6118 {
6119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6120 "%s: pGetTsmStatsReqParams received NULL", __func__);
6121 VOS_ASSERT(0);
6122 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6123 vos_mem_free(pWdaParams);
6124 return;
6125 }
6126
6127 pTsmRspParams =
6128 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006129 if( NULL == pTsmRspParams )
6130 {
6131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006132 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006133 VOS_ASSERT( 0 );
6134 return ;
6135 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006136 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6137 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6138 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6139
Jeff Johnson295189b2012-06-20 16:38:30 -07006140 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6141 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6142 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6143 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6144 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6145 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6146 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6147 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6148 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6149 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006150
6151 /* Assign get tsm stats req req (backup) in to the response */
6152 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6153
6154 /* free WDI command buffer */
6155 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6156 vos_mem_free(pWdaParams);
6157
Jeff Johnson295189b2012-06-20 16:38:30 -07006158 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006159 return ;
6160}
6161
6162
Jeff Johnson295189b2012-06-20 16:38:30 -07006163/*
6164 * FUNCTION: WDA_ProcessTsmStatsReq
6165 * Request to WDI to get the TSM Stats params.
6166 */
6167VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006168 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006169{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006170 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006171 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006172 tWDA_ReqParams *pWdaParams = NULL;
6173 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6174
Jeff Johnson295189b2012-06-20 16:38:30 -07006175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006176 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006177 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6178 sizeof(WDI_TSMStatsReqParamsType));
6179 if(NULL == wdiTSMReqParam)
6180 {
6181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006182 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006183 VOS_ASSERT(0);
6184 return VOS_STATUS_E_NOMEM;
6185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006186 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6187 if(NULL == pWdaParams)
6188 {
6189 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006190 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006191 VOS_ASSERT(0);
6192 vos_mem_free(wdiTSMReqParam);
6193 return VOS_STATUS_E_NOMEM;
6194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006195 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6196 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6197 pTsmStats->bssId,
6198 sizeof(wpt_macAddr));
6199 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6200
6201 pWdaParams->pWdaContext = pWDA;
6202 /* Store TSM Stats pointer, as this will be used for response */
6203 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006204 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006205 status = WDI_TSMStatsReq(wdiTSMReqParam,
6206 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006207 if(IS_WDI_STATUS_FAILURE(status))
6208 {
6209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6210 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006211 vos_mem_free(pWdaParams);
6212
6213 pGetTsmStatsRspParams =
6214 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6215 if(NULL == pGetTsmStatsRspParams)
6216 {
6217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6218 "%s: VOS MEM Alloc Failure", __func__);
6219 VOS_ASSERT(0);
6220 vos_mem_free(pTsmStats);
6221 return VOS_STATUS_E_NOMEM;
6222 }
6223 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6224 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6225 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6226
6227 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006228 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006229 return CONVERT_WDI2VOS_STATUS(status) ;
6230}
6231#endif
6232/*
6233 * FUNCTION: WDA_SendBeaconParamsCallback
6234 * No need to send any response to PE in this case
6235 */
6236void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6237{
6238
Jeff Johnson295189b2012-06-20 16:38:30 -07006239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006240 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006241 return ;
6242}
Jeff Johnson295189b2012-06-20 16:38:30 -07006243/*
6244 * FUNCTION: WDA_ProcessSendBeacon
6245 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6246 * start beacon trasmission
6247 */
6248VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6249 tSendbeaconParams *pSendbeaconParams)
6250{
6251 WDI_Status status = WDI_STATUS_SUCCESS ;
6252 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006254 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006255 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6256 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6257 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6258 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006259 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6260 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306261 /* p2pIeOffset should be atleast greater than timIeOffset */
6262 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6263 (pSendbeaconParams->p2pIeOffset <
6264 pSendbeaconParams->timIeOffset))
6265 {
6266 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6267 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6268 VOS_ASSERT( 0 );
6269 return WDI_STATUS_E_FAILURE;
6270 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006271 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6272 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006273 /* Copy the beacon template to local buffer */
6274 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6275 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6276 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6277
Jeff Johnson295189b2012-06-20 16:38:30 -07006278 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6279 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006280 if(IS_WDI_STATUS_FAILURE(status))
6281 {
6282 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6283 "Failure in SEND BEACON REQ Params WDI API" );
6284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006285 vos_mem_free(pSendbeaconParams);
6286 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006287}
Jeff Johnson295189b2012-06-20 16:38:30 -07006288/*
6289 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6290 * No need to send any response to PE in this case
6291 */
6292void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6293{
Jeff Johnson295189b2012-06-20 16:38:30 -07006294 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006295 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006296 return ;
6297}
6298
Jeff Johnson295189b2012-06-20 16:38:30 -07006299/*
6300 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6301 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6302 * send probe response
6303 */
6304VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6305 tSendProbeRespParams *pSendProbeRspParams)
6306{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006307 WDI_Status status = WDI_STATUS_SUCCESS;
6308 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6309 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006310 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006311 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006312
6313 if (!wdiSendProbeRspParam)
6314 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6315
Jeff Johnson295189b2012-06-20 16:38:30 -07006316 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006317 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006318 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006319 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006320 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006321 /* Copy the Probe Response template to local buffer */
6322 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006323 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006324 pSendProbeRspParams->pProbeRespTemplate,
6325 pSendProbeRspParams->probeRespTemplateLen);
6326 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006327 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006328 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6329 WDI_PROBE_REQ_BITMAP_IE_LEN);
6330
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006331 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006332
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006333 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006334 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006335 if(IS_WDI_STATUS_FAILURE(status))
6336 {
6337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6338 "Failure in SEND Probe RSP Params WDI API" );
6339 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006340 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006341 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006342 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006343}
Jeff Johnson295189b2012-06-20 16:38:30 -07006344#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
6345/*
6346 * FUNCTION: WDA_SetMaxTxPowerCallBack
6347 * send the response to PE with power value received from WDI
6348 */
6349void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6350 void* pUserData)
6351{
6352 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6353 tWDA_CbContext *pWDA = NULL;
6354 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6355
6356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006357 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006358 if(NULL == pWdaParams)
6359 {
6360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006361 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006362 VOS_ASSERT(0) ;
6363 return ;
6364 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006365 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6366 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006367 if( NULL == pMaxTxPowerParams )
6368 {
6369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006370 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006371 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006372 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6373 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006374 return ;
6375 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006376
Jeff Johnson295189b2012-06-20 16:38:30 -07006377
6378 /*need to free memory for the pointers used in the
6379 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006380 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6381 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006382 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006383
Jeff Johnson295189b2012-06-20 16:38:30 -07006384
6385 /* send response to UMAC*/
6386 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6387
6388 return;
6389}
Jeff Johnson295189b2012-06-20 16:38:30 -07006390/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006391 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 * Request to WDI to send set Max Tx Power Request
6393 */
6394 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6395 tMaxTxPowerParams *MaxTxPowerParams)
6396{
6397 WDI_Status status = WDI_STATUS_SUCCESS;
6398 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6399 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006400
Jeff Johnson295189b2012-06-20 16:38:30 -07006401 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006402 "------> %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006403
Jeff Johnson295189b2012-06-20 16:38:30 -07006404 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6405 sizeof(WDI_SetMaxTxPowerParamsType));
6406 if(NULL == wdiSetMaxTxPowerParams)
6407 {
6408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006410 VOS_ASSERT(0);
6411 return VOS_STATUS_E_NOMEM;
6412 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6414 if(NULL == pWdaParams)
6415 {
6416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006417 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 vos_mem_free(wdiSetMaxTxPowerParams);
6419 VOS_ASSERT(0);
6420 return VOS_STATUS_E_NOMEM;
6421 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 /* Copy.Max.Tx.Power Params to WDI structure */
6423 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6424 MaxTxPowerParams->bssId,
6425 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006426 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6427 MaxTxPowerParams->selfStaMacAddr,
6428 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006429 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6430 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006431 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006432 pWdaParams->pWdaContext = pWDA;
6433 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006434 /* store Params pass it to WDI */
6435 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006436 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6437 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006438 if(IS_WDI_STATUS_FAILURE(status))
6439 {
6440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6441 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6443 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006444 /* send response to UMAC*/
6445 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006446 }
6447 return CONVERT_WDI2VOS_STATUS(status);
6448
6449}
Jeff Johnson295189b2012-06-20 16:38:30 -07006450#endif
schang86c22c42013-03-13 18:41:24 -07006451
6452/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006453 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6454 * send the response to PE with power value received from WDI
6455 */
6456void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6457 *pwdiSetMaxTxPowerPerBandRsp,
6458 void* pUserData)
6459{
6460 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6461 tWDA_CbContext *pWDA = NULL;
6462 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6463
6464 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6465 "<------ %s ", __func__);
6466 if (NULL == pWdaParams)
6467 {
6468 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6469 "%s: pWdaParams received NULL", __func__);
6470 VOS_ASSERT(0);
6471 return ;
6472 }
6473 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6474 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6475 if ( NULL == pMxTxPwrPerBandParams )
6476 {
6477 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6478 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6479 VOS_ASSERT(0);
6480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6481 vos_mem_free(pWdaParams);
6482 return;
6483 }
6484
6485 /*need to free memory for the pointers used in the
6486 WDA Process.Set Max Tx Power Req function*/
6487 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6488 vos_mem_free(pWdaParams);
6489 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6490
6491 /* send response to UMAC*/
6492 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6493 pMxTxPwrPerBandParams, 0);
6494
6495 return;
6496}
6497
6498/*
6499 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6500 * Request to WDI to send set Max Tx Power Per band Request
6501 */
6502 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6503 tMaxTxPowerPerBandParams
6504 *MaxTxPowerPerBandParams)
6505{
6506 WDI_Status status = WDI_STATUS_SUCCESS;
6507 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6508 tWDA_ReqParams *pWdaParams = NULL;
6509
6510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6511 "------> %s ", __func__);
6512
6513 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6514 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6515
6516 if (NULL == wdiSetMxTxPwrPerBandParams)
6517 {
6518 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6519 "%s: VOS MEM Alloc Failure", __func__);
6520 VOS_ASSERT(0);
6521 return VOS_STATUS_E_NOMEM;
6522 }
6523 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6524 if (NULL == pWdaParams)
6525 {
6526 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6527 "%s: VOS MEM Alloc Failure", __func__);
6528 vos_mem_free(wdiSetMxTxPwrPerBandParams);
6529 VOS_ASSERT(0);
6530 return VOS_STATUS_E_NOMEM;
6531 }
6532 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
6533 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
6534 MaxTxPowerPerBandParams->bandInfo;
6535 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
6536 MaxTxPowerPerBandParams->power;
6537 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
6538 pWdaParams->pWdaContext = pWDA;
6539 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
6540 /* store Params pass it to WDI */
6541 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
6542 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
6543 WDA_SetMaxTxPowerPerBandCallBack,
6544 pWdaParams);
6545 if (IS_WDI_STATUS_FAILURE(status))
6546 {
6547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6548 "Failure in SET MAX TX Power REQ Params WDI API,"
6549 " free all the memory");
6550 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6551 vos_mem_free(pWdaParams);
6552 /* send response to UMAC*/
6553 WDA_SendMsg(pWDA,
6554 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6555 MaxTxPowerPerBandParams, 0);
6556 }
6557 return CONVERT_WDI2VOS_STATUS(status);
6558}
6559
6560/*
schang86c22c42013-03-13 18:41:24 -07006561 * FUNCTION: WDA_SetTxPowerCallBack
6562 * send the response to PE with power value received from WDI
6563 */
6564void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6565 void* pUserData)
6566{
6567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6568 tWDA_CbContext *pWDA = NULL;
6569 tSirSetTxPowerReq *pTxPowerParams = NULL;
6570
6571 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6572 "<------ %s ", __func__);
6573 if(NULL == pWdaParams)
6574 {
6575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6576 "%s: pWdaParams received NULL", __func__);
6577 VOS_ASSERT(0) ;
6578 return ;
6579 }
6580 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6581 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
6582 if(NULL == pTxPowerParams)
6583 {
6584 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6585 "%s: pTxPowerParams received NULL " ,__func__);
6586 VOS_ASSERT(0);
6587 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6588 vos_mem_free(pWdaParams);
6589 return ;
6590 }
6591
6592 /*need to free memory for the pointers used in the
6593 WDA Process.Set Max Tx Power Req function*/
6594 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6595 vos_mem_free(pWdaParams);
6596
6597 /* send response to UMAC*/
6598 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
6599 return;
6600}
6601
6602/*
6603 * FUNCTION: WDA_ProcessSetTxPowerReq
6604 * Request to WDI to send set Tx Power Request
6605 */
6606 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
6607 tSirSetTxPowerReq *txPowerParams)
6608{
6609 WDI_Status status = WDI_STATUS_SUCCESS;
6610 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
6611 tWDA_ReqParams *pWdaParams = NULL;
6612
6613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6614 "------> %s ", __func__);
6615
6616 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
6617 sizeof(WDI_SetTxPowerParamsType));
6618 if(NULL == wdiSetTxPowerParams)
6619 {
6620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6621 "%s: VOS MEM Alloc Failure", __func__);
6622 VOS_ASSERT(0);
6623 return VOS_STATUS_E_NOMEM;
6624 }
6625 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6626 if(NULL == pWdaParams)
6627 {
6628 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6629 "%s: VOS MEM Alloc Failure", __func__);
6630 vos_mem_free(wdiSetTxPowerParams);
6631 VOS_ASSERT(0);
6632 return VOS_STATUS_E_NOMEM;
6633 }
6634 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
6635 txPowerParams->bssIdx;
6636 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
6637 txPowerParams->mwPower;
6638 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
6639 pWdaParams->pWdaContext = pWDA;
6640 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
6641 /* store Params pass it to WDI */
6642 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
6643 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
6644 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
6645 if(IS_WDI_STATUS_FAILURE(status))
6646 {
6647 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6648 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
6649 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6650 vos_mem_free(pWdaParams);
6651 /* send response to UMAC*/
6652 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
6653 }
6654 return CONVERT_WDI2VOS_STATUS(status);
6655}
6656
Jeff Johnson295189b2012-06-20 16:38:30 -07006657/*
6658 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6659 * Free the memory. No need to send any response to PE in this case
6660 */
6661void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
6662{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006663 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6664
Jeff Johnson295189b2012-06-20 16:38:30 -07006665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006666 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006667
6668 if(NULL == pWdaParams)
6669 {
6670 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006671 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006672 VOS_ASSERT(0) ;
6673 return ;
6674 }
6675
6676 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6677 vos_mem_free(pWdaParams->wdaMsgParam) ;
6678 vos_mem_free(pWdaParams);
6679
Jeff Johnson295189b2012-06-20 16:38:30 -07006680 /*
6681 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
6682 * so just free the request param here
6683 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006684 return ;
6685}
6686
Jeff Johnson295189b2012-06-20 16:38:30 -07006687/*
6688 * FUNCTION: WDA_ProcessSetP2PGONOAReq
6689 * Request to WDI to set the P2P Group Owner Notice of Absence Req
6690 */
6691VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
6692 tP2pPsParams *pP2pPsConfigParams)
6693{
6694 WDI_Status status = WDI_STATUS_SUCCESS ;
6695 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
6696 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
6697 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006698 tWDA_ReqParams *pWdaParams = NULL;
6699
Jeff Johnson295189b2012-06-20 16:38:30 -07006700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006701 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006702 if(NULL == wdiSetP2PGONOAReqParam)
6703 {
6704 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006705 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006706 VOS_ASSERT(0);
6707 return VOS_STATUS_E_NOMEM;
6708 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006709
6710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6711 if(NULL == pWdaParams)
6712 {
6713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006714 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006715 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006716 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006717 VOS_ASSERT(0);
6718 return VOS_STATUS_E_NOMEM;
6719 }
6720
Jeff Johnson295189b2012-06-20 16:38:30 -07006721 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
6722 pP2pPsConfigParams->opp_ps;
6723 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
6724 pP2pPsConfigParams->ctWindow;
6725 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
6726 pP2pPsConfigParams->count;
6727 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
6728 pP2pPsConfigParams->duration;
6729 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
6730 pP2pPsConfigParams->interval;
6731 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
6732 pP2pPsConfigParams->single_noa_duration;
6733 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
6734 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006735
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
6737 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006738 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
6739
Jeff Johnson295189b2012-06-20 16:38:30 -07006740 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006741 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
6742 pWdaParams->pWdaContext = pWDA;
6743
Jeff Johnson295189b2012-06-20 16:38:30 -07006744 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006745 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
6746
Jeff Johnson295189b2012-06-20 16:38:30 -07006747 if(IS_WDI_STATUS_FAILURE(status))
6748 {
6749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6750 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006751 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6752 vos_mem_free(pWdaParams->wdaMsgParam);
6753 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006755 return CONVERT_WDI2VOS_STATUS(status);
6756
Jeff Johnson295189b2012-06-20 16:38:30 -07006757}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306758
6759#ifdef FEATURE_WLAN_TDLS
6760/*
6761 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
6762 * Free the memory. No need to send any response to PE in this case
6763 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306764void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
6765 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306766{
6767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6768 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306769 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306770
6771
6772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6773 "<------ %s " ,__func__);
6774 if(NULL == pWdaParams)
6775 {
6776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6777 "%s: pWdaParams received NULL", __func__);
6778 VOS_ASSERT(0) ;
6779 return ;
6780 }
6781 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6782
6783 if(NULL == pWdaParams)
6784 {
6785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6786 "%s: pWdaParams received NULL", __func__);
6787 VOS_ASSERT(0) ;
6788 return ;
6789 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306790 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
6791 if( NULL == pTdlsLinkEstablishParams )
6792 {
6793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6794 "%s: pTdlsLinkEstablishParams "
6795 "received NULL " ,__func__);
6796 VOS_ASSERT(0);
6797 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6798 vos_mem_free(pWdaParams);
6799 return ;
6800 }
6801 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
6802 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306803 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306804 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306805 /* send response to UMAC*/
6806 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
6807
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306808 return ;
6809}
6810
6811VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
6812 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
6813{
6814 WDI_Status status = WDI_STATUS_SUCCESS ;
6815 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
6816 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
6817 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
6818 tWDA_ReqParams *pWdaParams = NULL;
6819 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6820 "------> %s " ,__func__);
6821 if(NULL == wdiSetTDLSLinkEstablishReqParam)
6822 {
6823 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6824 "%s: VOS MEM Alloc Failure", __func__);
6825 VOS_ASSERT(0);
6826 return VOS_STATUS_E_NOMEM;
6827 }
6828 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6829 if(NULL == pWdaParams)
6830 {
6831 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6832 "%s: VOS MEM Alloc Failure", __func__);
6833 vos_mem_free(pTdlsLinkEstablishParams);
6834 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
6835 VOS_ASSERT(0);
6836 return VOS_STATUS_E_NOMEM;
6837 }
6838 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306839 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306840 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306841 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306842 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306843 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306844 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306845 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306846 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05306847 pTdlsLinkEstablishParams->isBufsta;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05306848
6849 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
6850 /* Store msg pointer from PE, as this will be used for response */
6851 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
6852 /* store Params pass it to WDI */
6853 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
6854 pWdaParams->pWdaContext = pWDA;
6855
6856 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
6857 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
6858 WDA_SetTDLSLinkEstablishReqParamsCallback,
6859 pWdaParams);
6860 if(IS_WDI_STATUS_FAILURE(status))
6861 {
6862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6863 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
6864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6865 vos_mem_free(pWdaParams->wdaMsgParam);
6866 vos_mem_free(pWdaParams);
6867 }
6868 return CONVERT_WDI2VOS_STATUS(status);
6869}
6870#endif
6871
6872
Jeff Johnson295189b2012-06-20 16:38:30 -07006873#ifdef WLAN_FEATURE_VOWIFI_11R
6874/*
6875 * FUNCTION: WDA_AggrAddTSReqCallback
6876 * send ADD AGGREGATED TS RSP back to PE
6877 */
6878void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
6879{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006880 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
6881 tWDA_CbContext *pWDA;
6882 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006883 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07006884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006885 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006886 if(NULL == pWdaParams)
6887 {
6888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006889 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006890 VOS_ASSERT(0) ;
6891 return ;
6892 }
6893
6894 pWDA = pWdaParams->pWdaContext;
6895 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006896
6897 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
6898 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006899 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006900 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006902
6903 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6904 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 return ;
6906}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07006907/*
6908 * FUNCTION: WDA_ProcessAddTSReq
6909 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
6910 */
6911VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
6912 tAggrAddTsParams *pAggrAddTsReqParams)
6913{
6914 WDI_Status status = WDI_STATUS_SUCCESS ;
6915 int i;
6916 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006917 tWDA_ReqParams *pWdaParams = NULL;
6918
6919
Jeff Johnson295189b2012-06-20 16:38:30 -07006920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006921 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006922 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
6923 sizeof(WDI_AggrAddTSReqParamsType)) ;
6924 if(NULL == wdiAggrAddTSReqParam)
6925 {
6926 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006927 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006928 VOS_ASSERT(0);
6929 return VOS_STATUS_E_NOMEM;
6930 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006931
6932
6933 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6934 if(NULL == pWdaParams)
6935 {
6936 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006937 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006938 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07006939 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006940 VOS_ASSERT(0);
6941 return VOS_STATUS_E_NOMEM;
6942 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006943 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
6944 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
6945 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006946 for( i = 0; i < WDI_MAX_NO_AC; i++ )
6947 {
6948 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
6949 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
6950 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07006951 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
6952 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
6953 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
6954 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
6955 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
6956 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
6957 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
6958 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
6959 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
6960 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
6961 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
6962 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
6963 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
6964 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
6965 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
6966 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07006967 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
6968 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07006969 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
6970 pAggrAddTsReqParams->tspec[i].nomMsduSz;
6971 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
6972 pAggrAddTsReqParams->tspec[i].maxMsduSz;
6973 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
6974 pAggrAddTsReqParams->tspec[i].minSvcInterval;
6975 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
6976 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
6977 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
6978 pAggrAddTsReqParams->tspec[i].inactInterval;
6979 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
6980 pAggrAddTsReqParams->tspec[i].suspendInterval;
6981 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
6982 pAggrAddTsReqParams->tspec[i].svcStartTime;
6983 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
6984 pAggrAddTsReqParams->tspec[i].minDataRate;
6985 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
6986 pAggrAddTsReqParams->tspec[i].meanDataRate;
6987 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
6988 pAggrAddTsReqParams->tspec[i].peakDataRate;
6989 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
6990 pAggrAddTsReqParams->tspec[i].maxBurstSz;
6991 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
6992 pAggrAddTsReqParams->tspec[i].delayBound;
6993 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
6994 pAggrAddTsReqParams->tspec[i].minPhyRate;
6995 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
6996 pAggrAddTsReqParams->tspec[i].surplusBw;
6997 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
6998 pAggrAddTsReqParams->tspec[i].mediumTime;
6999 }
7000
7001 /* TODO: tAggrAddTsParams doesn't have the following fields */
7002#if 0
7003 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7004 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7005 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7006 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7007#endif
7008 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7009
7010 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007011 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007012 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007013 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7014
7015 pWdaParams->pWdaContext = pWDA;
7016
Jeff Johnson295189b2012-06-20 16:38:30 -07007017 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007018 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7019
Jeff Johnson295189b2012-06-20 16:38:30 -07007020 if(IS_WDI_STATUS_FAILURE(status))
7021 {
7022 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7023 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007024 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7025 vos_mem_free(pWdaParams);
7026
7027 /* send the failure response back to PE*/
7028 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7029 {
7030 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7031 }
7032
7033 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7034 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007035 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007036 return CONVERT_WDI2VOS_STATUS(status) ;
7037}
7038#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007039/*
7040 * FUNCTION: WDA_EnterImpsReqCallback
7041 * send Enter IMPS RSP back to PE
7042 */
7043void WDA_EnterImpsReqCallback(WDI_Status status, void* pUserData)
7044{
7045 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007047 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007048 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007049 return ;
7050}
Jeff Johnson295189b2012-06-20 16:38:30 -07007051/*
7052 * FUNCTION: WDA_ProcessEnterImpsReq
7053 * Request to WDI to Enter IMPS power state.
7054 */
7055VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7056{
7057 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007059 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007060 status = WDI_EnterImpsReq((WDI_EnterImpsRspCb)WDA_EnterImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007061 if(IS_WDI_STATUS_FAILURE(status))
7062 {
7063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7064 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007065 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007066 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007067 return CONVERT_WDI2VOS_STATUS(status) ;
7068}
Jeff Johnson295189b2012-06-20 16:38:30 -07007069/*
7070 * FUNCTION: WDA_ExitImpsReqCallback
7071 * send Exit IMPS RSP back to PE
7072 */
7073void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7074{
7075 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007077 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007078 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007079 return ;
7080}
Jeff Johnson295189b2012-06-20 16:38:30 -07007081/*
7082 * FUNCTION: WDA_ProcessExitImpsReq
7083 * Request to WDI to Exit IMPS power state.
7084 */
7085VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7086{
7087 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007089 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007090 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007091 if(IS_WDI_STATUS_FAILURE(status))
7092 {
7093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7094 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007095 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007096 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007097 return CONVERT_WDI2VOS_STATUS(status) ;
7098}
Jeff Johnson295189b2012-06-20 16:38:30 -07007099/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007100 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007101 * send Enter BMPS RSP back to PE
7102 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007103void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007104{
7105 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7106 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007107 tEnterBmpsParams *pEnterBmpsRspParams;
7108
Jeff Johnson295189b2012-06-20 16:38:30 -07007109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007111 if(NULL == pWdaParams)
7112 {
7113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007115 VOS_ASSERT(0) ;
7116 return ;
7117 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007118
7119 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7120 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7121
7122 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007123 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007124
7125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007126 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007127 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7128
Jeff Johnson295189b2012-06-20 16:38:30 -07007129 return ;
7130}
Jeff Johnson295189b2012-06-20 16:38:30 -07007131/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007132 * FUNCTION: WDA_EnterBmpsReqCallback
7133 * Free memory and send Enter BMPS RSP back to PE.
7134 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7135 */
7136void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7137{
7138 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7139 tWDA_CbContext *pWDA;
7140 tEnterBmpsParams *pEnterBmpsRspParams;
7141
7142 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7143 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7144
7145 if(NULL == pWdaParams)
7146 {
7147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7148 "%s: pWdaParams received NULL", __func__);
7149 VOS_ASSERT(0);
7150 return;
7151 }
7152
7153 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7154 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7155 pEnterBmpsRspParams->status = wdiStatus;
7156
7157 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7158 {
7159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7160 vos_mem_free(pWdaParams);
7161 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7162 }
7163
7164 return;
7165}
7166/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 * FUNCTION: WDA_ProcessEnterBmpsReq
7168 * Request to WDI to Enter BMPS power state.
7169 */
7170VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7171 tEnterBmpsParams *pEnterBmpsReqParams)
7172{
7173 WDI_Status status = WDI_STATUS_SUCCESS;
7174 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7175 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007177 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007178 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7179 {
7180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007181 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007182 VOS_ASSERT(0);
7183 return VOS_STATUS_E_FAILURE;
7184 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7186 if (NULL == wdiEnterBmpsReqParams)
7187 {
7188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007190 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007191 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7192 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007193 return VOS_STATUS_E_NOMEM;
7194 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007195 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7196 if (NULL == pWdaParams)
7197 {
7198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007199 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007200 VOS_ASSERT(0);
7201 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007202 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7203 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 return VOS_STATUS_E_NOMEM;
7205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007206 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7207 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7208 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7209 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Jeff Johnson295189b2012-06-20 16:38:30 -07007210 // For CCX and 11R Roaming
7211 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7212 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7213 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007214 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7215 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007216
Jeff Johnson295189b2012-06-20 16:38:30 -07007217 /* Store param pointer as passed in by caller */
7218 /* store Params pass it to WDI */
7219 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007220 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007221 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007222 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007223 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007224 if (IS_WDI_STATUS_FAILURE(status))
7225 {
7226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7227 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007229 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007231 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007232 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007233 return CONVERT_WDI2VOS_STATUS(status);
7234}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007235
7236
7237static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7238 WDI_Status wdiStatus,
7239 tExitBmpsParams *pExitBmpsReqParams)
7240{
7241 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7242
7243 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7244}
7245
7246
Jeff Johnson295189b2012-06-20 16:38:30 -07007247/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007248 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007249 * send Exit BMPS RSP back to PE
7250 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007251void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007252{
7253 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7254 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007255 tExitBmpsParams *pExitBmpsRspParams;
7256
Jeff Johnson295189b2012-06-20 16:38:30 -07007257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007258 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007259 if(NULL == pWdaParams)
7260 {
7261 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007262 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007263 VOS_ASSERT(0) ;
7264 return ;
7265 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007266
7267 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7268 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7269
7270 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007271 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007272
Jeff Johnson295189b2012-06-20 16:38:30 -07007273 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7274 vos_mem_free(pWdaParams) ;
7275
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007276 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007277 return ;
7278}
Jeff Johnson295189b2012-06-20 16:38:30 -07007279/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007280 * FUNCTION: WDA_ExitBmpsReqCallback
7281 * Free memory and send Exit BMPS RSP back to PE.
7282 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7283 */
7284void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7285{
7286 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7287 tWDA_CbContext *pWDA;
7288 tExitBmpsParams *pExitBmpsRspParams;
7289
7290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7291 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7292
7293 if(NULL == pWdaParams)
7294 {
7295 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7296 "%s: pWdaParams received NULL", __func__);
7297 VOS_ASSERT(0);
7298 return;
7299 }
7300
7301 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7302 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7303 pExitBmpsRspParams->status = wdiStatus;
7304
7305 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7306 {
7307 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7308 vos_mem_free(pWdaParams);
7309 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7310 }
7311
7312 return;
7313}
7314/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007315 * FUNCTION: WDA_ProcessExitBmpsReq
7316 * Request to WDI to Exit BMPS power state.
7317 */
7318VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7319 tExitBmpsParams *pExitBmpsReqParams)
7320{
7321 WDI_Status status = WDI_STATUS_SUCCESS ;
7322 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7323 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7324 sizeof(WDI_ExitBmpsReqParamsType)) ;
7325 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007327 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007328 if(NULL == wdiExitBmpsReqParams)
7329 {
7330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007331 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007332 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007333 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007334 return VOS_STATUS_E_NOMEM;
7335 }
7336 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7337 if(NULL == pWdaParams)
7338 {
7339 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007340 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007341 VOS_ASSERT(0);
7342 vos_mem_free(wdiExitBmpsReqParams);
7343 return VOS_STATUS_E_NOMEM;
7344 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007345 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007346
7347 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7348
Yue Ma7f44bbe2013-04-12 11:47:39 -07007349 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7350 wdiExitBmpsReqParams->pUserData = pWdaParams;
7351
Jeff Johnson295189b2012-06-20 16:38:30 -07007352 /* Store param pointer as passed in by caller */
7353 /* store Params pass it to WDI */
7354 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7355 pWdaParams->pWdaContext = pWDA;
7356 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007357 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007358 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007359 if(IS_WDI_STATUS_FAILURE(status))
7360 {
7361 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7362 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007363 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7364 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007365 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007366 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007367 return CONVERT_WDI2VOS_STATUS(status) ;
7368}
Jeff Johnson295189b2012-06-20 16:38:30 -07007369/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007370 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007371 * send Enter UAPSD RSP back to PE
7372 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007373void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007374{
7375 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7376 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007377 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007378 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007379 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007380 if(NULL == pWdaParams)
7381 {
7382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007383 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007384 VOS_ASSERT(0) ;
7385 return ;
7386 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007387
7388 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7389 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7390
7391 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007392 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007393
Jeff Johnson295189b2012-06-20 16:38:30 -07007394 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7395 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007396 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007397 return ;
7398}
Jeff Johnson295189b2012-06-20 16:38:30 -07007399/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007400 * FUNCTION: WDA_EnterUapsdReqCallback
7401 * Free memory and send Enter UAPSD RSP back to PE.
7402 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7403 */
7404void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7405{
7406 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7407 tWDA_CbContext *pWDA;
7408 tUapsdParams *pEnterUapsdRsqParams;
7409
7410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7411 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7412
7413 if(NULL == pWdaParams)
7414 {
7415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7416 "%s: pWdaParams received NULL", __func__);
7417 VOS_ASSERT(0);
7418 return;
7419 }
7420
7421 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7422 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7423 pEnterUapsdRsqParams->status = wdiStatus;
7424
7425 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7426 {
7427 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7428 vos_mem_free(pWdaParams);
7429 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
7430 }
7431
7432 return;
7433}
7434/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007435 * FUNCTION: WDA_ProcessEnterUapsdReq
7436 * Request to WDI to Enter UAPSD power state.
7437 */
7438VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
7439 tUapsdParams *pEnterUapsdReqParams)
7440{
7441 WDI_Status status = WDI_STATUS_SUCCESS ;
7442 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
7443 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
7444 sizeof(WDI_EnterUapsdReqParamsType)) ;
7445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007448 if(NULL == wdiEnterUapsdReqParams)
7449 {
7450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007452 VOS_ASSERT(0);
7453 return VOS_STATUS_E_NOMEM;
7454 }
7455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7456 if(NULL == pWdaParams)
7457 {
7458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007460 VOS_ASSERT(0);
7461 vos_mem_free(wdiEnterUapsdReqParams);
7462 return VOS_STATUS_E_NOMEM;
7463 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007464 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
7465 pEnterUapsdReqParams->beDeliveryEnabled;
7466 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
7467 pEnterUapsdReqParams->beTriggerEnabled;
7468 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
7469 pEnterUapsdReqParams->bkDeliveryEnabled;
7470 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
7471 pEnterUapsdReqParams->bkTriggerEnabled;
7472 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
7473 pEnterUapsdReqParams->viDeliveryEnabled;
7474 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
7475 pEnterUapsdReqParams->viTriggerEnabled;
7476 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
7477 pEnterUapsdReqParams->voDeliveryEnabled;
7478 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
7479 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07007480 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007481
Yue Ma7f44bbe2013-04-12 11:47:39 -07007482 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
7483 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007484
Jeff Johnson295189b2012-06-20 16:38:30 -07007485 /* Store param pointer as passed in by caller */
7486 /* store Params pass it to WDI */
7487 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
7488 pWdaParams->pWdaContext = pWDA;
7489 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007490 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007491 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007492 if(IS_WDI_STATUS_FAILURE(status))
7493 {
7494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7495 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
7496 vos_mem_free(pWdaParams->wdaMsgParam) ;
7497 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7498 vos_mem_free(pWdaParams) ;
7499 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007500 return CONVERT_WDI2VOS_STATUS(status) ;
7501}
Jeff Johnson295189b2012-06-20 16:38:30 -07007502/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007503 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007504 * send Exit UAPSD RSP back to PE
7505 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007506void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007507{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007508
7509 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7510 tWDA_CbContext *pWDA;
7511 tExitUapsdParams *pExitUapsdRspParams;
7512
Jeff Johnson295189b2012-06-20 16:38:30 -07007513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007514 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007515 if(NULL == pWdaParams)
7516 {
7517 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007518 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007519 VOS_ASSERT(0);
7520 return;
7521 }
7522
7523 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7524 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7525
7526 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007527 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007528
7529 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7530 vos_mem_free(pWdaParams) ;
7531
7532 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 return ;
7534}
Jeff Johnson295189b2012-06-20 16:38:30 -07007535/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007536 * FUNCTION: WDA_ExitUapsdReqCallback
7537 * Free memory and send Exit UAPSD RSP back to PE.
7538 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
7539 */
7540void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7541{
7542 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7543 tWDA_CbContext *pWDA;
7544 tExitUapsdParams *pExitUapsdRspParams;
7545
7546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7547 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7548
7549 if(NULL == pWdaParams)
7550 {
7551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7552 "%s: pWdaParams received NULL", __func__);
7553 VOS_ASSERT(0);
7554 return;
7555 }
7556
7557 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7558 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
7559 pExitUapsdRspParams->status = wdiStatus;
7560
7561 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7562 {
7563 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7564 vos_mem_free(pWdaParams);
7565 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
7566 }
7567
7568 return;
7569}
7570/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007571 * FUNCTION: WDA_ProcessExitUapsdReq
7572 * Request to WDI to Exit UAPSD power state.
7573 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007574VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
7575 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07007576{
7577 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007578 tWDA_ReqParams *pWdaParams ;
7579 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
7580 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
7581 sizeof(WDI_ExitUapsdReqParamsType)) ;
7582
Jeff Johnson295189b2012-06-20 16:38:30 -07007583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007584 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007585
7586 if(NULL == wdiExitUapsdReqParams)
7587 {
7588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007589 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007590 VOS_ASSERT(0);
7591 return VOS_STATUS_E_NOMEM;
7592 }
7593 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7594 if(NULL == pWdaParams)
7595 {
7596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007597 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007598 VOS_ASSERT(0);
7599 vos_mem_free(wdiExitUapsdReqParams);
7600 return VOS_STATUS_E_NOMEM;
7601 }
7602
7603 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007604 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
7605 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007606
7607 /* Store param pointer as passed in by caller */
7608 /* store Params pass it to WDI */
7609 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
7610 pWdaParams->pWdaContext = pWDA;
7611 pWdaParams->wdaMsgParam = pExitUapsdParams;
7612
Yue Ma7f44bbe2013-04-12 11:47:39 -07007613 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007614 if(IS_WDI_STATUS_FAILURE(status))
7615 {
7616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7617 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007618 vos_mem_free(pWdaParams->wdaMsgParam) ;
7619 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7620 vos_mem_free(pWdaParams) ;
7621
Jeff Johnson295189b2012-06-20 16:38:30 -07007622 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007623 return CONVERT_WDI2VOS_STATUS(status) ;
7624}
7625
Jeff Johnson295189b2012-06-20 16:38:30 -07007626/*
7627 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
7628 *
7629 */
7630void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
7631{
7632 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07007633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007634 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007635 if(NULL == pWdaParams)
7636 {
7637 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007638 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007639 VOS_ASSERT(0) ;
7640 return ;
7641 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007642 if( pWdaParams != NULL )
7643 {
7644 if( pWdaParams->wdaWdiApiMsgParam != NULL )
7645 {
7646 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7647 }
7648 if( pWdaParams->wdaMsgParam != NULL )
7649 {
7650 vos_mem_free(pWdaParams->wdaMsgParam) ;
7651 }
7652 vos_mem_free(pWdaParams) ;
7653 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007654 return ;
7655}
Jeff Johnson295189b2012-06-20 16:38:30 -07007656/*
7657 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
7658 * Request to WDI to set the power save params at start.
7659 */
7660VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
7661 tSirPowerSaveCfg *pPowerSaveCfg)
7662{
7663 WDI_Status status = WDI_STATUS_SUCCESS ;
7664 tHalCfg *tlvStruct = NULL ;
7665 tANI_U8 *tlvStructStart = NULL ;
7666 v_PVOID_t *configParam;
7667 tANI_U32 configParamSize;
7668 tANI_U32 *configDataValue;
7669 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
7670 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007672 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
7674 {
7675 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007676 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007677 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007678 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007679 return VOS_STATUS_E_FAILURE;
7680 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
7682 if (NULL == wdiPowerSaveCfg)
7683 {
7684 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007685 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007687 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007688 return VOS_STATUS_E_NOMEM;
7689 }
7690 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7691 if(NULL == pWdaParams)
7692 {
7693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007694 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007695 VOS_ASSERT(0);
7696 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007697 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007698 return VOS_STATUS_E_NOMEM;
7699 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
7701 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07007702 if(NULL == configParam)
7703 {
7704 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08007705 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007706 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07007707 vos_mem_free(pWdaParams);
7708 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07007709 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007710 return VOS_STATUS_E_NOMEM;
7711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007712 vos_mem_set(configParam, configParamSize, 0);
7713 wdiPowerSaveCfg->pConfigBuffer = configParam;
7714 tlvStruct = (tHalCfg *)configParam;
7715 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07007716 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
7717 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
7718 tlvStruct->length = sizeof(tANI_U32);
7719 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7720 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007721 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7722 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007723 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
7724 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
7725 tlvStruct->length = sizeof(tANI_U32);
7726 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7727 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07007728 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7729 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007730 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
7731 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
7732 tlvStruct->length = sizeof(tANI_U32);
7733 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7734 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07007735 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7736 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007737 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
7738 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
7739 tlvStruct->length = sizeof(tANI_U32);
7740 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7741 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07007742 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7743 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007744 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
7745 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
7746 tlvStruct->length = sizeof(tANI_U32);
7747 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7748 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07007749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7750 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007751 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
7752 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
7753 tlvStruct->length = sizeof(tANI_U32);
7754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7755 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07007756 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7757 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007758 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
7759 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
7760 tlvStruct->length = sizeof(tANI_U32);
7761 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7762 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7764 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007765 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
7766 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
7767 tlvStruct->length = sizeof(tANI_U32);
7768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7769 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
7770 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7771 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007772 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
7773 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
7774 tlvStruct->length = sizeof(tANI_U32);
7775 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7776 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
7777 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7778 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007779 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
7780 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
7781 tlvStruct->length = sizeof(tANI_U32);
7782 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7783 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07007784 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7785 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007786 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
7787 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
7788 tlvStruct->length = sizeof(tANI_U32);
7789 configDataValue = (tANI_U32 *)(tlvStruct + 1);
7790 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
7792 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007793 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007794 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07007795 /* store Params pass it to WDI */
7796 pWdaParams->wdaMsgParam = configParam;
7797 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
7798 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007799 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
7800 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007801 if(IS_WDI_STATUS_FAILURE(status))
7802 {
7803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7804 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
7805 vos_mem_free(pWdaParams->wdaMsgParam);
7806 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7807 vos_mem_free(pWdaParams);
7808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07007810 return CONVERT_WDI2VOS_STATUS(status);
7811}
Jeff Johnson295189b2012-06-20 16:38:30 -07007812/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007813 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007814 *
7815 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007816void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007817{
Yue Ma7f44bbe2013-04-12 11:47:39 -07007818 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7819
Jeff Johnson295189b2012-06-20 16:38:30 -07007820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007821 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07007822
7823 if(NULL == pWdaParams)
7824 {
7825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7826 "%s: pWdaParams received NULL", __func__);
7827 VOS_ASSERT(0);
7828 return ;
7829 }
7830
7831 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007832 vos_mem_free(pWdaParams);
7833
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 return ;
7835}
Jeff Johnson295189b2012-06-20 16:38:30 -07007836/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007837 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
7838 * Free memory.
7839 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
7840 */
7841void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7842{
7843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7844
7845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7846 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7847
7848 if(NULL == pWdaParams)
7849 {
7850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7851 "%s: pWdaParams received NULL", __func__);
7852 VOS_ASSERT(0);
7853 return;
7854 }
7855
7856 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7857 {
7858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7859 vos_mem_free(pWdaParams);
7860 }
7861
7862 return;
7863}
7864/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007865 * FUNCTION: WDA_SetUapsdAcParamsReq
7866 * Request to WDI to set the UAPSD params for an ac (sta mode).
7867 */
7868VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
7869 tUapsdInfo *pUapsdInfo)
7870{
7871 WDI_Status status = WDI_STATUS_SUCCESS;
7872 tWDA_CbContext *pWDA = NULL ;
7873 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
7874 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
7875 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
7876 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007878 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007879 if(NULL == wdiUapsdParams)
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 return VOS_STATUS_E_NOMEM;
7885 }
7886 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7887 if(NULL == pWdaParams)
7888 {
7889 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007890 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007891 VOS_ASSERT(0);
7892 vos_mem_free(wdiUapsdParams);
7893 return VOS_STATUS_E_NOMEM;
7894 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007895 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
7896 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
7897 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
7898 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
7899 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
7900 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007901 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
7902 wdiUapsdParams->pUserData = pWdaParams;
7903
Jeff Johnson295189b2012-06-20 16:38:30 -07007904 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07007905 pWdaParams->pWdaContext = pWDA;
7906 /* Store param pointer as passed in by caller */
7907 pWdaParams->wdaMsgParam = pUapsdInfo;
7908 /* store Params pass it to WDI */
7909 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007910 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007911 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07007912 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 if(IS_WDI_STATUS_FAILURE(status))
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7916 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
7917 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7918 vos_mem_free(pWdaParams);
7919 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007920 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
7921 return VOS_STATUS_SUCCESS;
7922 else
7923 return VOS_STATUS_E_FAILURE;
7924
Jeff Johnson295189b2012-06-20 16:38:30 -07007925}
7926/*
7927 * FUNCTION: WDA_ClearUapsdAcParamsReq
7928 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
7929 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
7930 * and again enter the UPASD with the modified params. Hence the disable
7931 * function was kept empty.
7932 *
7933 */
7934VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
7935{
7936 /* do nothing */
7937 return VOS_STATUS_SUCCESS;
7938}
Jeff Johnson295189b2012-06-20 16:38:30 -07007939/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007940 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007941 *
7942 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007943void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007944{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007945 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7946
Jeff Johnson295189b2012-06-20 16:38:30 -07007947 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007948 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007949
7950 if(NULL == pWdaParams)
7951 {
7952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007953 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007954 VOS_ASSERT(0) ;
7955 return ;
7956 }
7957
7958 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7959 vos_mem_free(pWdaParams->wdaMsgParam);
7960 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007961
Jeff Johnson295189b2012-06-20 16:38:30 -07007962 //print a msg, nothing else to do
7963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007964 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 return ;
7966}
Jeff Johnson295189b2012-06-20 16:38:30 -07007967/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007968 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
7969 * Free memory.
7970 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
7971 */
7972void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
7973{
7974 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7975
7976 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7977 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7978
7979 if(NULL == pWdaParams)
7980 {
7981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7982 "%s: pWdaParams received NULL", __func__);
7983 VOS_ASSERT(0);
7984 return;
7985 }
7986
7987 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7988 {
7989 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7990 vos_mem_free(pWdaParams->wdaMsgParam);
7991 vos_mem_free(pWdaParams);
7992 }
7993
7994 return;
7995}
7996/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007997 * FUNCTION: WDA_UpdateUapsdParamsReq
7998 * Request to WDI to update UAPSD params (in softAP mode) for a station.
7999 */
8000VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8001 tUpdateUapsdParams* pUpdateUapsdInfo)
8002{
8003 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008004 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008005 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8006 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8007 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008008 tWDA_ReqParams *pWdaParams = NULL;
8009
Jeff Johnson295189b2012-06-20 16:38:30 -07008010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008011 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008012 if(NULL == wdiUpdateUapsdParams)
8013 {
8014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008015 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008016 VOS_ASSERT(0);
8017 return VOS_STATUS_E_NOMEM;
8018 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008019 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8020 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8021 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008022 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8023 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008024
8025 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8026 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008027 {
8028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008029 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008030 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008031 vos_mem_free(pUpdateUapsdInfo);
8032 vos_mem_free(wdiUpdateUapsdParams);
8033 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008034 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008035 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008036 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008038 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8039 pWdaParams->pWdaContext = pWDA;
8040
Jeff Johnson43971f52012-07-17 12:26:56 -07008041 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008042 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008043 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008044
Jeff Johnson43971f52012-07-17 12:26:56 -07008045 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008046 {
8047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8048 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008049 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8050 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8051 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008052 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008053 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008054 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008055}
Jeff Johnson295189b2012-06-20 16:38:30 -07008056/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008057 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008058 *
8059 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008060void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008061{
8062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008064 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008065 if(WDI_STATUS_SUCCESS != wdiStatus)
8066 {
8067 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008068 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008069 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 if(NULL == pWdaParams)
8071 {
8072 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008073 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008074 VOS_ASSERT(0) ;
8075 return ;
8076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8078 vos_mem_free(pWdaParams->wdaMsgParam);
8079 vos_mem_free(pWdaParams);
8080 return ;
8081}
Jeff Johnson295189b2012-06-20 16:38:30 -07008082/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008083 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8084 * Free memory.
8085 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8086 */
8087void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8088{
8089 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8090
8091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8092 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8093
8094 if(NULL == pWdaParams)
8095 {
8096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8097 "%s: pWdaParams received NULL", __func__);
8098 VOS_ASSERT(0);
8099 return;
8100 }
8101
8102 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8103 {
8104 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8105 vos_mem_free(pWdaParams->wdaMsgParam);
8106 vos_mem_free(pWdaParams);
8107 }
8108
8109 return;
8110}
8111/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008112 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8113 *
8114 */
8115VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8116 tSirWlanSetRxpFilters *pWlanSuspendParam)
8117{
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008119 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008120 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams =
8121 (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8122 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
8123 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008126 if(NULL == wdiRxpFilterParams)
8127 {
8128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008130 VOS_ASSERT(0);
8131 vos_mem_free(pWlanSuspendParam);
8132 return VOS_STATUS_E_NOMEM;
8133 }
8134 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8135 if(NULL == pWdaParams)
8136 {
8137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008139 VOS_ASSERT(0);
8140 vos_mem_free(wdiRxpFilterParams);
8141 vos_mem_free(pWlanSuspendParam);
8142 return VOS_STATUS_E_NOMEM;
8143 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008144 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8145 pWlanSuspendParam->setMcstBcstFilter;
8146 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8147 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8148
Yue Ma7f44bbe2013-04-12 11:47:39 -07008149 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8150 wdiRxpFilterParams->pUserData = pWdaParams;
8151
Jeff Johnson295189b2012-06-20 16:38:30 -07008152 pWdaParams->pWdaContext = pWDA;
8153 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8154 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008155 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008156 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008157 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008158 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008159 {
8160 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8161 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008162 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008163 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8164 vos_mem_free(pWdaParams->wdaMsgParam);
8165 vos_mem_free(pWdaParams);
8166 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008167 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008168}
Jeff Johnson295189b2012-06-20 16:38:30 -07008169/*
8170 * FUNCTION: WDA_WdiIndicationCallback
8171 *
8172 */
8173void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8174 void* pUserData)
8175{
8176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008177 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008178}
Jeff Johnson295189b2012-06-20 16:38:30 -07008179/*
8180 * FUNCTION: WDA_ProcessWlanSuspendInd
8181 *
8182 */
8183VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8184 tSirWlanSuspendParam *pWlanSuspendParam)
8185{
8186 WDI_Status wdiStatus;
8187 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008189 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008190 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8191 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8192 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8193 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008195 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8196 if(WDI_STATUS_PENDING == wdiStatus)
8197 {
8198 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008199 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008200 }
8201 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8202 {
8203 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008204 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008205 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008206 vos_mem_free(pWlanSuspendParam);
8207 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8208}
8209
Chet Lanctot186b5732013-03-18 10:26:30 -07008210#ifdef WLAN_FEATURE_11W
8211/*
8212 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8213 *
8214 */
8215VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8216 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8217{
8218 WDI_Status wdiStatus;
8219 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8221 "------> %s ", __func__);
8222
8223 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8224 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8225 sizeof(tSirMacAddr));
8226
8227 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8228 wdiExclUnencryptParams.pUserData = pWDA;
8229
8230 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8231 if(WDI_STATUS_PENDING == wdiStatus)
8232 {
8233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8234 "Pending received for %s:%d ", __func__, __LINE__ );
8235 }
8236 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8237 {
8238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8239 "Failure in %s:%d ", __func__, __LINE__ );
8240 }
8241 vos_mem_free(pExclUnencryptParam);
8242 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8243}
8244#endif
8245
Jeff Johnson295189b2012-06-20 16:38:30 -07008246/*
8247 * FUNCTION: WDA_ProcessWlanResumeCallback
8248 *
8249 */
8250void WDA_ProcessWlanResumeCallback(
8251 WDI_SuspendResumeRspParamsType *resumeRspParams,
8252 void* pUserData)
8253{
8254 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
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__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008257 if(NULL == pWdaParams)
8258 {
8259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008260 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008261 VOS_ASSERT(0) ;
8262 return ;
8263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8265 {
8266 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008267 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008268 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008269 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8270 vos_mem_free(pWdaParams->wdaMsgParam);
8271 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008272 return ;
8273}
Jeff Johnson295189b2012-06-20 16:38:30 -07008274/*
8275 * FUNCTION: WDA_ProcessWlanResumeReq
8276 *
8277 */
8278VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8279 tSirWlanResumeParam *pWlanResumeParam)
8280{
8281 WDI_Status wdiStatus;
8282 WDI_ResumeParamsType *wdiResumeParams =
8283 (WDI_ResumeParamsType *)vos_mem_malloc(
8284 sizeof(WDI_ResumeParamsType) ) ;
8285 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008286 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008287 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008288 if(NULL == wdiResumeParams)
8289 {
8290 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008291 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 VOS_ASSERT(0);
8293 return VOS_STATUS_E_NOMEM;
8294 }
8295 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8296 if(NULL == pWdaParams)
8297 {
8298 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008299 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008300 VOS_ASSERT(0);
8301 vos_mem_free(wdiResumeParams);
8302 return VOS_STATUS_E_NOMEM;
8303 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008304 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8305 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008307 wdiResumeParams->wdiReqStatusCB = NULL;
8308 pWdaParams->wdaMsgParam = pWlanResumeParam;
8309 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8310 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008311 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8312 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8313 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008314 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8315 {
8316 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8317 "Failure in Host Resume REQ WDI API, free all the memory " );
8318 VOS_ASSERT(0);
8319 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8320 vos_mem_free(pWdaParams->wdaMsgParam);
8321 vos_mem_free(pWdaParams);
8322 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008323 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8324}
8325
Jeff Johnson295189b2012-06-20 16:38:30 -07008326/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008327 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008328 *
8329 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008330void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008331{
8332 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008333 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008334 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008335 if(NULL == pWdaParams)
8336 {
8337 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008338 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008339 VOS_ASSERT(0) ;
8340 return ;
8341 }
8342
8343 vos_mem_free(pWdaParams->wdaMsgParam) ;
8344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8345 vos_mem_free(pWdaParams) ;
8346 /*
8347 * No respone required for SetBeaconFilter req so just free the request
8348 * param here
8349 */
8350
Jeff Johnson295189b2012-06-20 16:38:30 -07008351 return ;
8352}
Jeff Johnson295189b2012-06-20 16:38:30 -07008353/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008354 * FUNCTION: WDA_SetBeaconFilterReqCallback
8355 * Free memory.
8356 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8357 */
8358void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8359{
8360 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8361
8362 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8363 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8364
8365 if(NULL == pWdaParams)
8366 {
8367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8368 "%s: pWdaParams received NULL", __func__);
8369 VOS_ASSERT(0);
8370 return;
8371 }
8372
8373 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8374 {
8375 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8376 vos_mem_free(pWdaParams->wdaMsgParam);
8377 vos_mem_free(pWdaParams);
8378 }
8379
8380 return;
8381}
8382/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008383 * FUNCTION: WDA_SetBeaconFilterReq
8384 * Request to WDI to send the beacon filtering related information.
8385 */
8386VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8387 tBeaconFilterMsg* pBeaconFilterInfo)
8388{
8389 WDI_Status status = WDI_STATUS_SUCCESS;
8390 tANI_U8 *dstPtr, *srcPtr;
8391 tANI_U8 filterLength;
8392 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8393 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8394 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8395 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008397 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008398 if(NULL == wdiBeaconFilterInfo)
8399 {
8400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008402 VOS_ASSERT(0);
8403 return VOS_STATUS_E_NOMEM;
8404 }
8405 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8406 if(NULL == pWdaParams)
8407 {
8408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008410 VOS_ASSERT(0);
8411 vos_mem_free(wdiBeaconFilterInfo);
8412 return VOS_STATUS_E_NOMEM;
8413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008414 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
8415 pBeaconFilterInfo->beaconInterval;
8416 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
8417 pBeaconFilterInfo->capabilityInfo;
8418 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
8419 pBeaconFilterInfo->capabilityMask;
8420 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07008421
8422 //Fill the BssIdx
8423 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
8424
Jeff Johnson295189b2012-06-20 16:38:30 -07008425 //Fill structure with info contained in the beaconFilterTable
8426 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
8427 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
8428 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
8429 if(WDI_BEACON_FILTER_LEN < filterLength)
8430 {
8431 filterLength = WDI_BEACON_FILTER_LEN;
8432 }
8433 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008434 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
8435 wdiBeaconFilterInfo->pUserData = pWdaParams;
8436
Jeff Johnson295189b2012-06-20 16:38:30 -07008437 /* Store param pointer as passed in by caller */
8438 /* store Params pass it to WDI */
8439 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
8440 pWdaParams->pWdaContext = pWDA;
8441 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
8442
Jeff Johnson295189b2012-06-20 16:38:30 -07008443 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008444 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008445 if(IS_WDI_STATUS_FAILURE(status))
8446 {
8447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8448 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
8449 vos_mem_free(pWdaParams->wdaMsgParam) ;
8450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8451 vos_mem_free(pWdaParams) ;
8452 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008453 return CONVERT_WDI2VOS_STATUS(status) ;
8454}
Jeff Johnson295189b2012-06-20 16:38:30 -07008455/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008456 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008457 *
8458 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008459void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008460{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008461 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8462
Jeff Johnson295189b2012-06-20 16:38:30 -07008463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008464 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008465
8466 if(NULL == pWdaParams)
8467 {
8468 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008469 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008470 VOS_ASSERT(0) ;
8471 return ;
8472 }
8473
8474 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8475 vos_mem_free(pWdaParams->wdaMsgParam);
8476 vos_mem_free(pWdaParams);
8477
Jeff Johnson295189b2012-06-20 16:38:30 -07008478 //print a msg, nothing else to do
8479 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008480 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008481 return ;
8482}
Yue Ma7f44bbe2013-04-12 11:47:39 -07008483/*
8484 * FUNCTION: WDA_RemBeaconFilterReqCallback
8485 * Free memory.
8486 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
8487 */
8488void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8489{
8490 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8491
8492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8493 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8494
8495 if(NULL == pWdaParams)
8496 {
8497 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8498 "%s: pWdaParams received NULL", __func__);
8499 VOS_ASSERT(0);
8500 return;
8501 }
8502
8503 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8504 {
8505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8506 vos_mem_free(pWdaParams->wdaMsgParam);
8507 vos_mem_free(pWdaParams);
8508 }
8509
8510 return;
8511}
Jeff Johnson295189b2012-06-20 16:38:30 -07008512 // TODO: PE does not have this feature for now implemented,
8513 // but the support for removing beacon filter exists between
8514 // HAL and FW. This function can be called whenever PE defines
8515 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07008516/*
8517 * FUNCTION: WDA_RemBeaconFilterReq
8518 * Request to WDI to send the removal of beacon filtering related information.
8519 */
8520VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
8521 tRemBeaconFilterMsg* pBeaconFilterInfo)
8522{
8523 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008524 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008525 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
8526 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
8527 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008528 tWDA_ReqParams *pWdaParams ;
8529
Jeff Johnson295189b2012-06-20 16:38:30 -07008530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008531 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 if(NULL == wdiBeaconFilterInfo)
8533 {
8534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008535 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008536 VOS_ASSERT(0);
8537 return VOS_STATUS_E_NOMEM;
8538 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008539 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8540 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008541 {
8542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008543 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008544 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008545 vos_mem_free(wdiBeaconFilterInfo);
8546 vos_mem_free(pBeaconFilterInfo);
8547 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008548 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07008549
8550 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
8551 pBeaconFilterInfo->ucIeCount;
8552 //Fill structure with info contained in the ucRemIeId
8553 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
8554 pBeaconFilterInfo->ucRemIeId,
8555 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
8556 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
8557 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008558
8559 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008560 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008561 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
8563
8564 pWdaParams->pWdaContext = pWDA;
8565
Jeff Johnson43971f52012-07-17 12:26:56 -07008566 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008567 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008568 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008569 {
8570 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8571 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008572 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008573 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8574 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008575 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008576 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008577 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008578}
Jeff Johnson295189b2012-06-20 16:38:30 -07008579/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008580 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008581 *
8582 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008583void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008584{
8585 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008587 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008588 if(NULL == pWdaParams)
8589 {
8590 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008591 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008592 VOS_ASSERT(0) ;
8593 return ;
8594 }
8595
8596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8597 vos_mem_free(pWdaParams) ;
8598
Jeff Johnson295189b2012-06-20 16:38:30 -07008599 return ;
8600}
Jeff Johnson295189b2012-06-20 16:38:30 -07008601/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008602 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
8603 * Free memory.
8604 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
8605 */
8606void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
8607{
8608 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8609
8610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8611 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8612
8613 if(NULL == pWdaParams)
8614 {
8615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8616 "%s: pWdaParams received NULL", __func__);
8617 VOS_ASSERT(0);
8618 return;
8619 }
8620
8621 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8622 {
8623 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8624 vos_mem_free(pWdaParams);
8625 }
8626
8627 return;
8628}
8629/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008630 * FUNCTION: WDA_SetRSSIThresholdsReq
8631 * Request to WDI to set the RSSI thresholds (sta mode).
8632 */
8633VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
8634{
8635 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008636 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008637 tWDA_CbContext *pWDA = NULL ;
8638 v_PVOID_t pVosContext = NULL;
8639 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
8640 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
8641 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
8642 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008644 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008645 if(NULL == wdiRSSIThresholdsInfo)
8646 {
8647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008648 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008649 VOS_ASSERT(0);
8650 return VOS_STATUS_E_NOMEM;
8651 }
8652 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8653 if(NULL == pWdaParams)
8654 {
8655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008656 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008657 VOS_ASSERT(0);
8658 vos_mem_free(wdiRSSIThresholdsInfo);
8659 return VOS_STATUS_E_NOMEM;
8660 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008661 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
8663 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
8664 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07008665 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
8666 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
8667 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07008668 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
8669 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
8670 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008671 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
8672 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008673 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
8674 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
8675
Jeff Johnson295189b2012-06-20 16:38:30 -07008676 /* Store param pointer as passed in by caller */
8677 /* store Params pass it to WDI */
8678 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
8679 pWdaParams->pWdaContext = pWDA;
8680 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07008681 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008682 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008683 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008684 {
8685 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8686 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008687 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008688 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8689 vos_mem_free(pWdaParams) ;
8690 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008691 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008692
8693}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008694/*
Yue Madb90ac12013-04-04 13:39:13 -07008695 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008696 *
8697 */
Yue Madb90ac12013-04-04 13:39:13 -07008698void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008699{
8700 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8701
8702 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008703 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008704 if(NULL == pWdaParams)
8705 {
8706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008707 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008708 VOS_ASSERT(0) ;
8709 return ;
8710 }
8711
8712 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8713 vos_mem_free(pWdaParams->wdaMsgParam);
8714 vos_mem_free(pWdaParams) ;
8715
8716 //print a msg, nothing else to do
8717 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07008718 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008719 return ;
8720}
Jeff Johnson295189b2012-06-20 16:38:30 -07008721/*
Yue Madb90ac12013-04-04 13:39:13 -07008722 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07008723 * Free memory.
8724 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07008725 */
8726void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
8727{
8728 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8729
8730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8731 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8732
8733 if(NULL == pWdaParams)
8734 {
8735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8736 "%s: Invalid pWdaParams pointer", __func__);
8737 VOS_ASSERT(0);
8738 return;
8739 }
8740
8741 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8742 {
8743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8744 vos_mem_free(pWdaParams->wdaMsgParam);
8745 vos_mem_free(pWdaParams);
8746 }
8747
8748 return;
8749}
8750/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 * FUNCTION: WDA_ProcessHostOffloadReq
8752 * Request to WDI to set the filter to minimize unnecessary host wakeup due
8753 * to broadcast traffic (sta mode).
8754 */
8755VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
8756 tSirHostOffloadReq *pHostOffloadParams)
8757{
8758 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008759 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008760 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
8761 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
8762 sizeof(WDI_HostOffloadReqParamsType)) ;
8763 tWDA_ReqParams *pWdaParams ;
8764
8765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008766 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07008767
8768 if(NULL == wdiHostOffloadInfo)
8769 {
8770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008771 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008772 VOS_ASSERT(0);
8773 return VOS_STATUS_E_NOMEM;
8774 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008775 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8776 if(NULL == pWdaParams)
8777 {
8778 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008779 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008780 VOS_ASSERT(0);
8781 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008782 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008783 return VOS_STATUS_E_NOMEM;
8784 }
8785
8786 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
8787 pHostOffloadParams->offloadType;
8788 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
8789 pHostOffloadParams->enableOrDisable;
8790
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008791 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
8792 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
8793
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
8795 {
8796 case SIR_IPV4_ARP_REPLY_OFFLOAD:
8797 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
8798 pHostOffloadParams->params.hostIpv4Addr,
8799 4);
8800 break;
8801 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
8802 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8803 pHostOffloadParams->params.hostIpv6Addr,
8804 16);
8805 break;
8806 case SIR_IPV6_NS_OFFLOAD:
8807 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
8808 pHostOffloadParams->params.hostIpv6Addr,
8809 16);
8810
8811#ifdef WLAN_NS_OFFLOAD
8812 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
8813 {
8814 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
8815 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
8816 16);
8817 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
8818 }
8819 else
8820 {
8821 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
8822 }
8823
8824 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
8825 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
8826 16);
8827 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
8828 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
8829 6);
8830
8831 //Only two are supported so let's go through them without a loop
8832 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
8833 {
8834 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
8835 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
8836 16);
8837 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
8838 }
8839 else
8840 {
8841 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
8842 }
8843
8844 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
8845 {
8846 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
8847 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
8848 16);
8849 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
8850 }
8851 else
8852 {
8853 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
8854 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05308855 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
8856 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008857 break;
8858#endif //WLAN_NS_OFFLOAD
8859 default:
8860 {
8861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8862 "No Handling for Offload Type %x in WDA "
8863 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
8864 //WDA_VOS_ASSERT(0) ;
8865 }
8866 }
Yue Madb90ac12013-04-04 13:39:13 -07008867 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
8868 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008869
Jeff Johnson295189b2012-06-20 16:38:30 -07008870 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008871 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008872 /* store Params pass it to WDI */
8873 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
8874 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008875
Jeff Johnson295189b2012-06-20 16:38:30 -07008876
Jeff Johnson43971f52012-07-17 12:26:56 -07008877 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07008878 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008879
Jeff Johnson43971f52012-07-17 12:26:56 -07008880 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008881 {
8882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8883 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008884 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8886 vos_mem_free(pWdaParams->wdaMsgParam);
8887 vos_mem_free(pWdaParams) ;
8888 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008889 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008890
8891}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07008892/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008893 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 *
8895 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008896void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008897{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008898 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8899
Jeff Johnson295189b2012-06-20 16:38:30 -07008900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008901 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008902
8903 if(NULL == pWdaParams)
8904 {
8905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008906 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008907 VOS_ASSERT(0) ;
8908 return ;
8909 }
8910
8911 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8912 vos_mem_free(pWdaParams->wdaMsgParam);
8913 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008914
Jeff Johnson295189b2012-06-20 16:38:30 -07008915 //print a msg, nothing else to do
8916 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008917 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008918 return ;
8919}
Jeff Johnson295189b2012-06-20 16:38:30 -07008920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008921 * FUNCTION: WDA_KeepAliveReqCallback
8922 * Free memory.
8923 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
8924 */
8925void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
8926{
8927 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8928
8929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8930 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8931
8932 if(NULL == pWdaParams)
8933 {
8934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8935 "%s: pWdaParams received NULL", __func__);
8936 VOS_ASSERT(0);
8937 return;
8938 }
8939
8940 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8941 {
8942 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8943 vos_mem_free(pWdaParams->wdaMsgParam);
8944 vos_mem_free(pWdaParams);
8945 }
8946
8947 return;
8948}
8949/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008950 * FUNCTION: WDA_ProcessKeepAliveReq
8951 * Request to WDI to send Keep Alive packets to minimize unnecessary host
8952 * wakeup due to broadcast traffic (sta mode).
8953 */
8954VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
8955 tSirKeepAliveReq *pKeepAliveParams)
8956{
8957 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008958 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008959 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
8960 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
8961 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008962 tWDA_ReqParams *pWdaParams;
8963
Jeff Johnson295189b2012-06-20 16:38:30 -07008964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008965 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008966 if(NULL == wdiKeepAliveInfo)
8967 {
8968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008969 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008970 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008971 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008972 return VOS_STATUS_E_NOMEM;
8973 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008974
8975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8976 if(NULL == pWdaParams)
8977 {
8978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008979 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008980 VOS_ASSERT(0);
8981 vos_mem_free(wdiKeepAliveInfo);
8982 vos_mem_free(pKeepAliveParams);
8983 return VOS_STATUS_E_NOMEM;
8984 }
8985
Jeff Johnson295189b2012-06-20 16:38:30 -07008986 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
8987 pKeepAliveParams->packetType;
8988 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
8989 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008990
8991 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
8992 pKeepAliveParams->bssId,
8993 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07008994
8995 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
8996 {
8997 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
8998 pKeepAliveParams->hostIpv4Addr,
8999 SIR_IPV4_ADDR_LEN);
9000 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9001 pKeepAliveParams->destIpv4Addr,
9002 SIR_IPV4_ADDR_LEN);
9003 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9004 pKeepAliveParams->destMacAddr,
9005 SIR_MAC_ADDR_LEN);
9006 }
9007 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9008 {
9009 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9010 SIR_IPV4_ADDR_LEN,
9011 0);
9012 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9013 SIR_IPV4_ADDR_LEN,
9014 0);
9015 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9016 SIR_MAC_ADDR_LEN,
9017 0);
9018 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009019 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9020 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009021
Jeff Johnson295189b2012-06-20 16:38:30 -07009022 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009023 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009024 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009025 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9026 pWdaParams->pWdaContext = pWDA;
9027
Jeff Johnson295189b2012-06-20 16:38:30 -07009028 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9029 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9030 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9031 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9032 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9034 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9035 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9036 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9037 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9038 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9039 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9040 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9041 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9042 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9043 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9044 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9045 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9046 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9047 "TimePeriod %d PacketType %d",
9048 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9049 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009050 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009051 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009052
Jeff Johnson43971f52012-07-17 12:26:56 -07009053 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009054 {
9055 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9056 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009057 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9059 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009060 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009061 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009062 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009063
9064}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009065/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009066 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009067 *
9068 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009069void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009070 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9071 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009072{
9073 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009075 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009076 if(NULL == pWdaParams)
9077 {
9078 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009079 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009080 VOS_ASSERT(0) ;
9081 return ;
9082 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009083 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9084 vos_mem_free(pWdaParams->wdaMsgParam);
9085 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009086 return ;
9087}
Jeff Johnson295189b2012-06-20 16:38:30 -07009088/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009089 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9090 * Free memory.
9091 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9092 */
9093void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9094{
9095 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9096
9097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9098 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9099
9100 if(NULL == pWdaParams)
9101 {
9102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9103 "%s: pWdaParams received NULL", __func__);
9104 VOS_ASSERT(0);
9105 return;
9106 }
9107
9108 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9109 {
9110 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9111 vos_mem_free(pWdaParams->wdaMsgParam);
9112 vos_mem_free(pWdaParams);
9113 }
9114
9115 return;
9116}
9117
9118/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9120 * Request to WDI to add WOWL Bcast pattern
9121 */
9122VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9123 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9124{
9125 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009126 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009127 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9128 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9129 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9130 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009132 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009133 if(NULL == wdiWowlAddBcPtrnInfo)
9134 {
9135 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009136 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009137 VOS_ASSERT(0);
9138 return VOS_STATUS_E_NOMEM;
9139 }
9140 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9141 if(NULL == pWdaParams)
9142 {
9143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009145 VOS_ASSERT(0);
9146 vos_mem_free(wdiWowlAddBcPtrnInfo);
9147 return VOS_STATUS_E_NOMEM;
9148 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009149 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9150 pWowlAddBcPtrnParams->ucPatternId;
9151 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9152 pWowlAddBcPtrnParams->ucPatternByteOffset;
9153 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9154 pWowlAddBcPtrnParams->ucPatternMaskSize;
9155 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9156 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009157 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9158 {
9159 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9160 pWowlAddBcPtrnParams->ucPattern,
9161 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9162 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9163 pWowlAddBcPtrnParams->ucPatternMask,
9164 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9165 }
9166 else
9167 {
9168 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9169 pWowlAddBcPtrnParams->ucPattern,
9170 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9171 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9172 pWowlAddBcPtrnParams->ucPatternMask,
9173 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9174
9175 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9176 pWowlAddBcPtrnParams->ucPatternExt,
9177 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9178 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9179 pWowlAddBcPtrnParams->ucPatternMaskExt,
9180 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9181 }
9182
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009183 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9184 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9185
Yue Ma7f44bbe2013-04-12 11:47:39 -07009186 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9187 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009188 /* Store param pointer as passed in by caller */
9189 /* store Params pass it to WDI */
9190 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9191 pWdaParams->pWdaContext = pWDA;
9192 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009193 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009194 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009195 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009196 {
9197 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9198 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009199 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009200 vos_mem_free(pWdaParams->wdaMsgParam) ;
9201 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9202 vos_mem_free(pWdaParams) ;
9203 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009204 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009205
9206}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009207/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009208 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009209 *
9210 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009211void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009212 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9213 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009214{
9215 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009217 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009218 if(NULL == pWdaParams)
9219 {
9220 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009221 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009222 VOS_ASSERT(0) ;
9223 return ;
9224 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009225 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9226 vos_mem_free(pWdaParams->wdaMsgParam);
9227 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009228 return ;
9229}
Jeff Johnson295189b2012-06-20 16:38:30 -07009230/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009231 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9232 * Free memory.
9233 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9234 */
9235void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9236{
9237 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9238
9239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9240 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9241
9242 if(NULL == pWdaParams)
9243 {
9244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9245 "%s: pWdaParams received NULL", __func__);
9246 VOS_ASSERT(0);
9247 return;
9248 }
9249
9250 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9251 {
9252 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9253 vos_mem_free(pWdaParams->wdaMsgParam);
9254 vos_mem_free(pWdaParams);
9255 }
9256
9257 return;
9258}
9259/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009260 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9261 * Request to WDI to delete WOWL Bcast pattern
9262 */
9263VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9264 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9265{
9266 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009267 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009268 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9269 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9270 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9271 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009273 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009274 if(NULL == wdiWowlDelBcPtrnInfo)
9275 {
9276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009277 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 VOS_ASSERT(0);
9279 return VOS_STATUS_E_NOMEM;
9280 }
9281 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9282 if(NULL == pWdaParams)
9283 {
9284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009285 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009286 VOS_ASSERT(0);
9287 vos_mem_free(wdiWowlDelBcPtrnInfo);
9288 return VOS_STATUS_E_NOMEM;
9289 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9291 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009292
9293 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9294 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9295
Yue Ma7f44bbe2013-04-12 11:47:39 -07009296 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9297 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 /* Store param pointer as passed in by caller */
9299 /* store Params pass it to WDI */
9300 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9301 pWdaParams->pWdaContext = pWDA;
9302 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009303 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009304 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009305 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009306 {
9307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9308 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009309 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009310 vos_mem_free(pWdaParams->wdaMsgParam) ;
9311 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9312 vos_mem_free(pWdaParams) ;
9313 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009314 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009315
9316}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009317/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009318 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009319 *
9320 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009321void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009322{
9323 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9324 tWDA_CbContext *pWDA;
9325 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009327 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009328 if(NULL == pWdaParams)
9329 {
9330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009331 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009332 VOS_ASSERT(0) ;
9333 return ;
9334 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009335 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9336 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9337
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009338 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9339
Jeff Johnson295189b2012-06-20 16:38:30 -07009340 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9341 vos_mem_free(pWdaParams) ;
9342
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009343 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009344 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009346 return ;
9347}
Jeff Johnson295189b2012-06-20 16:38:30 -07009348/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009349 * FUNCTION: WDA_WowlEnterReqCallback
9350 * Free memory and send WOWL Enter RSP back to PE.
9351 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9352 */
9353void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9354{
9355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9356 tWDA_CbContext *pWDA;
9357 tSirHalWowlEnterParams *pWowlEnterParams;
9358
9359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9360 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9361
9362 if(NULL == pWdaParams)
9363 {
9364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9365 "%s: pWdaParams received NULL", __func__);
9366 VOS_ASSERT(0);
9367 return;
9368 }
9369
9370 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9371 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9372 pWowlEnterParams->status = wdiStatus;
9373
9374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9375 {
9376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9377 vos_mem_free(pWdaParams);
9378 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9379 }
9380
9381 return;
9382}
9383/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009384 * FUNCTION: WDA_ProcessWowlEnterReq
9385 * Request to WDI to enter WOWL
9386 */
9387VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9388 tSirHalWowlEnterParams *pWowlEnterParams)
9389{
9390 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009391 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009392 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9393 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9394 sizeof(WDI_WowlEnterReqParamsType)) ;
9395 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009397 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009398 if(NULL == wdiWowlEnterInfo)
9399 {
9400 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009401 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009402 VOS_ASSERT(0);
9403 return VOS_STATUS_E_NOMEM;
9404 }
9405 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9406 if(NULL == pWdaParams)
9407 {
9408 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009409 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009410 VOS_ASSERT(0);
9411 vos_mem_free(wdiWowlEnterInfo);
9412 return VOS_STATUS_E_NOMEM;
9413 }
Kumar Anandaca924e2013-07-22 14:35:34 -07009414
9415 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
9416
Jeff Johnson295189b2012-06-20 16:38:30 -07009417 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
9418 pWowlEnterParams->magicPtrn,
9419 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009420 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
9421 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009422 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
9423 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009424 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
9425 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -07009426 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
9427 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009428 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
9429 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009430 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
9431 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -07009432 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
9433 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -07009434 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
9435 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -07009436#ifdef WLAN_WAKEUP_EVENTS
9437 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
9438 pWowlEnterParams->ucWoWEAPIDRequestEnable;
9439
9440 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
9441 pWowlEnterParams->ucWoWEAPOL4WayEnable;
9442
9443 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
9444 pWowlEnterParams->ucWowNetScanOffloadMatch;
9445
9446 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
9447 pWowlEnterParams->ucWowGTKRekeyError;
9448
9449 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
9450 pWowlEnterParams->ucWoWBSSConnLoss;
9451#endif // WLAN_WAKEUP_EVENTS
9452
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009453 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
9454 pWowlEnterParams->bssIdx;
9455
Yue Ma7f44bbe2013-04-12 11:47:39 -07009456 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
9457 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009458 /* Store param pointer as passed in by caller */
9459 /* store Params pass it to WDI */
9460 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
9461 pWdaParams->pWdaContext = pWDA;
9462 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009463 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009464 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009465 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 {
9467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9468 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009469 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009470 vos_mem_free(pWdaParams->wdaMsgParam) ;
9471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9472 vos_mem_free(pWdaParams) ;
9473 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009474 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009475
9476}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009477/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009478 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 *
9480 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009481void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009482{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9484 tWDA_CbContext *pWDA;
9485 tSirHalWowlExitParams *pWowlExitParams;
9486 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009487 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009488 if(NULL == pWdaParams)
9489 {
9490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009491 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009492 VOS_ASSERT(0) ;
9493 return ;
9494 }
9495 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9496 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
9497
9498 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009499 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009500
9501 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9502 vos_mem_free(pWdaParams) ;
9503
Jeff Johnson295189b2012-06-20 16:38:30 -07009504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009505 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009506 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009507 return ;
9508}
Jeff Johnson295189b2012-06-20 16:38:30 -07009509/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009510 * FUNCTION: WDA_WowlExitReqCallback
9511 * Free memory and send WOWL Exit RSP back to PE.
9512 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
9513 */
9514void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
9515{
9516 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9517 tWDA_CbContext *pWDA;
9518 tSirHalWowlExitParams *pWowlExitParams;
9519
9520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9521 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9522
9523 if(NULL == pWdaParams)
9524 {
9525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9526 "%s: pWdaParams received NULL", __func__);
9527 VOS_ASSERT(0);
9528 return;
9529 }
9530
9531 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9532 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
9533 pWowlExitParams->status = wdiStatus;
9534
9535 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9536 {
9537 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9538 vos_mem_free(pWdaParams);
9539 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
9540 }
9541
9542 return;
9543}
9544/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009545 * FUNCTION: WDA_ProcessWowlExitReq
9546 * Request to WDI to add WOWL Bcast pattern
9547 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009548VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
9549 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009550{
9551 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009552 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009553 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
9554 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
9555 sizeof(WDI_WowlExitReqParamsType)) ;
9556 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009558 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009559 if(NULL == wdiWowlExitInfo)
9560 {
9561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009562 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009563 VOS_ASSERT(0);
9564 return VOS_STATUS_E_NOMEM;
9565 }
9566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9567 if(NULL == pWdaParams)
9568 {
9569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009570 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009571 VOS_ASSERT(0);
9572 vos_mem_free(wdiWowlExitInfo);
9573 return VOS_STATUS_E_NOMEM;
9574 }
9575
9576 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
9577 pWowlExitParams->bssIdx;
9578
Yue Ma7f44bbe2013-04-12 11:47:39 -07009579 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
9580 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009581
9582 /* Store param pointer as passed in by caller */
9583 /* store Params pass it to WDI */
9584 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
9585 pWdaParams->pWdaContext = pWDA;
9586 pWdaParams->wdaMsgParam = pWowlExitParams;
9587
9588 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009589 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009590
Jeff Johnson43971f52012-07-17 12:26:56 -07009591 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009592 {
9593 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9594 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009595 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009596 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9597 vos_mem_free(pWdaParams->wdaMsgParam);
9598 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009599 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009600 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009601}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009602/*
9603 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
9604 * Request to WDI to determine whether a given station is capable of
9605 * using HW-based frame translation
9606 */
9607v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
9608 tANI_U8 staIdx)
9609{
9610 return WDI_IsHwFrameTxTranslationCapable(staIdx);
9611}
Jeff Johnson295189b2012-06-20 16:38:30 -07009612/*
9613 * FUNCTION: WDA_NvDownloadReqCallback
9614 * send NV Download RSP back to PE
9615 */
9616void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
9617 void* pUserData)
9618{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009619
9620 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
9621 tWDA_CbContext *pWDA;
9622
Jeff Johnson295189b2012-06-20 16:38:30 -07009623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009624 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009625
9626 if(NULL == pWdaParams)
9627 {
9628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009629 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009630 VOS_ASSERT(0) ;
9631 return ;
9632 }
9633
9634 pWDA = pWdaParams->pWdaContext;
9635
Jeff Johnson295189b2012-06-20 16:38:30 -07009636 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009637 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9638 vos_mem_free(pWdaParams);
9639
Jeff Johnson295189b2012-06-20 16:38:30 -07009640 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07009641 return ;
9642}
Jeff Johnson295189b2012-06-20 16:38:30 -07009643/*
9644 * FUNCTION: WDA_ProcessNvDownloadReq
9645 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
9646 */
9647VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
9648{
9649 /* Initialize the local Variables*/
9650 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
9651 v_VOID_t *pNvBuffer=NULL;
9652 v_SIZE_t bufferSize = 0;
9653 WDI_Status status = WDI_STATUS_E_FAILURE;
9654 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009655 tWDA_ReqParams *pWdaParams ;
9656
Jeff Johnson295189b2012-06-20 16:38:30 -07009657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009658 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009659 if(NULL == pWDA)
9660 {
9661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009662 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009663 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07009664 return VOS_STATUS_E_FAILURE;
9665 }
9666
9667 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -07009668 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
9669
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
9671 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009672 if(NULL == wdiNvDownloadReqParam)
9673 {
9674 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009675 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009676 VOS_ASSERT(0);
9677 return VOS_STATUS_E_NOMEM;
9678 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009679 /* Copy Params to wdiNvDownloadReqParam*/
9680 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
9681 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009682
9683 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9684 if(NULL == pWdaParams)
9685 {
9686 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009687 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009688 VOS_ASSERT(0);
9689 vos_mem_free(wdiNvDownloadReqParam);
9690 return VOS_STATUS_E_NOMEM;
9691 }
9692
Jeff Johnson295189b2012-06-20 16:38:30 -07009693 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009694 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
9695 pWdaParams->wdaMsgParam = NULL;
9696 pWdaParams->pWdaContext = pWDA;
9697
9698
Jeff Johnson295189b2012-06-20 16:38:30 -07009699 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009700
Jeff Johnson295189b2012-06-20 16:38:30 -07009701 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009702 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
9703
Jeff Johnson295189b2012-06-20 16:38:30 -07009704 if(IS_WDI_STATUS_FAILURE(status))
9705 {
9706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9707 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009708 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9709 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009710 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009711 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009712}
9713/*
9714 * FUNCTION: WDA_FlushAcReqCallback
9715 * send Flush AC RSP back to TL
9716 */
9717void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
9718{
9719 vos_msg_t wdaMsg = {0} ;
9720 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9721 tFlushACReq *pFlushACReqParams;
9722 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009723 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009724 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009725 if(NULL == pWdaParams)
9726 {
9727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009728 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009729 VOS_ASSERT(0) ;
9730 return ;
9731 }
9732
9733 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
9734 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
9735 if(NULL == pFlushACRspParams)
9736 {
9737 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009738 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009739 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07009740 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009741 return ;
9742 }
9743 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
9744 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
9745 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
9746 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
9747 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009748 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009749 vos_mem_free(pWdaParams->wdaMsgParam) ;
9750 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9751 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009752 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
9753 wdaMsg.bodyptr = (void *)pFlushACRspParams;
9754 // POST message to TL
9755 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
9756
Jeff Johnson295189b2012-06-20 16:38:30 -07009757 return ;
9758}
Jeff Johnson295189b2012-06-20 16:38:30 -07009759/*
9760 * FUNCTION: WDA_ProcessFlushAcReq
9761 * Request to WDI to Update the DELBA REQ params.
9762 */
9763VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
9764 tFlushACReq *pFlushAcReqParams)
9765{
9766 WDI_Status status = WDI_STATUS_SUCCESS ;
9767 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
9768 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
9769 sizeof(WDI_FlushAcReqParamsType)) ;
9770 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009771 if(NULL == wdiFlushAcReqParam)
9772 {
9773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009775 VOS_ASSERT(0);
9776 return VOS_STATUS_E_NOMEM;
9777 }
9778 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9779 if(NULL == pWdaParams)
9780 {
9781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009782 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009783 VOS_ASSERT(0);
9784 vos_mem_free(wdiFlushAcReqParam);
9785 return VOS_STATUS_E_NOMEM;
9786 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009787 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009788 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009789 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
9790 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
9791 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
9792 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -07009793 /* Store Flush AC pointer, as this will be used for response */
9794 /* store Params pass it to WDI */
9795 pWdaParams->pWdaContext = pWDA;
9796 pWdaParams->wdaMsgParam = pFlushAcReqParams;
9797 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009798 status = WDI_FlushAcReq(wdiFlushAcReqParam,
9799 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009800 if(IS_WDI_STATUS_FAILURE(status))
9801 {
9802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9803 "Failure in Flush AC REQ Params WDI API, free all the memory " );
9804 vos_mem_free(pWdaParams->wdaMsgParam) ;
9805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9806 vos_mem_free(pWdaParams) ;
9807 //TODO: respond to TL with failure
9808 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009809 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810}
Jeff Johnson295189b2012-06-20 16:38:30 -07009811/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009812 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009813 *
9814 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009815void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009816{
9817 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9818 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -07009819 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009820
9821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009822 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009823 if(NULL == pWdaParams)
9824 {
9825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009826 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009827 VOS_ASSERT(0) ;
9828 return ;
9829 }
9830 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9831 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9832 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9833 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9834 {
9835 pWDA->wdaAmpSessionOn = VOS_FALSE;
9836 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009837 vos_mem_free(pWdaParams->wdaMsgParam) ;
9838 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9839 vos_mem_free(pWdaParams) ;
9840 /*
9841 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
9842 * param here
9843 */
Jeff Johnson295189b2012-06-20 16:38:30 -07009844 return ;
9845}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009846/*
9847 * FUNCTION: WDA_BtAmpEventReqCallback
9848 * Free memory.
9849 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
9850 */
9851void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
9852{
9853 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9854 tWDA_CbContext *pWDA;
9855 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009856
Yue Ma7f44bbe2013-04-12 11:47:39 -07009857 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9858 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9859
9860 if(NULL == pWdaParams)
9861 {
9862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9863 "%s: pWdaParams received NULL", __func__);
9864 VOS_ASSERT(0);
9865 return;
9866 }
9867
9868 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9869 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
9870
9871 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
9872 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9873 {
9874 pWDA->wdaAmpSessionOn = VOS_FALSE;
9875 }
9876
9877 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9878 {
9879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9880 vos_mem_free(pWdaParams->wdaMsgParam);
9881 vos_mem_free(pWdaParams);
9882 }
9883
9884 return;
9885}
Jeff Johnson295189b2012-06-20 16:38:30 -07009886/*
9887 * FUNCTION: WDA_ProcessBtAmpEventReq
9888 * Request to WDI to Update with BT AMP events.
9889 */
9890VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
9891 tSmeBtAmpEvent *pBtAmpEventParams)
9892{
9893 WDI_Status status = WDI_STATUS_SUCCESS ;
9894 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
9895 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
9896 sizeof(WDI_BtAmpEventParamsType)) ;
9897 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009900 if(NULL == wdiBtAmpEventParam)
9901 {
9902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 VOS_ASSERT(0);
9905 return VOS_STATUS_E_NOMEM;
9906 }
9907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9908 if(NULL == pWdaParams)
9909 {
9910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009912 VOS_ASSERT(0);
9913 vos_mem_free(wdiBtAmpEventParam);
9914 return VOS_STATUS_E_NOMEM;
9915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009916 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
9917 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009918 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
9919 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 /* Store BT AMP event pointer, as this will be used for response */
9921 /* store Params pass it to WDI */
9922 pWdaParams->pWdaContext = pWDA;
9923 pWdaParams->wdaMsgParam = pBtAmpEventParams;
9924 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07009925 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009926 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009927 if(IS_WDI_STATUS_FAILURE(status))
9928 {
9929 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9930 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
9931 vos_mem_free(pWdaParams->wdaMsgParam) ;
9932 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9933 vos_mem_free(pWdaParams) ;
9934 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009935 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
9936 {
9937 pWDA->wdaAmpSessionOn = VOS_TRUE;
9938 }
9939 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009940}
9941
Jeff Johnson295189b2012-06-20 16:38:30 -07009942/*
9943 * FUNCTION: WDA_FTMCommandReqCallback
9944 * Handle FTM CMD response came from HAL
9945 * Route responce to HDD FTM
9946 */
9947void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
9948 void *usrData)
9949{
9950 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009951 if((NULL == pWDA) || (NULL == ftmCmdRspData))
9952 {
9953 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05309954 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009955 return;
9956 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009957 /* Release Current FTM Command Request */
9958 vos_mem_free(pWDA->wdaFTMCmdReq);
9959 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009960 /* Post FTM Responce to HDD FTM */
9961 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -07009962 return;
9963}
Jeff Johnson295189b2012-06-20 16:38:30 -07009964/*
9965 * FUNCTION: WDA_ProcessFTMCommand
9966 * Send FTM command to WDI
9967 */
9968VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
9969 tPttMsgbuffer *pPTTFtmCmd)
9970{
9971 WDI_Status status = WDI_STATUS_SUCCESS;
9972 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07009973 ftmCMDReq = (WDI_FTMCommandReqType *)
9974 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
9975 if(NULL == ftmCMDReq)
9976 {
9977 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9978 "WDA FTM Command buffer alloc fail");
9979 return VOS_STATUS_E_NOMEM;
9980 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009981 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
9982 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -07009983 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07009984 /* Send command to WDI */
9985 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 return status;
9987}
Jeff Johnsone7245742012-09-05 17:12:55 -07009988#ifdef FEATURE_OEM_DATA_SUPPORT
9989/*
9990 * FUNCTION: WDA_StartOemDataReqCallback
9991 *
9992 */
9993void WDA_StartOemDataReqCallback(
9994 WDI_oemDataRspParamsType *wdiOemDataRspParams,
9995 void* pUserData)
9996{
9997 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9999 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010000 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010001
Jeff Johnsone7245742012-09-05 17:12:55 -070010002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010003 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010004
10005 if(NULL == pWdaParams)
10006 {
10007 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010008 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010009 VOS_ASSERT(0) ;
10010 return ;
10011 }
10012 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10013
Jeff Johnsone7245742012-09-05 17:12:55 -070010014 if(NULL == pWDA)
10015 {
10016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010017 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010018 VOS_ASSERT(0);
10019 return ;
10020 }
10021
10022 /*
10023 * Allocate memory for response params sent to PE
10024 */
10025 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10026
10027 // Check if memory is allocated for OemdataMeasRsp Params.
10028 if(NULL == pOemDataRspParams)
10029 {
10030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10031 "OEM DATA WDA callback alloc fail");
10032 VOS_ASSERT(0) ;
10033 return;
10034 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010035
Jeff Johnsone7245742012-09-05 17:12:55 -070010036 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010037 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10038 vos_mem_free(pWdaParams->wdaMsgParam);
10039 vos_mem_free(pWdaParams) ;
10040
Jeff Johnsone7245742012-09-05 17:12:55 -070010041 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010042 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010043 * Also, here success always means that we have atleast one BSSID.
10044 */
10045 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10046
10047 //enable Tx
10048 status = WDA_ResumeDataTx(pWDA);
10049 if(status != VOS_STATUS_SUCCESS)
10050 {
10051 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10052 }
10053 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10054 return ;
10055}
10056/*
10057 * FUNCTION: WDA_ProcessStartOemDataReq
10058 * Send Start Oem Data Req to WDI
10059 */
10060VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10061 tStartOemDataReq *pOemDataReqParams)
10062{
10063 WDI_Status status = WDI_STATUS_SUCCESS;
10064 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010065 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010066
10067 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10068
10069 if(NULL == wdiOemDataReqParams)
10070 {
10071 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010072 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010073 VOS_ASSERT(0);
10074 return VOS_STATUS_E_NOMEM;
10075 }
10076
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010077 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10078 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10079 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10080 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010081
10082 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10083
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010084 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10085 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010086 {
10087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010088 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010089 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010090 vos_mem_free(pOemDataReqParams);
10091 VOS_ASSERT(0);
10092 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010093 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010094
Bernald44a1ae2013-01-09 08:30:39 -080010095 pWdaParams->pWdaContext = (void*)pWDA;
10096 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10097 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010098
10099 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10100 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010101
10102 if(IS_WDI_STATUS_FAILURE(status))
10103 {
10104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10105 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010106 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10107 vos_mem_free(pWdaParams->wdaMsgParam);
10108 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010109 }
10110 return CONVERT_WDI2VOS_STATUS(status) ;
10111}
10112#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010113/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010114 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010115 *
10116 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010117void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010118{
10119 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010121 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010122 if(NULL == pWdaParams)
10123 {
10124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010125 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010126 VOS_ASSERT(0) ;
10127 return ;
10128 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010129
10130 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10131 vos_mem_free(pWdaParams->wdaMsgParam);
10132 vos_mem_free(pWdaParams);
10133
10134 return ;
10135}
10136/*
10137 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10138 * Free memory.
10139 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10140 */
10141void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10142{
10143 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10144
10145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10146 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10147
10148 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010149 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10151 "%s: pWdaParams received NULL", __func__);
10152 VOS_ASSERT(0);
10153 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010154 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010155
10156 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010157 {
10158 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010159 vos_mem_free(pWdaParams->wdaMsgParam);
10160 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010161 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010162
10163 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010164}
Jeff Johnson295189b2012-06-20 16:38:30 -070010165#ifdef WLAN_FEATURE_GTK_OFFLOAD
10166/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010167 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010168 *
10169 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010170void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010171 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010172{
10173 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10174
10175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010176 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010177
10178 VOS_ASSERT(NULL != pWdaParams);
10179
10180 vos_mem_free(pWdaParams->wdaMsgParam) ;
10181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10182 vos_mem_free(pWdaParams) ;
10183
10184 //print a msg, nothing else to do
10185 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010186 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010187
10188 return ;
10189}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010190/*
10191 * FUNCTION: WDA_GTKOffloadReqCallback
10192 * Free memory.
10193 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10194 */
10195void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10196{
10197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010198
Yue Ma7f44bbe2013-04-12 11:47:39 -070010199 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10200 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10201
10202 if(NULL == pWdaParams)
10203 {
10204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10205 "%s: pWdaParams received NULL", __func__);
10206 VOS_ASSERT(0);
10207 return;
10208 }
10209
10210 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10211 {
10212 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10213 vos_mem_free(pWdaParams->wdaMsgParam);
10214 vos_mem_free(pWdaParams);
10215 }
10216
10217 return;
10218}
Jeff Johnson295189b2012-06-20 16:38:30 -070010219/*
10220 * FUNCTION: WDA_ProcessGTKOffloadReq
10221 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10222 * to broadcast traffic (sta mode).
10223 */
10224VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10225 tpSirGtkOffloadParams pGtkOffloadParams)
10226{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010227 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010228 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10229 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10230 sizeof(WDI_GtkOffloadReqMsg)) ;
10231 tWDA_ReqParams *pWdaParams ;
10232
10233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010234 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235
10236 if(NULL == wdiGtkOffloadReqMsg)
10237 {
10238 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010239 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010240 VOS_ASSERT(0);
10241 return VOS_STATUS_E_NOMEM;
10242 }
10243
10244 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10245 if(NULL == pWdaParams)
10246 {
10247 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010248 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010249 VOS_ASSERT(0);
10250 vos_mem_free(wdiGtkOffloadReqMsg);
10251 return VOS_STATUS_E_NOMEM;
10252 }
10253
10254 //
10255 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10256 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010257
10258 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010259 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010260
Jeff Johnson295189b2012-06-20 16:38:30 -070010261 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10262 // Copy KCK
10263 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10264 // Copy KEK
10265 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10266 // Copy KeyReplayCounter
10267 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10268 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10269
Yue Ma7f44bbe2013-04-12 11:47:39 -070010270 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10271 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010272
Jeff Johnson295189b2012-06-20 16:38:30 -070010273
10274 /* Store Params pass it to WDI */
10275 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10276 pWdaParams->pWdaContext = pWDA;
10277 /* Store param pointer as passed in by caller */
10278 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10279
Yue Ma7f44bbe2013-04-12 11:47:39 -070010280 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010281
10282 if(IS_WDI_STATUS_FAILURE(status))
10283 {
10284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10285 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10287 vos_mem_free(pWdaParams->wdaMsgParam);
10288 vos_mem_free(pWdaParams);
10289 }
10290
10291 return CONVERT_WDI2VOS_STATUS(status) ;
10292}
10293
10294/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010295 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010296 *
10297 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010298void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010299 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010300{
10301 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10302 tWDA_CbContext *pWDA;
10303 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Sameer Thalappile8202632013-07-09 11:07:40 -070010304 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 vos_msg_t vosMsg;
10306
10307 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010308 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010309
10310 VOS_ASSERT(NULL != pWdaParams);
10311
10312 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10313 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10314
10315 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10316 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10317
10318 /* Message Header */
10319 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010320 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010321
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010322 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10323 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10324 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10325 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10326 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010327
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010328 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10329 pwdiGtkOffloadGetInfoRsparams->bssId,
10330 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010331 /* VOS message wrapper */
10332 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10333 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10334 vosMsg.bodyval = 0;
10335
10336 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10337 {
10338 /* free the mem and return */
10339 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10340 }
10341
10342 vos_mem_free(pWdaParams->wdaMsgParam) ;
10343 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10344 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010345
10346 return;
10347}
10348/*
10349 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10350 * Free memory and send RSP back to SME.
10351 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10352 */
10353void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10354{
10355 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10356 vos_msg_t vosMsg;
10357
10358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10359 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10360
10361 if(NULL == pWdaParams)
10362 {
10363 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10364 "%s: pWdaParams received NULL", __func__);
10365 VOS_ASSERT(0);
10366 return;
10367 }
10368
10369 /* VOS message wrapper */
10370 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10371 vosMsg.bodyptr = NULL;
10372 vosMsg.bodyval = 0;
10373
10374 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10375 {
10376 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10377 vos_mem_free(pWdaParams->wdaMsgParam);
10378 vos_mem_free(pWdaParams);
10379 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10380 }
10381
10382 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010383}
10384#endif
10385
10386/*
10387 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
10388 * Request to WDI to set Tx Per Tracking configurations
10389 */
10390VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
10391{
10392 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010393 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
10395 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
10396 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
10397 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010398 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010399 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010400 if(NULL == pwdiSetTxPerTrackingReqParams)
10401 {
10402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010403 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010404 vos_mem_free(pTxPerTrackingParams);
10405 VOS_ASSERT(0);
10406 return VOS_STATUS_E_NOMEM;
10407 }
10408 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10409 if(NULL == pWdaParams)
10410 {
10411 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010412 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010413 vos_mem_free(pwdiSetTxPerTrackingReqParams);
10414 vos_mem_free(pTxPerTrackingParams);
10415 VOS_ASSERT(0);
10416 return VOS_STATUS_E_NOMEM;
10417 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010418 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
10419 pTxPerTrackingParams->ucTxPerTrackingEnable;
10420 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
10421 pTxPerTrackingParams->ucTxPerTrackingPeriod;
10422 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
10423 pTxPerTrackingParams->ucTxPerTrackingRatio;
10424 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
10425 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010426 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
10427 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010428 /* Store param pointer as passed in by caller */
10429 /* store Params pass it to WDI
10430 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
10431 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
10432 pWdaParams->pWdaContext = pWDA;
10433 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010434 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010435 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010436 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010437 {
10438 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10439 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010440 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010441 vos_mem_free(pWdaParams->wdaMsgParam) ;
10442 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10443 vos_mem_free(pWdaParams) ;
10444 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010445 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010446
10447}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010448/*
10449 * FUNCTION: WDA_HALDumpCmdCallback
10450 * Send the VOS complete .
10451 */
10452void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
10453 void* pUserData)
10454{
10455 tANI_U8 *buffer = NULL;
10456 tWDA_CbContext *pWDA = NULL;
10457 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010458 if(NULL == pWdaParams)
10459 {
10460 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010461 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010462 VOS_ASSERT(0) ;
10463 return ;
10464 }
10465
10466 pWDA = pWdaParams->pWdaContext;
10467 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010468 if(wdiRspParams->usBufferLen > 0)
10469 {
10470 /*Copy the Resp data to UMAC supplied buffer*/
10471 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
10472 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10474 vos_mem_free(pWdaParams);
10475
10476 /* Indicate VOSS about the start complete */
10477 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010478 return ;
10479}
10480
Jeff Johnson295189b2012-06-20 16:38:30 -070010481/*
10482 * FUNCTION: WDA_ProcessHALDumpCmdReq
10483 * Send Dump command to WDI
10484 */
10485VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
10486 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
10487 tANI_U32 arg4, tANI_U8 *pBuffer)
10488{
10489 WDI_Status status = WDI_STATUS_SUCCESS;
10490 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
10491 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
10492 tWDA_ReqParams *pWdaParams ;
10493 pVosContextType pVosContext = NULL;
10494 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070010495 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
10496 (void *)pMac);
10497
10498 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10499 if(NULL == pWdaParams)
10500 {
10501 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010502 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010503 return VOS_STATUS_E_NOMEM;
10504 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010505 /* Allocate memory WDI request structure*/
10506 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
10507 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
10508 if(NULL == wdiHALDumpCmdReqParam)
10509 {
10510 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10511 "WDA HAL DUMP Command buffer alloc fail");
10512 vos_mem_free(pWdaParams);
10513 return WDI_STATUS_E_FAILURE;
10514 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010515 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010516 /* Extract the arguments */
10517 wdiHalDumpCmdInfo->command = cmd;
10518 wdiHalDumpCmdInfo->argument1 = arg1;
10519 wdiHalDumpCmdInfo->argument2 = arg2;
10520 wdiHalDumpCmdInfo->argument3 = arg3;
10521 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070010522 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010523 pWdaParams->pWdaContext = pVosContext->pWDAContext;
10524
10525 /* Response message will be passed through the buffer */
10526 pWdaParams->wdaMsgParam = (void *)pBuffer;
10527
10528 /* store Params pass it to WDI */
10529 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010530 /* Send command to WDI */
10531 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080010532 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070010533 if ( vStatus != VOS_STATUS_SUCCESS )
10534 {
10535 if ( vStatus == VOS_STATUS_E_TIMEOUT )
10536 {
10537 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010538 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010539 }
10540 else
10541 {
10542 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080010543 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010544 }
10545 VOS_ASSERT(0);
10546 }
10547 return status;
10548}
Jeff Johnson295189b2012-06-20 16:38:30 -070010549#ifdef WLAN_FEATURE_GTK_OFFLOAD
10550/*
10551 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
10552 * Request to WDI to get GTK Offload Information
10553 */
10554VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
10555 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
10556{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010557 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010558 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
10559 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
10560 tWDA_ReqParams *pWdaParams ;
10561
10562 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
10563 {
10564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010565 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010566 VOS_ASSERT(0);
10567 return VOS_STATUS_E_NOMEM;
10568 }
10569
10570 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10571 if(NULL == pWdaParams)
10572 {
10573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010574 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 VOS_ASSERT(0);
10576 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
10577 return VOS_STATUS_E_NOMEM;
10578 }
10579
Yue Ma7f44bbe2013-04-12 11:47:39 -070010580 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
10581 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010582
Jeff Johnson295189b2012-06-20 16:38:30 -070010583 /* Store Params pass it to WDI */
10584 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
10585 pWdaParams->pWdaContext = pWDA;
10586 /* Store param pointer as passed in by caller */
10587 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
10588
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010589 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010590 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010591
Yue Ma7f44bbe2013-04-12 11:47:39 -070010592 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010593
10594 if(IS_WDI_STATUS_FAILURE(status))
10595 {
10596 /* failure returned by WDI API */
10597 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10598 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
10599 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10600 vos_mem_free(pWdaParams) ;
10601 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
10602 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
10603 }
10604
10605 return CONVERT_WDI2VOS_STATUS(status) ;
10606}
10607#endif // WLAN_FEATURE_GTK_OFFLOAD
10608
10609/*
Yue Mab9c86f42013-08-14 15:59:08 -070010610 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
10611 *
10612 */
10613VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10614 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
10615{
10616 WDI_Status wdiStatus;
10617 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
10618
10619 addPeriodicTxPtrnParams =
10620 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
10621
10622 if (NULL == addPeriodicTxPtrnParams)
10623 {
10624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
10626 __func__);
10627
10628 return VOS_STATUS_E_NOMEM;
10629 }
10630
10631 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
10632 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
10633
10634 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10635 addPeriodicTxPtrnParams->pUserData = pWDA;
10636
10637 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
10638
10639 if (WDI_STATUS_PENDING == wdiStatus)
10640 {
10641 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10642 "Pending received for %s:%d", __func__, __LINE__ );
10643 }
10644 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10645 {
10646 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10647 "Failure in %s:%d", __func__, __LINE__ );
10648 }
10649
10650 vos_mem_free(addPeriodicTxPtrnParams);
10651
10652 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10653}
10654
10655/*
10656 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
10657 *
10658 */
10659VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
10660 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
10661{
10662 WDI_Status wdiStatus;
10663 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
10664
10665 delPeriodicTxPtrnParams =
10666 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
10667
10668 if (NULL == delPeriodicTxPtrnParams)
10669 {
10670 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10671 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
10672 __func__);
10673
10674 return VOS_STATUS_E_NOMEM;
10675 }
10676
10677 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
10678 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
10679
10680 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
10681 delPeriodicTxPtrnParams->pUserData = pWDA;
10682
10683 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
10684
10685 if (WDI_STATUS_PENDING == wdiStatus)
10686 {
10687 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10688 "Pending received for %s:%d", __func__, __LINE__ );
10689 }
10690 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10691 {
10692 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10693 "Failure in %s:%d", __func__, __LINE__ );
10694 }
10695
10696 vos_mem_free(delPeriodicTxPtrnParams);
10697
10698 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10699}
10700
Rajeev79dbe4c2013-10-05 11:03:42 +053010701#ifdef FEATURE_WLAN_BATCH_SCAN
10702/*
10703 * FUNCTION: WDA_ProcessStopBatchScanInd
10704 *
10705 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
10706 *
10707 * PARAM:
10708 * pWDA: pointer to WDA context
10709 * pReq: pointer to stop batch scan request
10710 */
10711VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
10712 tSirStopBatchScanInd *pReq)
10713{
10714 WDI_Status wdiStatus;
10715 WDI_StopBatchScanIndType wdiReq;
10716
10717 wdiReq.param = pReq->param;
10718
10719 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
10720
10721 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10722 {
10723 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10724 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
10725 }
10726
10727 vos_mem_free(pReq);
10728
10729 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10730}
10731/*==========================================================================
10732 FUNCTION WDA_ProcessTriggerBatchScanResultInd
10733
10734 DESCRIPTION
10735 API to pull batch scan result from FW
10736
10737 PARAMETERS
10738 pWDA: Pointer to WDA context
10739 pGetBatchScanReq: Pointer to get batch scan result indication
10740
10741 RETURN VALUE
10742 NONE
10743
10744===========================================================================*/
10745VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
10746 tSirTriggerBatchScanResultInd *pReq)
10747{
10748 WDI_Status wdiStatus;
10749 WDI_TriggerBatchScanResultIndType wdiReq;
10750
10751 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10752 "------> %s " ,__func__);
10753
10754 wdiReq.param = pReq->param;
10755
10756 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
10757
10758 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10759 {
10760 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10761 "Trigger batch scan result ind failed %s:%d",
10762 __func__, wdiStatus);
10763 }
10764
10765 vos_mem_free(pReq);
10766
10767 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10768}
10769
10770/*==========================================================================
10771 FUNCTION WDA_SetBatchScanRespCallback
10772
10773 DESCRIPTION
10774 API to process set batch scan response from FW
10775
10776 PARAMETERS
10777 pRsp: Pointer to set batch scan response
10778 pUserData: Pointer to user data
10779
10780 RETURN VALUE
10781 NONE
10782
10783===========================================================================*/
10784void WDA_SetBatchScanRespCallback
10785(
10786 WDI_SetBatchScanRspType *pRsp,
10787 void* pUserData
10788)
10789{
10790 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
10791 tpAniSirGlobal pMac;
10792 void *pCallbackContext;
10793 tWDA_CbContext *pWDA = NULL ;
10794 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10795
10796
10797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10798 "<------ %s " ,__func__);
10799 if (NULL == pWdaParams)
10800 {
10801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10802 "%s: pWdaParams received NULL", __func__);
10803 VOS_ASSERT(0) ;
10804 return ;
10805 }
10806
10807 /*extract WDA context*/
10808 pWDA = pWdaParams->pWdaContext;
10809 if (NULL == pWDA)
10810 {
10811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10812 "%s:pWDA is NULL can't invole HDD callback",
10813 __func__);
10814 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10815 vos_mem_free(pWdaParams->wdaMsgParam);
10816 vos_mem_free(pWdaParams);
10817 VOS_ASSERT(0);
10818 return;
10819 }
10820
10821 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10822 vos_mem_free(pWdaParams->wdaMsgParam);
10823 vos_mem_free(pWdaParams);
10824
10825 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
10826 if (NULL == pMac)
10827 {
10828 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10829 "%s:pMac is NULL", __func__);
10830 VOS_ASSERT(0);
10831 return;
10832 }
10833
10834 pHddSetBatchScanRsp =
10835 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
10836 if (NULL == pHddSetBatchScanRsp)
10837 {
10838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10839 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
10840 VOS_ASSERT(0);
10841 return;
10842 }
10843
10844 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
10845
10846 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
10847 /*call hdd callback with set batch scan response data*/
10848 if(pMac->pmc.setBatchScanReqCallback)
10849 {
10850 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
10851 }
10852 else
10853 {
10854 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10855 "%s:HDD callback is null", __func__);
10856 VOS_ASSERT(0);
10857 }
10858
10859 vos_mem_free(pHddSetBatchScanRsp);
10860 return ;
10861}
10862
10863/*==========================================================================
10864 FUNCTION WDA_ProcessSetBatchScanReq
10865
10866 DESCRIPTION
10867 API to send set batch scan request to WDI
10868
10869 PARAMETERS
10870 pWDA: Pointer to WDA context
10871 pSetBatchScanReq: Pointer to set batch scan req
10872
10873 RETURN VALUE
10874 NONE
10875
10876===========================================================================*/
10877VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
10878 tSirSetBatchScanReq *pSetBatchScanReq)
10879{
10880 WDI_Status status;
10881 tWDA_ReqParams *pWdaParams ;
10882 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
10883
10884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
10885 "------> %s " ,__func__);
10886
10887 pWdiSetBatchScanReq =
10888 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
10889 if (NULL == pWdiSetBatchScanReq)
10890 {
10891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10892 "%s: VOS MEM Alloc Failure", __func__);
10893 vos_mem_free(pSetBatchScanReq);
10894 VOS_ASSERT(0);
10895 return VOS_STATUS_E_NOMEM;
10896 }
10897
10898 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
10899 if (NULL == pWdaParams)
10900 {
10901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10902 "%s: VOS MEM Alloc Failure", __func__);
10903 VOS_ASSERT(0);
10904 vos_mem_free(pSetBatchScanReq);
10905 vos_mem_free(pWdiSetBatchScanReq);
10906 return VOS_STATUS_E_NOMEM;
10907 }
10908
10909 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
10910 pWdiSetBatchScanReq->numberOfScansToBatch =
10911 pSetBatchScanReq->numberOfScansToBatch;
10912 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
10913 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
10914 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
10915
10916 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
10917 pWdaParams->pWdaContext = pWDA;
10918 pWdaParams->wdaMsgParam = pSetBatchScanReq;
10919
10920 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
10921 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
10922 if (IS_WDI_STATUS_FAILURE(status))
10923 {
10924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10925 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
10926 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10927 vos_mem_free(pWdaParams->wdaMsgParam);
10928 vos_mem_free(pWdaParams);
10929 }
10930 return CONVERT_WDI2VOS_STATUS(status);
10931}
10932
10933#endif
10934
Yue Mab9c86f42013-08-14 15:59:08 -070010935/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070010936 * FUNCTION: WDA_ProcessRateUpdateInd
10937 *
10938 */
10939VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
10940 tSirRateUpdateInd *pRateUpdateParams)
10941{
10942 WDI_Status wdiStatus;
10943 WDI_RateUpdateIndParams rateUpdateParams;
10944
10945 vos_mem_copy(rateUpdateParams.bssid,
10946 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
10947
10948 rateUpdateParams.ucastDataRateTxFlag =
10949 pRateUpdateParams->ucastDataRateTxFlag;
10950 rateUpdateParams.reliableMcastDataRateTxFlag =
10951 pRateUpdateParams->reliableMcastDataRateTxFlag;
10952 rateUpdateParams.mcastDataRate24GHzTxFlag =
10953 pRateUpdateParams->mcastDataRate24GHzTxFlag;
10954 rateUpdateParams.mcastDataRate5GHzTxFlag =
10955 pRateUpdateParams->mcastDataRate5GHzTxFlag;
10956
10957 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
10958 rateUpdateParams.reliableMcastDataRate =
10959 pRateUpdateParams->reliableMcastDataRate;
10960 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
10961 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
10962
10963 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
10964 rateUpdateParams.pUserData = pWDA;
10965
10966 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
10967
10968 if (WDI_STATUS_PENDING == wdiStatus)
10969 {
10970 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10971 "Pending received for %s:%d", __func__, __LINE__ );
10972 }
10973 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
10974 {
10975 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10976 "Failure in %s:%d", __func__, __LINE__ );
10977 }
10978
10979 vos_mem_free(pRateUpdateParams);
10980
10981 return CONVERT_WDI2VOS_STATUS(wdiStatus);
10982}
10983
10984/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010985 * -------------------------------------------------------------------------
10986 * DATA interface with WDI for Mgmt Frames
10987 * -------------------------------------------------------------------------
10988 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010989/*
10990 * FUNCTION: WDA_TxComplete
10991 * Callback function for the WDA_TxPacket
10992 */
10993VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
10994 VOS_STATUS status )
10995{
10996
10997 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10998 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070010999 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011000
11001 if(NULL == wdaContext)
11002 {
11003 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11004 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011005 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011006 VOS_ASSERT(0);
11007 return VOS_STATUS_E_FAILURE;
11008 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011009
11010 /*Check if frame was timed out or not*/
11011 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11012 (v_PVOID_t)&uUserData);
11013
11014 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11015 {
11016 /*Discard frame - no further processing is needed*/
11017 vos_pkt_return_packet(pData);
11018 return VOS_STATUS_SUCCESS;
11019 }
11020
Jeff Johnson295189b2012-06-20 16:38:30 -070011021 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11022 if( NULL!=wdaContext->pTxCbFunc)
11023 {
11024 /*check if packet is freed already*/
11025 if(vos_atomic_set_U32(&wdaContext->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED) == (v_U32_t)pData)
11026 {
11027 wdaContext->pTxCbFunc(pMac, pData);
11028 }
11029 else
11030 {
11031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011032 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011033 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011034 //Return from here since we reaching here because the packet already timeout
11035 return status;
11036 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011037 }
11038
11039 /*
11040 * Trigger the event to bring the HAL TL Tx complete function to come
11041 * out of wait
11042 * Let the coe above to complete the packet first. When this event is set,
11043 * the thread waiting for the event may run and set Vospacket_freed causing the original
11044 * packet not being freed.
11045 */
11046 status = vos_event_set(&wdaContext->txFrameEvent);
11047 if(!VOS_IS_STATUS_SUCCESS(status))
11048 {
11049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011050 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011052 return status;
11053}
Jeff Johnson295189b2012-06-20 16:38:30 -070011054/*
11055 * FUNCTION: WDA_TxPacket
11056 * Forward TX management frame to WDI
11057 */
11058VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11059 void *pFrmBuf,
11060 tANI_U16 frmLen,
11061 eFrameType frmType,
11062 eFrameTxDir txDir,
11063 tANI_U8 tid,
11064 pWDATxRxCompFunc pCompFunc,
11065 void *pData,
11066 pWDAAckFnTxComp pAckTxComp,
11067 tANI_U8 txFlag)
11068{
11069 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11070 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11071 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11072 tANI_U8 eventIdx = 0;
11073 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11074 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011075 if((NULL == pWDA)||(NULL == pFrmBuf))
11076 {
11077 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011078 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011079 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011080 VOS_ASSERT(0);
11081 return VOS_STATUS_E_FAILURE;
11082 }
11083
11084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011085 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011086 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11087 if(NULL == pMac)
11088 {
11089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011090 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011091 VOS_ASSERT(0);
11092 return VOS_STATUS_E_FAILURE;
11093 }
11094
11095
11096
11097 /* store the call back function in WDA context */
11098 pWDA->pTxCbFunc = pCompFunc;
11099 /* store the call back for the function of ackTxComplete */
11100 if( pAckTxComp )
11101 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011102 if( NULL != pWDA->pAckTxCbFunc )
11103 {
11104 /* Already TxComp is active no need to active again */
11105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011106 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011107 pWDA->pAckTxCbFunc( pMac, 0);
11108 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011109
Jeff Johnsone7245742012-09-05 17:12:55 -070011110 if( VOS_STATUS_SUCCESS !=
11111 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11112 {
11113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11114 "Tx Complete timeout Timer Stop Failed ");
11115 }
11116 else
11117 {
11118 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011119 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011120 }
11121 }
11122
11123 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11124 pWDA->pAckTxCbFunc = pAckTxComp;
11125 if( VOS_STATUS_SUCCESS !=
11126 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11127 {
11128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11129 "Tx Complete Timer Start Failed ");
11130 pWDA->pAckTxCbFunc = NULL;
11131 return eHAL_STATUS_FAILURE;
11132 }
11133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 /* Reset the event to be not signalled */
11135 status = vos_event_reset(&pWDA->txFrameEvent);
11136 if(!VOS_IS_STATUS_SUCCESS(status))
11137 {
11138 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011139 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011140 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11141 if( pAckTxComp )
11142 {
11143 pWDA->pAckTxCbFunc = NULL;
11144 if( VOS_STATUS_SUCCESS !=
11145 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11146 {
11147 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11148 "Tx Complete timeout Timer Stop Failed ");
11149 }
11150 }
11151 return VOS_STATUS_E_FAILURE;
11152 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011153
11154 /* If Peer Sta mask is set don't overwrite to self sta */
11155 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011156 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011157 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011158 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011159 else
11160 {
Ganesh K08bce952012-12-13 15:04:41 -080011161 /* Get system role, use the self station if in unknown role or STA role */
11162 systemRole = wdaGetGlobalSystemRole(pMac);
11163 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11164 (( eSYSTEM_STA_ROLE == systemRole )
Mohit Khanna698ba2a2012-12-04 15:08:18 -080011165#if defined FEATURE_WLAN_CCX || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011166 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011167#endif
Ganesh K08bce952012-12-13 15:04:41 -080011168 ))
11169 {
11170 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11171 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011172 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011173
Jeff Johnsone7245742012-09-05 17:12:55 -070011174 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11175 disassoc frame reaches the HW, HAL has already deleted the peer station */
11176 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011177 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011178 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011179 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011180 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011181 /*Send Probe request frames on self sta idx*/
11182 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011184 /* Since we donot want probe responses to be retried, send probe responses
11185 through the NO_ACK queues */
11186 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11187 {
11188 //probe response is sent out using self station and no retries options.
11189 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11190 }
11191 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11192 {
11193 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11194 }
11195 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011196 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
11197
11198 /*Set frame tag to 0
11199 We will use the WDA user data in order to tag a frame as expired*/
11200 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11201 (v_PVOID_t)0);
11202
11203
11204 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11205 frmLen, ucTypeSubType, tid,
11206 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11207 {
11208 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011209 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011210 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
11211 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
11212 if( pAckTxComp )
11213 {
11214 pWDA->pAckTxCbFunc = NULL;
11215 if( VOS_STATUS_SUCCESS !=
11216 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11217 {
11218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11219 "Tx Complete timeout Timer Stop Failed ");
11220 }
11221 }
11222 return VOS_STATUS_E_FAILURE;
11223 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011224 /*
11225 * Wait for the event to be set by the TL, to get the response of TX
11226 * complete, this event should be set by the Callback function called by TL
11227 */
11228 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11229 &eventIdx);
11230 if(!VOS_IS_STATUS_SUCCESS(status))
11231 {
11232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11233 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011234 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011235 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11236 after the packet gets completed(packet freed once)*/
11237
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011238 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
schang6295e542013-03-12 15:31:23 -070011239 WDA_TransportChannelDebug(pMac, 1, 0);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011240
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011241 /*Tag Frame as timed out for later deletion*/
11242 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11243 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11244
Jeff Johnson295189b2012-06-20 16:38:30 -070011245 /* check whether the packet was freed already,so need not free again when
11246 * TL calls the WDA_Txcomplete routine
11247 */
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011248 vos_atomic_set_U32(&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);
11249 /*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 -070011250 {
11251 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011252 } */
11253
Jeff Johnson295189b2012-06-20 16:38:30 -070011254 if( pAckTxComp )
11255 {
11256 pWDA->pAckTxCbFunc = NULL;
11257 if( VOS_STATUS_SUCCESS !=
11258 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11259 {
11260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11261 "Tx Complete timeout Timer Stop Failed ");
11262 }
11263 }
11264 status = VOS_STATUS_E_FAILURE;
11265 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011266#ifdef WLAN_DUMP_MGMTFRAMES
11267 if (VOS_IS_STATUS_SUCCESS(status))
11268 {
11269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11270 "%s() TX packet : SubType %d", __func__,pFc->subType);
11271 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11272 pData, frmLen);
11273 }
11274#endif
11275
Jeff Johnson295189b2012-06-20 16:38:30 -070011276 return status;
11277}
Jeff Johnson295189b2012-06-20 16:38:30 -070011278/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011279 * FUNCTION: WDA_ProcessDHCPStartInd
11280 * Forward DHCP Start to WDI
11281 */
11282static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
11283 tAniDHCPInd *dhcpStartInd)
11284{
11285 WDI_Status status;
11286 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11287 if (NULL == wdiDHCPInd)
11288 {
11289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11290 "%s: VOS MEM Alloc Failure", __func__);
11291 VOS_ASSERT(0);
11292 vos_mem_free(dhcpStartInd);
11293 return VOS_STATUS_E_NOMEM;
11294 }
11295
11296 wdiDHCPInd->device_mode = dhcpStartInd->device_mode;
11297 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStartInd->macAddr,
11298 sizeof(tSirMacAddr));
11299
11300 status = WDI_dhcpStartInd(wdiDHCPInd);
11301
11302 if (IS_WDI_STATUS_FAILURE(status))
11303 {
11304 vos_mem_free(wdiDHCPInd);
11305 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11306 "DHCP Start Indication failed");
11307 }
11308 vos_mem_free(dhcpStartInd);
11309 return CONVERT_WDI2VOS_STATUS(status) ;
11310}
11311
11312 /*
11313 * FUNCTION: WDA_ProcessDHCPStopInd
11314 * Forward DHCP Stop to WDI
11315 */
11316 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
11317 tAniDHCPInd *dhcpStopInd)
11318 {
11319 WDI_Status status;
11320 WDI_DHCPInd *wdiDHCPInd = (WDI_DHCPInd*)vos_mem_malloc(sizeof(WDI_DHCPInd)) ;
11321 if (NULL == wdiDHCPInd)
11322 {
11323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11324 "%s: VOS MEM Alloc Failure", __func__);
11325 VOS_ASSERT(0);
11326 vos_mem_free(dhcpStopInd);
11327 return VOS_STATUS_E_NOMEM;
11328 }
11329 wdiDHCPInd->device_mode = dhcpStopInd->device_mode;
11330 vos_mem_copy(wdiDHCPInd->macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
11331 status = WDI_dhcpStopInd(wdiDHCPInd);
11332 if (IS_WDI_STATUS_FAILURE(status))
11333 {
11334 vos_mem_free(wdiDHCPInd);
11335 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11336 "DHCP Start Indication failed");
11337 }
11338 vos_mem_free(dhcpStopInd);
11339 return CONVERT_WDI2VOS_STATUS(status) ;
11340 }
11341
11342/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011343 * FUNCTION: WDA_McProcessMsg
11344 * Trigger DAL-AL to start CFG download
11345 */
11346VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
11347{
11348 VOS_STATUS status = VOS_STATUS_SUCCESS;
11349 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011350 if(NULL == pMsg)
11351 {
11352 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011353 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011354 VOS_ASSERT(0);
11355 return VOS_STATUS_E_FAILURE;
11356 }
11357
11358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011359 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070011360
11361 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
11362 if(NULL == pWDA )
11363 {
11364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011365 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011366 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070011367 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011368 return VOS_STATUS_E_FAILURE;
11369 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011370 /* Process all the WDA messages.. */
11371 switch( pMsg->type )
11372 {
11373 case WNI_CFG_DNLD_REQ:
11374 {
11375 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070011376 /* call WDA complete event if config download success */
11377 if( VOS_IS_STATUS_SUCCESS(status) )
11378 {
11379 vos_WDAComplete_cback(pVosContext);
11380 }
11381 else
11382 {
11383 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11384 "WDA Config Download failure" );
11385 }
11386 break ;
11387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011388 /*
11389 * Init SCAN request from PE, convert it into DAL format
11390 * and send it to DAL
11391 */
11392 case WDA_INIT_SCAN_REQ:
11393 {
11394 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
11395 break ;
11396 }
11397 /* start SCAN request from PE */
11398 case WDA_START_SCAN_REQ:
11399 {
11400 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
11401 break ;
11402 }
11403 /* end SCAN request from PE */
11404 case WDA_END_SCAN_REQ:
11405 {
11406 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
11407 break ;
11408 }
11409 /* end SCAN request from PE */
11410 case WDA_FINISH_SCAN_REQ:
11411 {
11412 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
11413 break ;
11414 }
11415 /* join request from PE */
11416 case WDA_CHNL_SWITCH_REQ:
11417 {
11418 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
11419 {
11420 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
11421 }
11422 else
11423 {
11424 WDA_ProcessChannelSwitchReq(pWDA,
11425 (tSwitchChannelParams*)pMsg->bodyptr) ;
11426 }
11427 break ;
11428 }
11429 /* ADD BSS request from PE */
11430 case WDA_ADD_BSS_REQ:
11431 {
11432 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
11433 break ;
11434 }
11435 case WDA_ADD_STA_REQ:
11436 {
11437 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
11438 break ;
11439 }
11440 case WDA_DELETE_BSS_REQ:
11441 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011442 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
11443 break ;
11444 }
11445 case WDA_DELETE_STA_REQ:
11446 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011447 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
11448 break ;
11449 }
11450 case WDA_CONFIG_PARAM_UPDATE_REQ:
11451 {
11452 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
11453 break ;
11454 }
11455 case WDA_SET_BSSKEY_REQ:
11456 {
11457 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
11458 break ;
11459 }
11460 case WDA_SET_STAKEY_REQ:
11461 {
11462 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11463 break ;
11464 }
11465 case WDA_SET_STA_BCASTKEY_REQ:
11466 {
11467 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
11468 break ;
11469 }
11470 case WDA_REMOVE_BSSKEY_REQ:
11471 {
11472 WDA_ProcessRemoveBssKeyReq(pWDA,
11473 (tRemoveBssKeyParams *)pMsg->bodyptr);
11474 break ;
11475 }
11476 case WDA_REMOVE_STAKEY_REQ:
11477 {
11478 WDA_ProcessRemoveStaKeyReq(pWDA,
11479 (tRemoveStaKeyParams *)pMsg->bodyptr);
11480 break ;
11481 }
11482 case WDA_REMOVE_STA_BCASTKEY_REQ:
11483 {
11484 /* TODO: currently UMAC is not sending this request, Add the code for
11485 handling this request when UMAC supports */
11486 break;
11487 }
11488#ifdef FEATURE_WLAN_CCX
11489 case WDA_TSM_STATS_REQ:
11490 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070011491 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011492 break;
11493 }
11494#endif
11495 case WDA_UPDATE_EDCA_PROFILE_IND:
11496 {
11497 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
11498 break;
11499 }
11500 case WDA_ADD_TS_REQ:
11501 {
11502 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
11503 break;
11504 }
11505 case WDA_DEL_TS_REQ:
11506 {
11507 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
11508 break;
11509 }
11510 case WDA_ADDBA_REQ:
11511 {
11512 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
11513 break;
11514 }
11515 case WDA_DELBA_IND:
11516 {
11517 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
11518 break;
11519 }
11520 case WDA_SET_LINK_STATE:
11521 {
11522 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
11523 break;
11524 }
11525 case WDA_GET_STATISTICS_REQ:
11526 {
11527 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
11528 break;
11529 }
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080011530#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_CCX || defined(FEATURE_WLAN_LFR)
11531 case WDA_GET_ROAM_RSSI_REQ:
11532 {
11533 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
11534 break;
11535 }
11536#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011537 case WDA_PWR_SAVE_CFG:
11538 {
11539 if(pWDA->wdaState == WDA_READY_STATE)
11540 {
11541 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
11542 }
11543 else
11544 {
11545 if(NULL != pMsg->bodyptr)
11546 {
11547 vos_mem_free(pMsg->bodyptr);
11548 }
11549 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11550 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
11551 }
11552 break;
11553 }
11554 case WDA_ENTER_IMPS_REQ:
11555 {
11556 if(pWDA->wdaState == WDA_READY_STATE)
11557 {
11558 WDA_ProcessEnterImpsReq(pWDA);
11559 }
11560 else
11561 {
11562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11563 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11564 }
11565 break;
11566 }
11567 case WDA_EXIT_IMPS_REQ:
11568 {
11569 if(pWDA->wdaState == WDA_READY_STATE)
11570 {
11571 WDA_ProcessExitImpsReq(pWDA);
11572 }
11573 else
11574 {
11575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11576 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
11577 }
11578 break;
11579 }
11580 case WDA_ENTER_BMPS_REQ:
11581 {
11582 if(pWDA->wdaState == WDA_READY_STATE)
11583 {
11584 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
11585 }
11586 else
11587 {
11588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11589 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11590 }
11591 break;
11592 }
11593 case WDA_EXIT_BMPS_REQ:
11594 {
11595 if(pWDA->wdaState == WDA_READY_STATE)
11596 {
11597 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
11598 }
11599 else
11600 {
11601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11602 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
11603 }
11604 break;
11605 }
11606 case WDA_ENTER_UAPSD_REQ:
11607 {
11608 if(pWDA->wdaState == WDA_READY_STATE)
11609 {
11610 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
11611 }
11612 else
11613 {
11614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11615 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11616 }
11617 break;
11618 }
11619 case WDA_EXIT_UAPSD_REQ:
11620 {
11621 if(pWDA->wdaState == WDA_READY_STATE)
11622 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011623 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011624 }
11625 else
11626 {
11627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11628 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
11629 }
11630 break;
11631 }
11632 case WDA_UPDATE_UAPSD_IND:
11633 {
11634 if(pWDA->wdaState == WDA_READY_STATE)
11635 {
11636 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
11637 }
11638 else
11639 {
11640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11641 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
11642 }
11643 break;
11644 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011645 case WDA_REGISTER_PE_CALLBACK :
11646 {
11647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11648 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
11649 /*TODO: store the PE callback */
11650 /* Do Nothing? MSG Body should be freed at here */
11651 if(NULL != pMsg->bodyptr)
11652 {
11653 vos_mem_free(pMsg->bodyptr);
11654 }
11655 break;
11656 }
11657 case WDA_SYS_READY_IND :
11658 {
11659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11660 "Handling msg type WDA_SYS_READY_IND " );
11661 pWDA->wdaState = WDA_READY_STATE;
11662 if(NULL != pMsg->bodyptr)
11663 {
11664 vos_mem_free(pMsg->bodyptr);
11665 }
11666 break;
11667 }
11668 case WDA_BEACON_FILTER_IND :
11669 {
11670 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
11671 break;
11672 }
11673 case WDA_BTC_SET_CFG:
11674 {
11675 /*TODO: handle this while dealing with BTC */
11676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11677 "Handling msg type WDA_BTC_SET_CFG " );
11678 /* Do Nothing? MSG Body should be freed at here */
11679 if(NULL != pMsg->bodyptr)
11680 {
11681 vos_mem_free(pMsg->bodyptr);
11682 }
11683 break;
11684 }
11685 case WDA_SIGNAL_BT_EVENT:
11686 {
11687 /*TODO: handle this while dealing with BTC */
11688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11689 "Handling msg type WDA_SIGNAL_BT_EVENT " );
11690 /* Do Nothing? MSG Body should be freed at here */
11691 if(NULL != pMsg->bodyptr)
11692 {
11693 vos_mem_free(pMsg->bodyptr);
11694 }
11695 break;
11696 }
11697 case WDA_CFG_RXP_FILTER_REQ:
11698 {
11699 WDA_ProcessConfigureRxpFilterReq(pWDA,
11700 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
11701 break;
11702 }
11703 case WDA_SET_HOST_OFFLOAD:
11704 {
11705 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11706 break;
11707 }
11708 case WDA_SET_KEEP_ALIVE:
11709 {
11710 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
11711 break;
11712 }
11713#ifdef WLAN_NS_OFFLOAD
11714 case WDA_SET_NS_OFFLOAD:
11715 {
11716 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
11717 break;
11718 }
11719#endif //WLAN_NS_OFFLOAD
11720 case WDA_ADD_STA_SELF_REQ:
11721 {
11722 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
11723 break;
11724 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011725 case WDA_DEL_STA_SELF_REQ:
11726 {
11727 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
11728 break;
11729 }
11730 case WDA_WOWL_ADD_BCAST_PTRN:
11731 {
11732 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
11733 break;
11734 }
11735 case WDA_WOWL_DEL_BCAST_PTRN:
11736 {
11737 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
11738 break;
11739 }
11740 case WDA_WOWL_ENTER_REQ:
11741 {
11742 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
11743 break;
11744 }
11745 case WDA_WOWL_EXIT_REQ:
11746 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011747 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070011748 break;
11749 }
11750 case WDA_TL_FLUSH_AC_REQ:
11751 {
11752 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
11753 break;
11754 }
11755 case WDA_SIGNAL_BTAMP_EVENT:
11756 {
11757 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
11758 break;
11759 }
11760#ifdef WDA_UT
11761 case WDA_WDI_EVENT_MSG:
11762 {
11763 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
11764 break ;
11765 }
11766#endif
11767 case WDA_UPDATE_BEACON_IND:
11768 {
11769 WDA_ProcessUpdateBeaconParams(pWDA,
11770 (tUpdateBeaconParams *)pMsg->bodyptr);
11771 break;
11772 }
11773 case WDA_SEND_BEACON_REQ:
11774 {
11775 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
11776 break;
11777 }
11778 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
11779 {
11780 WDA_ProcessUpdateProbeRspTemplate(pWDA,
11781 (tSendProbeRespParams *)pMsg->bodyptr);
11782 break;
11783 }
11784#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_CCX)
11785 case WDA_SET_MAX_TX_POWER_REQ:
11786 {
11787 WDA_ProcessSetMaxTxPowerReq(pWDA,
11788 (tMaxTxPowerParams *)pMsg->bodyptr);
11789 break;
11790 }
11791#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070011792 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
11793 {
11794 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
11795 pMsg->bodyptr);
11796 break;
11797 }
schang86c22c42013-03-13 18:41:24 -070011798 case WDA_SET_TX_POWER_REQ:
11799 {
11800 WDA_ProcessSetTxPowerReq(pWDA,
11801 (tSirSetTxPowerReq *)pMsg->bodyptr);
11802 break;
11803 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 case WDA_SET_P2P_GO_NOA_REQ:
11805 {
11806 WDA_ProcessSetP2PGONOAReq(pWDA,
11807 (tP2pPsParams *)pMsg->bodyptr);
11808 break;
11809 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 /* timer related messages */
11811 case WDA_TIMER_BA_ACTIVITY_REQ:
11812 {
11813 WDA_BaCheckActivity(pWDA) ;
11814 break ;
11815 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080011816
11817 /* timer related messages */
11818 case WDA_TIMER_TRAFFIC_STATS_IND:
11819 {
11820 WDA_TimerTrafficStatsInd(pWDA);
11821 break;
11822 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011823#ifdef WLAN_FEATURE_VOWIFI_11R
11824 case WDA_AGGR_QOS_REQ:
11825 {
11826 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
11827 break;
11828 }
11829#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070011830 case WDA_FTM_CMD_REQ:
11831 {
11832 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
11833 break ;
11834 }
Jeff Johnsone7245742012-09-05 17:12:55 -070011835#ifdef FEATURE_OEM_DATA_SUPPORT
11836 case WDA_START_OEM_DATA_REQ:
11837 {
11838 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
11839 break;
11840 }
11841#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070011842 /* Tx Complete Time out Indication */
11843 case WDA_TX_COMPLETE_TIMEOUT_IND:
11844 {
11845 WDA_ProcessTxCompleteTimeOutInd(pWDA);
11846 break;
11847 }
11848 case WDA_WLAN_SUSPEND_IND:
11849 {
11850 WDA_ProcessWlanSuspendInd(pWDA,
11851 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
11852 break;
11853 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011854 case WDA_WLAN_RESUME_REQ:
11855 {
11856 WDA_ProcessWlanResumeReq(pWDA,
11857 (tSirWlanResumeParam *)pMsg->bodyptr) ;
11858 break;
11859 }
11860
11861 case WDA_UPDATE_CF_IND:
11862 {
11863 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
11864 pMsg->bodyptr = NULL;
11865 break;
11866 }
11867#ifdef FEATURE_WLAN_SCAN_PNO
11868 case WDA_SET_PNO_REQ:
11869 {
11870 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
11871 break;
11872 }
11873 case WDA_UPDATE_SCAN_PARAMS_REQ:
11874 {
11875 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
11876 break;
11877 }
11878 case WDA_SET_RSSI_FILTER_REQ:
11879 {
11880 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
11881 break;
11882 }
11883#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011884#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011885 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011886 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070011887 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070011888 break;
11889 }
11890#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070011891 case WDA_SET_TX_PER_TRACKING_REQ:
11892 {
11893 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
11894 break;
11895 }
11896
11897#ifdef WLAN_FEATURE_PACKET_FILTERING
11898 case WDA_8023_MULTICAST_LIST_REQ:
11899 {
11900 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
11901 break;
11902 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011903 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
11904 {
11905 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
11906 break;
11907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
11909 {
11910 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
11911 break;
11912 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011913 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
11914 {
11915 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
11916 break;
11917 }
11918#endif // WLAN_FEATURE_PACKET_FILTERING
11919
11920
11921 case WDA_TRANSMISSION_CONTROL_IND:
11922 {
11923 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
11924 break;
11925 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011926 case WDA_SET_POWER_PARAMS_REQ:
11927 {
11928 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
11929 break;
11930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011931#ifdef WLAN_FEATURE_GTK_OFFLOAD
11932 case WDA_GTK_OFFLOAD_REQ:
11933 {
11934 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
11935 break;
11936 }
11937
11938 case WDA_GTK_OFFLOAD_GETINFO_REQ:
11939 {
11940 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
11941 break;
11942 }
11943#endif //WLAN_FEATURE_GTK_OFFLOAD
11944
11945 case WDA_SET_TM_LEVEL_REQ:
11946 {
11947 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
11948 break;
11949 }
Mohit Khanna4a70d262012-09-11 16:30:12 -070011950#ifdef WLAN_FEATURE_11AC
11951 case WDA_UPDATE_OP_MODE:
11952 {
11953 if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
11954 {
11955 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
11956 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
11957 else
11958 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011959 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070011960 }
11961 else
11962 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011963 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070011964 break;
11965 }
11966#endif
Chet Lanctot186b5732013-03-18 10:26:30 -070011967#ifdef WLAN_FEATURE_11W
11968 case WDA_EXCLUDE_UNENCRYPTED_IND:
11969 {
11970 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
11971 break;
11972 }
11973#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053011974#ifdef FEATURE_WLAN_TDLS
11975 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
11976 {
11977 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
11978 break;
11979 }
11980#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053011981 case WDA_DHCP_START_IND:
11982 {
11983 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11984 break;
11985 }
11986 case WDA_DHCP_STOP_IND:
11987 {
11988 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
11989 break;
11990 }
Leo Chang9056f462013-08-01 19:21:11 -070011991#ifdef FEATURE_WLAN_LPHB
11992 case WDA_LPHB_CONF_REQ:
11993 {
11994 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
11995 break;
11996 }
11997#endif
Yue Mab9c86f42013-08-14 15:59:08 -070011998 case WDA_ADD_PERIODIC_TX_PTRN_IND:
11999 {
12000 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12001 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12002 break;
12003 }
12004 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12005 {
12006 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12007 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12008 break;
12009 }
12010
Rajeev79dbe4c2013-10-05 11:03:42 +053012011#ifdef FEATURE_WLAN_BATCH_SCAN
12012 case WDA_SET_BATCH_SCAN_REQ:
12013 {
12014 WDA_ProcessSetBatchScanReq(pWDA,
12015 (tSirSetBatchScanReq *)pMsg->bodyptr);
12016 break;
12017 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012018 case WDA_RATE_UPDATE_IND:
12019 {
12020 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12021 break;
12022 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012023 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12024 {
12025 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12026 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12027 break;
12028 }
12029 case WDA_STOP_BATCH_SCAN_IND:
12030 {
12031 WDA_ProcessStopBatchScanInd(pWDA,
12032 (tSirStopBatchScanInd *)pMsg->bodyptr);
12033 break;
12034 }
12035#endif
12036
Jeff Johnson295189b2012-06-20 16:38:30 -070012037 default:
12038 {
12039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12040 "No Handling for msg type %x in WDA "
12041 ,pMsg->type);
12042 /* Do Nothing? MSG Body should be freed at here */
12043 if(NULL != pMsg->bodyptr)
12044 {
12045 vos_mem_free(pMsg->bodyptr);
12046 }
12047 //WDA_VOS_ASSERT(0) ;
12048 }
12049 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012050 return status ;
12051}
12052
Jeff Johnson295189b2012-06-20 16:38:30 -070012053/*
12054 * FUNCTION: WDA_LowLevelIndCallback
12055 * IND API callback from WDI, send Ind to PE
12056 */
12057void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12058 void* pUserData )
12059{
12060 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12061#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12062 tSirRSSINotification rssiNotification;
12063#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012064 if(NULL == pWDA)
12065 {
12066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012067 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012068 VOS_ASSERT(0);
12069 return ;
12070 }
12071
12072 switch(wdiLowLevelInd->wdiIndicationType)
12073 {
12074 case WDI_RSSI_NOTIFICATION_IND:
12075 {
12076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12077 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012078#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12079 rssiNotification.bReserved =
12080 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12081 rssiNotification.bRssiThres1NegCross =
12082 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12083 rssiNotification.bRssiThres1PosCross =
12084 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12085 rssiNotification.bRssiThres2NegCross =
12086 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12087 rssiNotification.bRssiThres2PosCross =
12088 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12089 rssiNotification.bRssiThres3NegCross =
12090 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12091 rssiNotification.bRssiThres3PosCross =
12092 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012093 rssiNotification.avgRssi = (v_S7_t)
12094 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012095 WLANTL_BMPSRSSIRegionChangedNotification(
12096 pWDA->pVosContext,
12097 &rssiNotification);
12098#endif
12099 break ;
12100 }
12101 case WDI_MISSED_BEACON_IND:
12102 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012103 tpSirSmeMissedBeaconInd pMissBeacInd =
12104 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12106 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012108 if(NULL == pMissBeacInd)
12109 {
12110 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12111 "%s: VOS MEM Alloc Failure", __func__);
12112 break;
12113 }
12114 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12115 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12116 pMissBeacInd->bssIdx =
12117 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12118 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012119 break ;
12120 }
12121 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12122 {
12123 /* TODO: Decode Ind and send Ind to PE */
12124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12125 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12126 break ;
12127 }
12128
12129 case WDI_MIC_FAILURE_IND:
12130 {
12131 tpSirSmeMicFailureInd pMicInd =
12132 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12133
12134 if(NULL == pMicInd)
12135 {
12136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012138 break;
12139 }
12140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12141 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012142 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12143 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12144 vos_mem_copy(pMicInd->bssId,
12145 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12146 sizeof(tSirMacAddr));
12147 vos_mem_copy(pMicInd->info.srcMacAddr,
12148 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12149 sizeof(tSirMacAddr));
12150 vos_mem_copy(pMicInd->info.taMacAddr,
12151 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12152 sizeof(tSirMacAddr));
12153 vos_mem_copy(pMicInd->info.dstMacAddr,
12154 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12155 sizeof(tSirMacAddr));
12156 vos_mem_copy(pMicInd->info.rxMacAddr,
12157 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12158 sizeof(tSirMacAddr));
12159 pMicInd->info.multicast =
12160 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12161 pMicInd->info.keyId=
12162 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12163 pMicInd->info.IV1=
12164 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12165 vos_mem_copy(pMicInd->info.TSC,
12166 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012167 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12168 (void *)pMicInd , 0) ;
12169 break ;
12170 }
12171 case WDI_FATAL_ERROR_IND:
12172 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012173 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012174 /* TODO: Decode Ind and send Ind to PE */
12175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12176 "Received WDI_FATAL_ERROR_IND from WDI ");
12177 break ;
12178 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012179 case WDI_DEL_STA_IND:
12180 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012181 tpDeleteStaContext pDelSTACtx =
12182 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12183
12184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12185 "Received WDI_DEL_STA_IND from WDI ");
12186 if(NULL == pDelSTACtx)
12187 {
12188 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012189 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012190 break;
12191 }
12192 vos_mem_copy(pDelSTACtx->addr2,
12193 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12194 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012195 vos_mem_copy(pDelSTACtx->bssId,
12196 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12197 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 pDelSTACtx->assocId =
12199 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12200 pDelSTACtx->reasonCode =
12201 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12202 pDelSTACtx->staId =
12203 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012204 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12205 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012206 break ;
12207 }
12208 case WDI_COEX_IND:
12209 {
12210 tANI_U32 index;
12211 vos_msg_t vosMsg;
12212 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12213 if(NULL == pSmeCoexInd)
12214 {
12215 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012216 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012217 break;
12218 }
12219 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12220 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012221 /* Message Header */
12222 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
12223 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070012224 /* Info from WDI Indication */
12225 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
12226 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
12227 {
12228 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
12229 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012230 /* VOS message wrapper */
12231 vosMsg.type = eWNI_SME_COEX_IND;
12232 vosMsg.bodyptr = (void *)pSmeCoexInd;
12233 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012234 /* Send message to SME */
12235 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12236 {
12237 /* free the mem and return */
12238 vos_mem_free((v_VOID_t *)pSmeCoexInd);
12239 }
12240 else
12241 {
12242 /* DEBUG */
12243 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12244 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
12245 pSmeCoexInd->coexIndType,
12246 pSmeCoexInd->coexIndData[0],
12247 pSmeCoexInd->coexIndData[1],
12248 pSmeCoexInd->coexIndData[2],
12249 pSmeCoexInd->coexIndData[3]);
12250 }
12251 break;
12252 }
12253 case WDI_TX_COMPLETE_IND:
12254 {
12255 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
12256 /* Calling TxCompleteAck Indication from wda context*/
12257 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12258 "Complete Indication received from HAL");
12259 if( pWDA->pAckTxCbFunc )
12260 {
12261 if( VOS_STATUS_SUCCESS !=
12262 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
12263 {
12264 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12265 "Tx Complete timeout Timer Stop Failed ");
12266 }
12267 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
12268 pWDA->pAckTxCbFunc = NULL;
12269 }
12270 else
12271 {
12272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12273 "Tx Complete Indication is received after timeout ");
12274 }
12275 break;
12276 }
Viral Modid86bde22012-12-10 13:09:21 -080012277 case WDI_P2P_NOA_START_IND :
12278 {
12279 tSirP2PNoaStart *pP2pNoaStart =
12280 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
12281
12282 if (NULL == pP2pNoaStart)
12283 {
12284 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12285 "Memory allocation failure, "
12286 "WDI_P2P_NOA_START_IND not forwarded");
12287 break;
12288 }
12289 pP2pNoaStart->status =
12290 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
12291 pP2pNoaStart->bssIdx =
12292 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
12293 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
12294 (void *)pP2pNoaStart , 0) ;
12295 break;
12296 }
12297
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012298#ifdef FEATURE_WLAN_TDLS
12299 case WDI_TDLS_IND :
12300 {
12301 tSirTdlsInd *pTdlsInd =
12302 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
12303
12304 if (NULL == pTdlsInd)
12305 {
12306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12307 "Memory allocation failure, "
12308 "WDI_TDLS_IND not forwarded");
12309 break;
12310 }
12311 pTdlsInd->status =
12312 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
12313 pTdlsInd->assocId =
12314 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
12315 pTdlsInd->staIdx =
12316 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
12317 pTdlsInd->reasonCode =
12318 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
12319 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
12320 (void *)pTdlsInd , 0) ;
12321 break;
12322 }
12323#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012324 case WDI_P2P_NOA_ATTR_IND :
12325 {
12326 tSirP2PNoaAttr *pP2pNoaAttr =
12327 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012328 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12329 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012330 if (NULL == pP2pNoaAttr)
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12333 "Memory allocation failure, "
12334 "WDI_P2P_NOA_ATTR_IND not forwarded");
12335 break;
12336 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012337 pP2pNoaAttr->index =
12338 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
12339 pP2pNoaAttr->oppPsFlag =
12340 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
12341 pP2pNoaAttr->ctWin =
12342 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
12343
12344 pP2pNoaAttr->uNoa1IntervalCnt =
12345 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
12346 pP2pNoaAttr->uNoa1Duration =
12347 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
12348 pP2pNoaAttr->uNoa1Interval =
12349 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
12350 pP2pNoaAttr->uNoa1StartTime =
12351 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012352 pP2pNoaAttr->uNoa2IntervalCnt =
12353 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
12354 pP2pNoaAttr->uNoa2Duration =
12355 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
12356 pP2pNoaAttr->uNoa2Interval =
12357 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
12358 pP2pNoaAttr->uNoa2StartTime =
12359 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070012360 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
12361 (void *)pP2pNoaAttr , 0) ;
12362 break;
12363 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012364#ifdef FEATURE_WLAN_SCAN_PNO
12365 case WDI_PREF_NETWORK_FOUND_IND:
12366 {
12367 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012368 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
12369 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12370 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
12371 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
12372
Jeff Johnson295189b2012-06-20 16:38:30 -070012373 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12374 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070012375 if (NULL == pPrefNetworkFoundInd)
12376 {
12377 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12378 "Memory allocation failure, "
12379 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053012380 if (NULL !=
12381 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12382 {
12383 wpalMemoryFree(
12384 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
12385 );
12386 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12387 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012388 break;
12389 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012390 /* Message Header */
12391 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070012392 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070012393
12394 /* Info from WDI Indication */
12395 pPrefNetworkFoundInd->ssId.length =
12396 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070012397 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070012398 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
12399 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
12400 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070012401 if (NULL !=
12402 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
12403 {
12404 pPrefNetworkFoundInd->frameLength =
12405 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
12406 vos_mem_copy( pPrefNetworkFoundInd->data,
12407 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
12408 pPrefNetworkFoundInd->frameLength);
12409 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
12410 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
12411 }
12412 else
12413 {
12414 pPrefNetworkFoundInd->frameLength = 0;
12415 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012416 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070012417 /* VOS message wrapper */
12418 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
12419 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
12420 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012421 /* Send message to SME */
12422 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12423 {
12424 /* free the mem and return */
12425 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
12426 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012427 break;
12428 }
12429#endif // FEATURE_WLAN_SCAN_PNO
12430
12431#ifdef WLAN_WAKEUP_EVENTS
12432 case WDI_WAKE_REASON_IND:
12433 {
12434 vos_msg_t vosMsg;
12435 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
12436 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
12437 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
12438
12439 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12440 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
12441 wdiLowLevelInd->wdiIndicationType,
12442 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
12443 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
12444 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12445
12446 if (NULL == pWakeReasonInd)
12447 {
12448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12449 "Memory allocation failure, "
12450 "WDI_WAKE_REASON_IND not forwarded");
12451 break;
12452 }
12453
12454 vos_mem_zero(pWakeReasonInd, allocSize);
12455
12456 /* Message Header */
12457 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
12458 pWakeReasonInd->mesgLen = allocSize;
12459
12460 /* Info from WDI Indication */
12461 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
12462 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
12463 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
12464 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
12465 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
12466 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
12467 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
12468 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
12469
12470 /* VOS message wrapper */
12471 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
12472 vosMsg.bodyptr = (void *) pWakeReasonInd;
12473 vosMsg.bodyval = 0;
12474
12475 /* Send message to SME */
12476 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12477 {
12478 /* free the mem and return */
12479 vos_mem_free((v_VOID_t *) pWakeReasonInd);
12480 }
12481
12482 break;
12483 }
12484#endif // WLAN_WAKEUP_EVENTS
12485
12486 case WDI_TX_PER_HIT_IND:
12487 {
12488 vos_msg_t vosMsg;
12489 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
12490 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
12491 /* VOS message wrapper */
12492 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
12493 vosMsg.bodyptr = NULL;
12494 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070012495 /* Send message to SME */
12496 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12497 {
12498 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
12499 }
12500 break;
12501 }
12502
Leo Chang9056f462013-08-01 19:21:11 -070012503#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070012504 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070012505 {
Leo Changd9df8aa2013-09-26 13:32:26 -070012506 vos_msg_t vosMsg;
12507 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012508
Leo Changd9df8aa2013-09-26 13:32:26 -070012509 lphbInd =
12510 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
12511 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070012512 {
12513 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12514 "%s: LPHB IND buffer alloc Fail", __func__);
12515 return ;
12516 }
12517
Leo Changd9df8aa2013-09-26 13:32:26 -070012518 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070012519 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070012520 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070012521 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070012522 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070012523 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
12524
12525 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070012526 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070012527 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
12528
Leo Changd9df8aa2013-09-26 13:32:26 -070012529 vosMsg.type = eWNI_SME_LPHB_IND;
12530 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070012531 vosMsg.bodyval = 0;
12532 /* Send message to SME */
12533 if (VOS_STATUS_SUCCESS !=
12534 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
12535 {
12536 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12537 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070012538 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070012539 }
12540 break;
12541 }
12542#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070012543 case WDI_PERIODIC_TX_PTRN_FW_IND:
12544 {
12545 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12546 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
12547 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
12548 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
12549 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
12550 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
12551 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
12552
12553 break;
12554 }
Leo Chang9056f462013-08-01 19:21:11 -070012555
Ravi Joshid2ca7c42013-07-23 08:37:49 -070012556 case WDI_IBSS_PEER_INACTIVITY_IND:
12557 {
12558 tSirIbssPeerInactivityInd *pIbssInd =
12559 (tSirIbssPeerInactivityInd *)
12560 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
12561
12562 if (NULL == pIbssInd)
12563 {
12564 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12565 "Memory allocation failure, "
12566 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
12567 break;
12568 }
12569
12570 pIbssInd->bssIdx =
12571 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
12572 pIbssInd->staIdx =
12573 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
12574 vos_mem_copy(pIbssInd->peerAddr,
12575 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
12576 sizeof(tSirMacAddr));
12577 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
12578 break;
12579 }
12580
Rajeev79dbe4c2013-10-05 11:03:42 +053012581#ifdef FEATURE_WLAN_BATCH_SCAN
12582 case WDI_BATCH_SCAN_RESULT_IND:
12583 {
12584 void *pBatchScanResult;
12585 void *pCallbackContext;
12586 tpAniSirGlobal pMac;
12587
12588 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12589 "Received WDI_BATCHSCAN_RESULT_IND from FW");
12590
12591 /*sanity check*/
12592 if(NULL == pWDA)
12593 {
12594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12595 "%s:pWDA is NULL", __func__);
12596 VOS_ASSERT(0);
12597 return;
12598 }
12599
12600 pBatchScanResult =
12601 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
12602 if (NULL == pBatchScanResult)
12603 {
12604 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12605 "%s:Batch scan result from FW is null can't invoke HDD callback",
12606 __func__);
12607 VOS_ASSERT(0);
12608 return;
12609 }
12610
12611 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12612 if (NULL == pMac)
12613 {
12614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12615 "%s:pMac is NULL", __func__);
12616 VOS_ASSERT(0);
12617 return;
12618 }
12619
12620 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
12621 /*call hdd callback with set batch scan response data*/
12622 if(pMac->pmc.batchScanResultCallback)
12623 {
12624 pMac->pmc.batchScanResultCallback(pCallbackContext,
12625 pBatchScanResult);
12626 }
12627 else
12628 {
12629 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12630 "%s:HDD callback is null", __func__);
12631 VOS_ASSERT(0);
12632 }
12633 break;
12634 }
12635#endif
12636
Jeff Johnson295189b2012-06-20 16:38:30 -070012637 default:
12638 {
12639 /* TODO error */
12640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12641 "Received UNKNOWN Indication from WDI ");
12642 }
12643 }
12644 return ;
12645}
12646
Jeff Johnson295189b2012-06-20 16:38:30 -070012647/*
12648 * BA related processing in WDA.
12649 */
Jeff Johnson295189b2012-06-20 16:38:30 -070012650void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
12651 void* pUserData)
12652{
12653 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
12654 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070012655 if(NULL == pWdaParams)
12656 {
12657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012659 VOS_ASSERT(0) ;
12660 return ;
12661 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012662 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070012663 vos_mem_free(pWdaParams->wdaMsgParam) ;
12664 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12665 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012666 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012667 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012668 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
12669 {
12670 tANI_U8 i = 0 ;
12671 tBaActivityInd *baActivityInd = NULL ;
12672 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
12673 tANI_U8 allocSize = sizeof(tBaActivityInd)
12674 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
12675 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
12676 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012677 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012678 if(NULL == baActivityInd)
12679 {
12680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012682 VOS_ASSERT(0) ;
12683 return;
12684 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012685 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
12686 sizeof(tSirMacAddr)) ;
12687 baActivityInd->baCandidateCnt = baCandidateCount ;
12688
12689 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
12690 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
12691
12692 for(i = 0 ; i < baCandidateCount ; i++)
12693 {
12694 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012695 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
12696 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012697 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
12698 {
12699 baCandidate->baInfo[tid].fBaEnable =
12700 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
12701 baCandidate->baInfo[tid].startingSeqNum =
12702 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
12703 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070012704 wdiBaCandidate++ ;
12705 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012706 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012707 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
12708 }
12709 else
12710 {
12711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12712 "BA Trigger RSP with Failure received ");
12713 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012714 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012715}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012716
12717
12718/*
12719 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
12720 * during MCC
12721 */
12722void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
12723{
12724 wpt_uint32 enabled;
12725 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
12726 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
12727 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
12728
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012729 if (NULL == pMac )
12730 {
12731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12732 "%s: Invoked with invalid MAC context ", __func__ );
12733 VOS_ASSERT(0);
12734 return;
12735 }
12736
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012737 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12738 != eSIR_SUCCESS)
12739 {
12740 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12741 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12742 return;
12743 }
12744
12745 if(!enabled)
12746 {
12747 return;
12748 }
12749
12750 if(NULL == pWDA)
12751 {
12752 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12753 "%s:WDA context is NULL", __func__);
12754 VOS_ASSERT(0);
12755 return;
12756 }
12757
12758 if(activate)
12759 {
12760 if( VOS_STATUS_SUCCESS !=
12761 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12762 {
12763 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12764 "Traffic Stats Timer Start Failed ");
12765 return;
12766 }
12767 WDI_DS_ActivateTrafficStats();
12768 }
12769 else
12770 {
12771 WDI_DS_DeactivateTrafficStats();
12772 WDI_DS_ClearTrafficStats();
12773
12774 if( VOS_STATUS_SUCCESS !=
12775 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12776 {
12777 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12778 "Traffic Stats Timer Stop Failed ");
12779 return;
12780 }
12781 }
12782}
12783
12784/*
12785 * Traffic Stats Timer handler
12786 */
12787void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
12788{
12789 WDI_Status wdiStatus;
12790 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
12791 WDI_TrafficStatsIndType trafficStatsIndParams;
12792 wpt_uint32 length, enabled;
12793 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
12794
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053012795 if (NULL == pMac )
12796 {
12797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12798 "%s: Invoked with invalid MAC context ", __func__ );
12799 VOS_ASSERT(0);
12800 return;
12801 }
12802
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012803 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
12804 != eSIR_SUCCESS)
12805 {
12806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12807 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
12808 return;
12809 }
12810
12811 if(!enabled)
12812 {
12813 WDI_DS_DeactivateTrafficStats();
12814 return;
12815 }
12816
12817 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
12818
12819 if(pWdiTrafficStats != NULL)
12820 {
12821 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
12822 trafficStatsIndParams.length = length;
12823 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080012824 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012825 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
12826 trafficStatsIndParams.pUserData = pWDA;
12827
12828 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
12829
12830 if(WDI_STATUS_PENDING == wdiStatus)
12831 {
12832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12833 "Pending received for %s:%d ",__func__,__LINE__ );
12834 }
12835 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
12836 {
12837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12838 "Failure in %s:%d ",__func__,__LINE__ );
12839 }
12840
12841 WDI_DS_ClearTrafficStats();
12842 }
12843 else
12844 {
12845 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12846 "pWdiTrafficStats is Null");
12847 }
12848
12849 if( VOS_STATUS_SUCCESS !=
12850 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
12851 {
12852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
12853 "Traffic Stats Timer Start Failed ");
12854 return;
12855 }
12856}
12857
Jeff Johnson295189b2012-06-20 16:38:30 -070012858/*
12859 * BA Activity check timer handler
12860 */
12861void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
12862{
12863 tANI_U8 curSta = 0 ;
12864 tANI_U8 tid = 0 ;
12865 tANI_U8 size = 0 ;
12866 tANI_U8 baCandidateCount = 0 ;
12867 tANI_U8 newBaCandidate = 0 ;
12868 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
12869
12870 if(NULL == pWDA)
12871 {
12872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012873 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012874 VOS_ASSERT(0);
12875 return ;
12876 }
12877 if(WDA_MAX_STA < pWDA->wdaMaxSta)
12878 {
12879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12880 "Inconsistent STA entries in WDA");
12881 VOS_ASSERT(0) ;
12882 }
12883 /* walk through all STA entries and find out TX packet count */
12884 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
12885 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080012886#ifdef WLAN_SOFTAP_VSTA_FEATURE
12887 // We can only do BA on "hard" STAs.
12888 if (!(IS_HWSTA_IDX(curSta)))
12889 {
12890 continue;
12891 }
12892#endif //WLAN_SOFTAP_VSTA_FEATURE
12893 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
12894 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012895 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 tANI_U32 txPktCount = 0 ;
12897 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012898 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012899 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
12900 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070012901 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
12902 curSta, tid, &txPktCount)))
12903 {
12904#if 0
12905 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12906 "************* %d:%d, %d ",curSta, txPktCount,
12907 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
12908#endif
12909 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070012910 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070012911 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
12912 curSta, tid)))
12913 {
12914 /* get prepare for sending message to HAL */
12915 //baCandidate[baCandidateCount].staIdx = curSta ;
12916 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
12917 newBaCandidate = WDA_ENABLE_BA ;
12918 }
12919 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
12920 }
12921 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012922 /* fill the entry for all the sta with given TID's */
12923 if(WDA_ENABLE_BA == newBaCandidate)
12924 {
12925 /* move to next BA candidate */
12926 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
12927 size += sizeof(WDI_TriggerBAReqCandidateType) ;
12928 baCandidateCount++ ;
12929 newBaCandidate = WDA_DISABLE_BA ;
12930 }
12931 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012932 /* prepare and send message to hal */
12933 if( 0 < baCandidateCount)
12934 {
12935 WDI_Status status = WDI_STATUS_SUCCESS ;
12936 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
12937 tWDA_ReqParams *pWdaParams =
12938 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012939 if(NULL == pWdaParams)
12940 {
12941 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012942 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012943 VOS_ASSERT(0) ;
12944 return;
12945 }
12946 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
12947 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
12948 if(NULL == wdiTriggerBaReq)
12949 {
12950 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012951 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012952 VOS_ASSERT(0) ;
12953 vos_mem_free(pWdaParams);
12954 return;
12955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 do
12957 {
12958 WDI_TriggerBAReqinfoType *triggerBaInfo =
12959 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
12960 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
12961 /* TEMP_FIX: Need to see if WDI need check for assoc session for
12962 * for each request */
12963 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
12964 triggerBaInfo->ucBASessionID = 0;
12965 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
12966 } while(0) ;
12967 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
12968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012969 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012970 pWdaParams->pWdaContext = pWDA;
12971 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
12972 pWdaParams->wdaMsgParam = NULL;
12973 status = WDI_TriggerBAReq(wdiTriggerBaReq,
12974 WDA_TriggerBaReqCallback, pWdaParams) ;
12975 if(IS_WDI_STATUS_FAILURE(status))
12976 {
12977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12978 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
12979 vos_mem_free(pWdaParams->wdaMsgParam) ;
12980 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
12981 vos_mem_free(pWdaParams) ;
12982 }
12983 }
12984 else
12985 {
12986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
12987 "There is no TID for initiating BA");
12988 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012989 if( VOS_STATUS_SUCCESS !=
12990 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12991 {
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12993 "BA Activity Timer Stop Failed ");
12994 return ;
12995 }
12996 if( VOS_STATUS_SUCCESS !=
12997 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
12998 {
12999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13000 "BA Activity Timer Start Failed ");
13001 return;
13002 }
13003 return ;
13004}
Jeff Johnson295189b2012-06-20 16:38:30 -070013005/*
13006 * WDA common routine to create timer used by WDA.
13007 */
13008static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13009{
Jeff Johnson295189b2012-06-20 16:38:30 -070013010 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13011 tANI_U32 val = 0 ;
13012 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13013
13014 if(NULL == pMac)
13015 {
13016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013017 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013018 VOS_ASSERT(0);
13019 return VOS_STATUS_E_FAILURE;
13020 }
13021 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13022 != eSIR_SUCCESS)
13023 {
13024 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13025 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13026 return VOS_STATUS_E_FAILURE;
13027 }
13028 val = SYS_MS_TO_TICKS(val) ;
13029
13030 /* BA activity check timer */
13031 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13032 "BA Activity Check timer", WDA_TimerHandler,
13033 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13034 if(status != TX_SUCCESS)
13035 {
13036 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13037 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013038 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013040 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013041 /* Tx Complete Timeout timer */
13042 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13043 "Tx Complete Check timer", WDA_TimerHandler,
13044 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013045 if(status != TX_SUCCESS)
13046 {
13047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13048 "Unable to create Tx Complete Timeout timer");
13049 /* Destroy timer of BA activity check timer */
13050 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13051 if(status != TX_SUCCESS)
13052 {
13053 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13054 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013055 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013056 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013057 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013058 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013059
13060 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13061
13062 /* Traffic Stats timer */
13063 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13064 "Traffic Stats timer", WDA_TimerHandler,
13065 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13066 if(status != TX_SUCCESS)
13067 {
13068 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13069 "Unable to create traffic stats timer");
13070 /* Destroy timer of BA activity check timer */
13071 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13072 if(status != TX_SUCCESS)
13073 {
13074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13075 "Unable to Destroy BA activity timer");
13076 }
13077 /* Destroy timer of tx complete timer */
13078 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13079 if(status != TX_SUCCESS)
13080 {
13081 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13082 "Unable to Tx complete timer");
13083 }
13084 return VOS_STATUS_E_FAILURE ;
13085 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013086 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013087}
Jeff Johnson295189b2012-06-20 16:38:30 -070013088/*
13089 * WDA common routine to destroy timer used by WDA.
13090 */
13091static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13092{
13093 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013094 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13095 if(status != TX_SUCCESS)
13096 {
13097 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13098 "Unable to Destroy Tx Complete Timeout timer");
13099 return eSIR_FAILURE ;
13100 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13102 if(status != TX_SUCCESS)
13103 {
13104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13105 "Unable to Destroy BA activity timer");
13106 return eSIR_FAILURE ;
13107 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013108 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13109 if(status != TX_SUCCESS)
13110 {
13111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13112 "Unable to Destroy traffic stats timer");
13113 return eSIR_FAILURE ;
13114 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013115 return eSIR_SUCCESS ;
13116}
Jeff Johnson295189b2012-06-20 16:38:30 -070013117/*
13118 * WDA timer handler.
13119 */
13120void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13121{
13122 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13123 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013124 /*
13125 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13126 */
13127 wdaMsg.type = timerInfo ;
13128 wdaMsg.bodyptr = NULL;
13129 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013130 /* post the message.. */
13131 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13132 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13133 {
13134 vosStatus = VOS_STATUS_E_BADMSG;
13135 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013136}
Jeff Johnson295189b2012-06-20 16:38:30 -070013137/*
13138 * WDA Tx Complete timeout Indication.
13139 */
13140void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13141{
13142 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013143 if( pWDA->pAckTxCbFunc )
13144 {
13145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013146 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013147 pWDA->pAckTxCbFunc( pMac, 0);
13148 pWDA->pAckTxCbFunc = NULL;
13149 }
13150 else
13151 {
13152 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013153 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013154 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013155}
Jeff Johnson295189b2012-06-20 16:38:30 -070013156/*
13157 * WDA Set REG Domain to VOS NV
13158 */
13159eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId)
13160{
13161 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId))
13162 {
13163 return eHAL_STATUS_INVALID_PARAMETER;
13164 }
13165 return eHAL_STATUS_SUCCESS;
13166}
Jeff Johnson295189b2012-06-20 16:38:30 -070013167
Jeff Johnson295189b2012-06-20 16:38:30 -070013168#ifdef FEATURE_WLAN_SCAN_PNO
13169/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013170 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013171 *
13172 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013173void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013174{
13175 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013176 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013177 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013178 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013179 {
13180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013181 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013182 VOS_ASSERT(0) ;
13183 return ;
13184 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013185
Yue Ma7f44bbe2013-04-12 11:47:39 -070013186 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13187 vos_mem_free(pWdaParams->wdaMsgParam);
13188 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013189
13190 return ;
13191}
Jeff Johnson295189b2012-06-20 16:38:30 -070013192/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013193 * FUNCTION: WDA_PNOScanReqCallback
13194 * Free memory.
13195 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
13196 */
13197void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013198{
Yue Ma7f44bbe2013-04-12 11:47:39 -070013199 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13200
13201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13202 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13203
13204 if(NULL == pWdaParams)
13205 {
13206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13207 "%s: pWdaParams received NULL", __func__);
13208 VOS_ASSERT(0);
13209 return;
13210 }
13211
13212 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13213 {
13214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13215 vos_mem_free(pWdaParams->wdaMsgParam);
13216 vos_mem_free(pWdaParams);
13217 }
13218
13219 return;
13220}
13221/*
13222 * FUNCTION: WDA_UpdateScanParamsRespCallback
13223 *
13224 */
13225void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
13226{
13227 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013228 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013229 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013230 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013231 {
13232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013233 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013234 VOS_ASSERT(0) ;
13235 return ;
13236 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013237
13238 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13239 vos_mem_free(pWdaParams->wdaMsgParam);
13240 vos_mem_free(pWdaParams);
13241
Jeff Johnson295189b2012-06-20 16:38:30 -070013242 return ;
13243}
Jeff Johnson295189b2012-06-20 16:38:30 -070013244/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013245 * FUNCTION: WDA_UpdateScanParamsReqCallback
13246 * Free memory.
13247 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
13248 */
13249void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13250{
13251 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13252
13253 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13254 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13255
13256 if(NULL == pWdaParams)
13257 {
13258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13259 "%s: pWdaParams received NULL", __func__);
13260 VOS_ASSERT(0);
13261 return;
13262 }
13263
13264 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13265 {
13266 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13267 vos_mem_free(pWdaParams->wdaMsgParam);
13268 vos_mem_free(pWdaParams);
13269 }
13270
13271 return;
13272}
13273/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013274 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13275 * Request to WDI to set Preferred Network List.Offload
13276 */
13277VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
13278 tSirPNOScanReq *pPNOScanReqParams)
13279{
Jeff Johnson43971f52012-07-17 12:26:56 -070013280 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013281 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
13282 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
13283 tWDA_ReqParams *pWdaParams ;
13284 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013286 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013287 if(NULL == pwdiPNOScanReqInfo)
13288 {
13289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013290 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013291 VOS_ASSERT(0);
13292 return VOS_STATUS_E_NOMEM;
13293 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013294 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13295 if(NULL == pWdaParams)
13296 {
13297 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013298 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013299 VOS_ASSERT(0);
13300 vos_mem_free(pwdiPNOScanReqInfo);
13301 return VOS_STATUS_E_NOMEM;
13302 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013303 //
13304 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
13305 //
13306 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
13307 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070013308 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
13309 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
13310 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013311 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
13312 {
13313 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
13314 &pPNOScanReqParams->aNetworks[i],
13315 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
13316 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013317 /*Scan timer intervals*/
13318 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
13319 &pPNOScanReqParams->scanTimers,
13320 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070013321 /*Probe template for 2.4GHz band*/
13322 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
13323 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13324 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013325 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
13326 pPNOScanReqParams->p24GProbeTemplate,
13327 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070013328 /*Probe template for 5GHz band*/
13329 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
13330 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13331 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070013332 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
13333 pPNOScanReqParams->p5GProbeTemplate,
13334 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013335 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
13336 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013337
Jeff Johnson295189b2012-06-20 16:38:30 -070013338 /* Store Params pass it to WDI */
13339 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
13340 pWdaParams->pWdaContext = pWDA;
13341 /* Store param pointer as passed in by caller */
13342 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013343 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013344 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013345 if(IS_WDI_STATUS_FAILURE(status))
13346 {
13347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13348 "Failure in Set PNO REQ WDI API, free all the memory " );
13349 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13350 vos_mem_free(pWdaParams->wdaMsgParam);
13351 pWdaParams->wdaWdiApiMsgParam = NULL;
13352 pWdaParams->wdaMsgParam = NULL;
13353 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013354 return CONVERT_WDI2VOS_STATUS(status) ;
13355}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013356
13357#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13358
13359void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
13360{
13361 /*Convert the CSR Auth types to WDI Auth types */
13362 switch (csrAuthType)
13363 {
13364 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
13365 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13366 break;
13367#ifdef FEATURE_WLAN_CCX
13368 case eCSR_AUTH_TYPE_CCKM_WPA:
13369 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
13370 break;
13371#endif
13372 case eCSR_AUTH_TYPE_WPA:
13373 *AuthType = eWDA_AUTH_TYPE_WPA;
13374 break;
13375 case eCSR_AUTH_TYPE_WPA_PSK:
13376 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
13377 break;
13378#ifdef FEATURE_WLAN_CCX
13379 case eCSR_AUTH_TYPE_CCKM_RSN:
13380 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
13381 break;
13382#endif
13383 case eCSR_AUTH_TYPE_RSN:
13384 *AuthType = eWDA_AUTH_TYPE_RSN;
13385 break;
13386 case eCSR_AUTH_TYPE_RSN_PSK:
13387 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
13388 break;
13389#if defined WLAN_FEATURE_VOWIFI_11R
13390 case eCSR_AUTH_TYPE_FT_RSN:
13391 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
13392 break;
13393 case eCSR_AUTH_TYPE_FT_RSN_PSK:
13394 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
13395 break;
13396#endif
13397#ifdef FEATURE_WLAN_WAPI
13398 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
13399 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
13400 break;
13401 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
13402 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
13403 break;
13404#endif /* FEATURE_WLAN_WAPI */
13405 case eCSR_AUTH_TYPE_SHARED_KEY:
13406 case eCSR_AUTH_TYPE_AUTOSWITCH:
13407 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
13408 break;
13409#if 0
13410 case eCSR_AUTH_TYPE_SHARED_KEY:
13411 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
13412 break;
13413 case eCSR_AUTH_TYPE_AUTOSWITCH:
13414 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
13415#endif
13416 default:
13417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13418 "%s: Unknown Auth Type", __func__);
13419 break;
13420 }
13421}
13422void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
13423{
13424 switch (csrEncrType)
13425 {
13426 case eCSR_ENCRYPT_TYPE_NONE:
13427 *EncrType = WDI_ED_NONE;
13428 break;
13429 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
13430 case eCSR_ENCRYPT_TYPE_WEP40:
13431 *EncrType = WDI_ED_WEP40;
13432 break;
13433 case eCSR_ENCRYPT_TYPE_WEP104:
13434 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
13435 *EncrType = WDI_ED_WEP104;
13436 break;
13437 case eCSR_ENCRYPT_TYPE_TKIP:
13438 *EncrType = WDI_ED_TKIP;
13439 break;
13440 case eCSR_ENCRYPT_TYPE_AES:
13441 *EncrType = WDI_ED_CCMP;
13442 break;
13443#ifdef WLAN_FEATURE_11W
13444 case eCSR_ENCRYPT_TYPE_AES_CMAC:
13445 *EncrType = WDI_ED_AES_128_CMAC;
13446 break;
13447#endif
13448#ifdef FEATURE_WLAN_WAPI
13449 case eCSR_ENCRYPT_TYPE_WPI:
13450 *EncrType = WDI_ED_WPI;
13451 break;
13452#endif
13453 case eCSR_ENCRYPT_TYPE_ANY:
13454 *EncrType = WDI_ED_ANY;
13455 break;
13456
13457 default:
13458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13459 "%s: Unknown Encryption Type", __func__);
13460 break;
13461 }
13462}
13463
13464/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013465 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013466 * Request to WDI to set Roam Offload Scan
13467 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013468VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013469 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
13470{
13471 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013472 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
13473 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013474 tWDA_ReqParams *pWdaParams ;
13475 v_U8_t csrAuthType;
13476 WDI_RoamNetworkType *pwdiRoamNetworkType;
13477 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
13478 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13479 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013480 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013481 {
13482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13483 "%s: VOS MEM Alloc Failure", __func__);
13484 VOS_ASSERT(0);
13485 return VOS_STATUS_E_NOMEM;
13486 }
13487 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13488 if (NULL == pWdaParams)
13489 {
13490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13491 "%s: VOS MEM Alloc Failure", __func__);
13492 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013493 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013494 return VOS_STATUS_E_NOMEM;
13495 }
13496
13497 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013498 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013499 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013500 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
13501 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013502 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
13503 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
13504 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
13505 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
13506 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
13507 sizeof(pwdiRoamNetworkType->currAPbssid));
13508 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
13509 csrAuthType);
13510 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
13511 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
13512 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
13513 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
13514 pwdiRoamOffloadScanInfo->LookupThreshold =
13515 pRoamOffloadScanReqParams->LookupThreshold ;
13516 pwdiRoamOffloadScanInfo->RoamRssiDiff =
13517 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080013518 pwdiRoamOffloadScanInfo->MAWCEnabled =
13519 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013520 pwdiRoamOffloadScanInfo->Command =
13521 pRoamOffloadScanReqParams->Command ;
13522 pwdiRoamOffloadScanInfo->StartScanReason =
13523 pRoamOffloadScanReqParams->StartScanReason ;
13524 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
13525 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
13526 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
13527 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
13528 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
13529 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
13530 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
13531 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
13532 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
13533 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
13534 pwdiRoamOffloadScanInfo->IsCCXEnabled =
13535 pRoamOffloadScanReqParams->IsCCXEnabled ;
13536 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
13537 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
13538 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
13539 pwdiRoamNetworkType->ssId.ucLength =
13540 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
13541 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
13542 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
13543 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
13544 pwdiRoamNetworkType->ChannelCount =
13545 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
13546 pwdiRoamOffloadScanInfo->ChannelCacheType =
13547 pRoamOffloadScanReqParams->ChannelCacheType;
13548 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
13549 pRoamOffloadScanReqParams->ValidChannelList,
13550 pRoamOffloadScanReqParams->ValidChannelCount);
13551 pwdiRoamOffloadScanInfo->ValidChannelCount =
13552 pRoamOffloadScanReqParams->ValidChannelCount;
13553 pwdiRoamOffloadScanInfo->us24GProbeSize =
13554 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13555 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13556 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
13557 pRoamOffloadScanReqParams->p24GProbeTemplate,
13558 pwdiRoamOffloadScanInfo->us24GProbeSize);
13559 pwdiRoamOffloadScanInfo->us5GProbeSize =
13560 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
13561 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
13562 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
13563 pRoamOffloadScanReqParams->p5GProbeTemplate,
13564 pwdiRoamOffloadScanInfo->us5GProbeSize);
13565 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
13566 pRoamOffloadScanReqParams->MDID.mdiePresent;
13567 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
13568 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013569 pwdiRoamOffloadScanInfo->nProbes =
13570 pRoamOffloadScanReqParams->nProbes;
13571 pwdiRoamOffloadScanInfo->HomeAwayTime =
13572 pRoamOffloadScanReqParams->HomeAwayTime;
13573 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013574 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013575 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013576 pWdaParams->pWdaContext = pWDA;
13577 /* Store param pointer as passed in by caller */
13578 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070013579 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013580 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
13581 if(IS_WDI_STATUS_FAILURE(status))
13582 {
13583 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13584 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
13585 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13586 vos_mem_free(pWdaParams->wdaMsgParam);
13587 pWdaParams->wdaWdiApiMsgParam = NULL;
13588 pWdaParams->wdaMsgParam = NULL;
13589 }
13590 return CONVERT_WDI2VOS_STATUS(status) ;
13591}
13592#endif
13593
Jeff Johnson295189b2012-06-20 16:38:30 -070013594/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013595 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013596 *
13597 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013598void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013599{
13600 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13601
13602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013603 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013604
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013605 if(NULL == pWdaParams)
13606 {
13607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013608 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013609 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013610 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013611 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013612
Jeff Johnson295189b2012-06-20 16:38:30 -070013613 vos_mem_free(pWdaParams->wdaMsgParam) ;
13614 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13615 vos_mem_free(pWdaParams) ;
13616
13617 return ;
13618}
13619/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013620 * FUNCTION: WDA_RssiFilterReqCallback
13621 * Free memory.
13622 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
13623 */
13624void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
13625{
13626 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13627
13628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13629 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13630
13631 if(NULL == pWdaParams)
13632 {
13633 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13634 "%s: pWdaParams received NULL", __func__);
13635 VOS_ASSERT(0);
13636 return;
13637 }
13638
13639 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13640 {
13641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13642 vos_mem_free(pWdaParams->wdaMsgParam);
13643 vos_mem_free(pWdaParams);
13644 }
13645
13646 return;
13647}
13648/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013649 * FUNCTION: WDA_ProcessSetPreferredNetworkList
13650 * Request to WDI to set Preferred Network List.Offload
13651 */
13652VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
13653 tSirSetRSSIFilterReq* pRssiFilterParams)
13654{
Jeff Johnson43971f52012-07-17 12:26:56 -070013655 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013656 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
13657 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
13658 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013659 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013660 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013661 if(NULL == pwdiSetRssiFilterReqInfo)
13662 {
13663 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013664 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013665 VOS_ASSERT(0);
13666 return VOS_STATUS_E_NOMEM;
13667 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013668 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13669 if(NULL == pWdaParams)
13670 {
13671 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013672 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013673 VOS_ASSERT(0);
13674 vos_mem_free(pwdiSetRssiFilterReqInfo);
13675 return VOS_STATUS_E_NOMEM;
13676 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013677 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070013678 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
13679 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013680
Jeff Johnson295189b2012-06-20 16:38:30 -070013681 /* Store Params pass it to WDI */
13682 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
13683 pWdaParams->pWdaContext = pWDA;
13684 /* Store param pointer as passed in by caller */
13685 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070013686 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013687 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013688 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013689 if(IS_WDI_STATUS_FAILURE(status))
13690 {
13691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13692 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
13693 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13694 vos_mem_free(pWdaParams->wdaMsgParam);
13695 pWdaParams->wdaWdiApiMsgParam = NULL;
13696 pWdaParams->wdaMsgParam = NULL;
13697 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013698 return CONVERT_WDI2VOS_STATUS(status) ;
13699}
13700
Jeff Johnson295189b2012-06-20 16:38:30 -070013701/*
13702 * FUNCTION: WDA_ProcessUpdateScanParams
13703 * Request to WDI to update Scan Parameters
13704 */
13705VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
13706 tSirUpdateScanParams *pUpdateScanParams)
13707{
Jeff Johnson43971f52012-07-17 12:26:56 -070013708 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013709 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
13710 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
13711 sizeof(WDI_UpdateScanParamsInfoType)) ;
13712 tWDA_ReqParams *pWdaParams ;
13713 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013715 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013716 if(NULL == wdiUpdateScanParamsInfoType)
13717 {
13718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013719 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013720 VOS_ASSERT(0);
13721 return VOS_STATUS_E_NOMEM;
13722 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013723 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13724 if ( NULL == pWdaParams )
13725 {
13726 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013727 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013728 VOS_ASSERT(0);
13729 vos_mem_free(wdiUpdateScanParamsInfoType);
13730 return VOS_STATUS_E_NOMEM;
13731 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013732 //
13733 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
13734 //
Jeff Johnson295189b2012-06-20 16:38:30 -070013735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13736 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
13737 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
13738 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
13739 "sir struct %d wdi struct %d",
13740 pUpdateScanParams->b11dEnabled,
13741 pUpdateScanParams->b11dResolved,
13742 pUpdateScanParams->ucChannelCount,
13743 pUpdateScanParams->usPassiveMinChTime,
13744 pUpdateScanParams->usPassiveMaxChTime,
13745 pUpdateScanParams->usActiveMinChTime,
13746 pUpdateScanParams->usActiveMaxChTime,
13747 sizeof(tSirUpdateScanParams),
13748 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
13749
Jeff Johnson295189b2012-06-20 16:38:30 -070013750 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
13751 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070013752 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
13753 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070013754 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
13755 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070013756 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
13757 pUpdateScanParams->usActiveMaxChTime;
13758 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
13759 pUpdateScanParams->usActiveMinChTime;
13760 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
13761 pUpdateScanParams->usPassiveMaxChTime;
13762 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
13763 pUpdateScanParams->usPassiveMinChTime;
13764
Jeff Johnson295189b2012-06-20 16:38:30 -070013765 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053013766 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
13767 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070013768
Jeff Johnson295189b2012-06-20 16:38:30 -070013769 for ( i = 0; i <
13770 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
13771 i++)
13772 {
13773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13774 "Update Scan Parameters channel: %d",
13775 pUpdateScanParams->aChannels[i]);
13776
13777 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
13778 pUpdateScanParams->aChannels[i];
13779 }
13780
Yue Ma7f44bbe2013-04-12 11:47:39 -070013781 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
13782 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070013783
Jeff Johnson295189b2012-06-20 16:38:30 -070013784 /* Store Params pass it to WDI */
13785 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
13786 pWdaParams->pWdaContext = pWDA;
13787 /* Store param pointer as passed in by caller */
13788 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070013789
Jeff Johnson295189b2012-06-20 16:38:30 -070013790
13791
13792 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013793 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070013794 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070013795 if(IS_WDI_STATUS_FAILURE(status))
13796 {
13797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13798 "Failure in Update Scan Params EQ WDI API, free all the memory " );
13799 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
13800 vos_mem_free(pWdaParams->wdaMsgParam);
13801 vos_mem_free(pWdaParams);
13802 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013803 return CONVERT_WDI2VOS_STATUS(status) ;
13804}
13805#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013806
13807#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
13808/*
13809 * FUNCTION: WDA_RoamOffloadScanReqCallback
13810 *
13811 */
13812void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
13813{
13814 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013815 vos_msg_t vosMsg;
13816 wpt_uint8 reason = 0;
13817
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070013818 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013819 "<------ %s " ,__func__);
13820 if (NULL == pWdaParams)
13821 {
13822 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13823 "%s: pWdaParams received NULL", __func__);
13824 VOS_ASSERT(0) ;
13825 return ;
13826 }
13827 if ( pWdaParams != NULL )
13828 {
13829 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
13830 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013831 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013832 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13833 }
13834 if ( pWdaParams->wdaMsgParam != NULL)
13835 {
13836 vos_mem_free(pWdaParams->wdaMsgParam);
13837 }
13838
13839 vos_mem_free(pWdaParams) ;
13840 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013841 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
13842 vosMsg.bodyptr = NULL;
13843 if (WDI_STATUS_SUCCESS != status)
13844 {
13845 reason = 0;
13846 }
13847 vosMsg.bodyval = reason;
13848 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13849 {
13850 /* free the mem and return */
13851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070013852 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070013853 }
13854
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070013855 return ;
13856}
13857#endif
13858
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013859/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013860 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013861 *
13862 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013863void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013864{
13865 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13866
13867 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13868 "<------ %s " ,__func__);
13869
13870 if(NULL == pWdaParams)
13871 {
13872 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13873 "%s: pWdaParams received NULL", __func__);
13874 VOS_ASSERT(0);
13875 return;
13876 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013877
13878 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13879 vos_mem_free(pWdaParams->wdaMsgParam);
13880 vos_mem_free(pWdaParams);
13881
13882 return;
13883}
13884/*
13885 * FUNCTION: WDA_SetPowerParamsReqCallback
13886 * Free memory.
13887 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
13888 */
13889void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
13890{
13891 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13892
13893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13894 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13895
13896 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013897 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070013898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13899 "%s: pWdaParams received NULL", __func__);
13900 VOS_ASSERT(0);
13901 return;
13902 }
13903
13904 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13905 {
13906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13907 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013908 vos_mem_free(pWdaParams);
13909 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070013910
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080013911 return;
13912}
13913
Jeff Johnson295189b2012-06-20 16:38:30 -070013914#ifdef WLAN_FEATURE_PACKET_FILTERING
13915/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013916 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 *
13918 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013919void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070013920 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
13921 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013922{
13923 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070013924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013925 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013926 if(NULL == pWdaParams)
13927 {
13928 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013929 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013930 VOS_ASSERT(0) ;
13931 return ;
13932 }
13933
13934 vos_mem_free(pWdaParams->wdaMsgParam) ;
13935 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13936 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013937 //print a msg, nothing else to do
13938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070013939 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070013940 return ;
13941}
Jeff Johnson295189b2012-06-20 16:38:30 -070013942/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013943 * FUNCTION: WDA_8023MulticastListReqCallback
13944 * Free memory.
13945 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
13946 */
13947void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
13948{
13949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13950
13951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13952 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
13953
13954 if(NULL == pWdaParams)
13955 {
13956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13957 "%s: pWdaParams received NULL", __func__);
13958 VOS_ASSERT(0);
13959 return;
13960 }
13961
13962 if(IS_WDI_STATUS_FAILURE(wdiStatus))
13963 {
13964 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13965 vos_mem_free(pWdaParams->wdaMsgParam);
13966 vos_mem_free(pWdaParams);
13967 }
13968
13969 return;
13970}
13971/*
Jeff Johnson295189b2012-06-20 16:38:30 -070013972 * FUNCTION: WDA_Process8023MulticastListReq
13973 * Request to WDI to add 8023 Multicast List
13974 */
13975VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
13976 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
13977{
Jeff Johnson43971f52012-07-17 12:26:56 -070013978 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
13980 tWDA_ReqParams *pWdaParams ;
13981 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070013982 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013983 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013984 pwdiFltPktSetMcListReqParamsType =
13985 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
13986 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
13987 ) ;
13988 if(NULL == pwdiFltPktSetMcListReqParamsType)
13989 {
13990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013991 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013992 return VOS_STATUS_E_NOMEM;
13993 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013994 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
13995 if(NULL == pWdaParams)
13996 {
13997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013998 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013999 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14000 return VOS_STATUS_E_NOMEM;
14001 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014002
Jeff Johnson295189b2012-06-20 16:38:30 -070014003 //
14004 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14005 //
14006 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014007 pRcvFltMcAddrList->ulMulticastAddrCnt;
14008
14009 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14010 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14011 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14012 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14013
Jeff Johnson295189b2012-06-20 16:38:30 -070014014 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14015 {
14016 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14017 &(pRcvFltMcAddrList->multicastAddr[i]),
14018 sizeof(tSirMacAddr));
14019 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014020 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14021 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014022
Jeff Johnson295189b2012-06-20 16:38:30 -070014023 /* Store Params pass it to WDI */
14024 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14025 pWdaParams->pWdaContext = pWDA;
14026 /* Store param pointer as passed in by caller */
14027 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014028 status = WDI_8023MulticastListReq(
14029 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014030 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014031 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014032 if(IS_WDI_STATUS_FAILURE(status))
14033 {
14034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14035 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14036 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14037 vos_mem_free(pWdaParams->wdaMsgParam);
14038 vos_mem_free(pWdaParams);
14039 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014040 return CONVERT_WDI2VOS_STATUS(status) ;
14041}
Jeff Johnson295189b2012-06-20 16:38:30 -070014042/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014043 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014044 *
14045 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014046void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014047 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14048 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014049{
14050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014052 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014053 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014054 if(NULL == pWdaParams)
14055 {
14056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014057 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014058 VOS_ASSERT(0) ;
14059 return ;
14060 }
14061
14062 vos_mem_free(pWdaParams->wdaMsgParam) ;
14063 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14064 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014065 //print a msg, nothing else to do
14066 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014067 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014068 return ;
14069}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014070
14071/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014072 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14073 * Free memory.
14074 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014075 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014076void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014077 void* pUserData)
14078{
14079 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14080
14081 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14082 "<------ %s, wdiStatus: %d",
14083 __func__, wdiStatus);
14084
14085 if (NULL == pWdaParams)
14086 {
14087 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14088 "%s: Invalid pWdaParams pointer", __func__);
14089 VOS_ASSERT(0);
14090 return;
14091 }
14092
14093 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14094 {
14095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14096 vos_mem_free(pWdaParams->wdaMsgParam);
14097 vos_mem_free(pWdaParams);
14098 }
14099
14100 return;
14101}
14102
Jeff Johnson295189b2012-06-20 16:38:30 -070014103/*
14104 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14105 * Request to WDI to set Receive Filters
14106 */
14107VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14108 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14109{
Jeff Johnson43971f52012-07-17 12:26:56 -070014110 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014111 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14112 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14113 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14114 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14115 tWDA_ReqParams *pWdaParams ;
14116 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014117 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014118 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014119 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14120 {
14121 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014122 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014123 VOS_ASSERT(0);
14124 return VOS_STATUS_E_NOMEM;
14125 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014126 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14127 if(NULL == pWdaParams)
14128 {
14129 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014130 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014131 VOS_ASSERT(0);
14132 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14133 return VOS_STATUS_E_NOMEM;
14134 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014135 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14136 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14137 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14138 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014139 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14140 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14141
14142 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14143 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014144
14145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14146 "FID %d FT %d NParams %d CT %d",
14147 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14148 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14149 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14150 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014151 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14152 {
14153 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14154 &pRcvPktFilterCfg->paramsData[i],
14155 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014156 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014157 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014158 pwdiSetRcvPktFilterReqParamsType->
14159 wdiPktFilterCfg.paramsData[i].protocolLayer,
14160 pwdiSetRcvPktFilterReqParamsType->
14161 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070014162 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014163 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014164 pwdiSetRcvPktFilterReqParamsType->
14165 wdiPktFilterCfg.paramsData[i].dataOffset,
14166 pwdiSetRcvPktFilterReqParamsType->
14167 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070014168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014169 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014170 pwdiSetRcvPktFilterReqParamsType->
14171 wdiPktFilterCfg.paramsData[i].compareData[0],
14172 pwdiSetRcvPktFilterReqParamsType->
14173 wdiPktFilterCfg.paramsData[i].compareData[1],
14174 pwdiSetRcvPktFilterReqParamsType->
14175 wdiPktFilterCfg.paramsData[i].compareData[2],
14176 pwdiSetRcvPktFilterReqParamsType->
14177 wdiPktFilterCfg.paramsData[i].compareData[3],
14178 pwdiSetRcvPktFilterReqParamsType->
14179 wdiPktFilterCfg.paramsData[i].compareData[4],
14180 pwdiSetRcvPktFilterReqParamsType->
14181 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014183 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070014184 pwdiSetRcvPktFilterReqParamsType->
14185 wdiPktFilterCfg.paramsData[i].dataMask[0],
14186 pwdiSetRcvPktFilterReqParamsType->
14187 wdiPktFilterCfg.paramsData[i].dataMask[1],
14188 pwdiSetRcvPktFilterReqParamsType->
14189 wdiPktFilterCfg.paramsData[i].dataMask[2],
14190 pwdiSetRcvPktFilterReqParamsType->
14191 wdiPktFilterCfg.paramsData[i].dataMask[3],
14192 pwdiSetRcvPktFilterReqParamsType->
14193 wdiPktFilterCfg.paramsData[i].dataMask[4],
14194 pwdiSetRcvPktFilterReqParamsType->
14195 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070014196 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014197 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014198 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014199 /* Store Params pass it to WDI */
14200 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
14201 pWdaParams->pWdaContext = pWDA;
14202 /* Store param pointer as passed in by caller */
14203 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070014204 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014205 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014206 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014207 if(IS_WDI_STATUS_FAILURE(status))
14208 {
14209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14210 "Failure in SetFilter(),free all the memory,status %d ",status);
14211 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14212 vos_mem_free(pWdaParams->wdaMsgParam);
14213 vos_mem_free(pWdaParams);
14214 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014215 return CONVERT_WDI2VOS_STATUS(status) ;
14216}
Jeff Johnson295189b2012-06-20 16:38:30 -070014217/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014218 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014219 *
14220 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014221void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014222 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
14223 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014224{
14225 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14226 tWDA_CbContext *pWDA;
14227 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
14228 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
14229 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
14230 tANI_U8 i;
14231 vos_msg_t vosMsg;
14232
14233 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014234 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014235 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
14236
Jeff Johnsone7245742012-09-05 17:12:55 -070014237 if(NULL == pRcvFltPktMatchCntRsp)
14238 {
14239 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014240 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070014241 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014242 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070014243 return ;
14244 }
14245
Jeff Johnson295189b2012-06-20 16:38:30 -070014246 if(NULL == pWdaParams)
14247 {
14248 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014249 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014250 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014251 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070014252 return ;
14253 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014254 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
14255 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014256 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
14257 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
14258
14259 /* Message Header */
14260 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14261 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
14262
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014263 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070014264
14265 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
14266 {
14267 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
14268 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
14269 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014270 /* VOS message wrapper */
14271 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14272 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
14273 vosMsg.bodyval = 0;
14274 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14275 {
14276 /* free the mem and return */
14277 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
14278 }
14279
14280 vos_mem_free(pWdaParams->wdaMsgParam) ;
14281 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14282 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014283
14284 return;
14285}
14286/*
14287 * FUNCTION: WDA_FilterMatchCountReqCallback
14288 * Free memory and send RSP back to SME.
14289 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
14290 */
14291void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
14292{
14293 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14294 vos_msg_t vosMsg;
14295
14296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14297 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14298
14299 if(NULL == pWdaParams)
14300 {
14301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14302 "%s: pWdaParams received NULL", __func__);
14303 VOS_ASSERT(0);
14304 return;
14305 }
14306
14307 /* VOS message wrapper */
14308 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
14309 vosMsg.bodyptr = NULL;
14310 vosMsg.bodyval = 0;
14311
14312 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14313 {
14314 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14315 vos_mem_free(pWdaParams->wdaMsgParam);
14316 vos_mem_free(pWdaParams);
14317 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
14318 }
14319
14320 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070014321}
Jeff Johnson295189b2012-06-20 16:38:30 -070014322/*
14323 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
14324 * Request to WDI to get PC Filter Match Count
14325 */
14326VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
14327{
Jeff Johnson43971f52012-07-17 12:26:56 -070014328 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014329 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
14330 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
14331 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014333 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014334 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
14335 {
14336 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014337 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014338 VOS_ASSERT(0);
14339 return VOS_STATUS_E_NOMEM;
14340 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014341 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14342 if(NULL == pWdaParams)
14343 {
14344 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014345 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014346 VOS_ASSERT(0);
14347 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
14348 return VOS_STATUS_E_NOMEM;
14349 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014350
Yue Ma7f44bbe2013-04-12 11:47:39 -070014351 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
14352 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014353
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014354 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
14355 pRcvFltPktMatchRsp->bssId,
14356 sizeof(wpt_macAddr));
14357
Jeff Johnson295189b2012-06-20 16:38:30 -070014358 /* Store Params pass it to WDI */
14359 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
14360 pWdaParams->pWdaContext = pWDA;
14361 /* Store param pointer as passed in by caller */
14362 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070014363 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014364 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014365 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014366 if(IS_WDI_STATUS_FAILURE(status))
14367 {
14368 /* failure returned by WDI API */
14369 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14370 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
14371 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14372 vos_mem_free(pWdaParams) ;
14373 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
14374 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
14375 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014376 return CONVERT_WDI2VOS_STATUS(status) ;
14377}
Jeff Johnson295189b2012-06-20 16:38:30 -070014378/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014379 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014380 *
14381 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014382void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014383 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
14384 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014385{
14386 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014388 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014389/* WDA_VOS_ASSERT(NULL != pWdaParams); */
14390 if(NULL == pWdaParams)
14391 {
14392 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014393 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014394 VOS_ASSERT(0) ;
14395 return ;
14396 }
14397
14398 vos_mem_free(pWdaParams->wdaMsgParam) ;
14399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14400 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014401 //print a msg, nothing else to do
14402 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014403 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014404 return ;
14405}
Jeff Johnson295189b2012-06-20 16:38:30 -070014406/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014407 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
14408 * Free memory.
14409 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
14410 */
14411void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14412{
14413 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14414
14415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14416 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14417
14418 if(NULL == pWdaParams)
14419 {
14420 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14421 "%s: Invalid pWdaParams pointer", __func__);
14422 VOS_ASSERT(0);
14423 return;
14424 }
14425
14426 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14427 {
14428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14429 vos_mem_free(pWdaParams->wdaMsgParam);
14430 vos_mem_free(pWdaParams);
14431 }
14432
14433 return;
14434}
14435/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014436 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
14437 * Request to WDI to clear Receive Filters
14438 */
14439VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
14440 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
14441{
Jeff Johnson43971f52012-07-17 12:26:56 -070014442 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014443 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
14444 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
14445 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014446 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014447 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014448 if(NULL == pwdiRcvFltPktClearReqParamsType)
14449 {
14450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014452 VOS_ASSERT(0);
14453 return VOS_STATUS_E_NOMEM;
14454 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014455 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14456 if(NULL == pWdaParams)
14457 {
14458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014459 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014460 VOS_ASSERT(0);
14461 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
14462 return VOS_STATUS_E_NOMEM;
14463 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014464 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
14465 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070014466 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
14467 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
14468 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
14469 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014470
Yue Ma7f44bbe2013-04-12 11:47:39 -070014471 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014472 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014473 /* Store Params pass it to WDI */
14474 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
14475 pWdaParams->pWdaContext = pWDA;
14476 /* Store param pointer as passed in by caller */
14477 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070014478 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014479 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014480 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014481 if(IS_WDI_STATUS_FAILURE(status))
14482 {
14483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14484 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
14485 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080014486 vos_mem_free(pWdaParams->wdaMsgParam);
14487 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014488 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014489 return CONVERT_WDI2VOS_STATUS(status) ;
14490}
14491#endif // WLAN_FEATURE_PACKET_FILTERING
14492
Jeff Johnson295189b2012-06-20 16:38:30 -070014493/*
14494 * FUNCTION: WDA_ProcessSetPowerParamsReq
14495 * Request to WDI to set power params
14496 */
14497VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
14498 tSirSetPowerParamsReq *pPowerParams)
14499{
Jeff Johnson43971f52012-07-17 12:26:56 -070014500 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014501 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
14502 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014503 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014505 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014506 if(NULL == pwdiSetPowerParamsReqInfo)
14507 {
14508 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014509 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014510 VOS_ASSERT(0);
14511 return VOS_STATUS_E_NOMEM;
14512 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014513 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14514 if(NULL == pWdaParams)
14515 {
14516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014517 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014518 VOS_ASSERT(0);
14519 vos_mem_free(pwdiSetPowerParamsReqInfo);
14520 return VOS_STATUS_E_NOMEM;
14521 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014522
Jeff Johnson295189b2012-06-20 16:38:30 -070014523
14524 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
14525 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070014526 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
14527 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070014528 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
14529 pPowerParams->uListenInterval;
14530 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
14531 pPowerParams->uBcastMcastFilter;
14532 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
14533 pPowerParams->uEnableBET;
14534 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
14535 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070014536 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
14537 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014538 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
14539 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014540
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 /* Store Params pass it to WDI */
14542 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
14543 pWdaParams->pWdaContext = pWDA;
14544 /* Store param pointer as passed in by caller */
14545 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014546 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014547 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014548 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014549 if(IS_WDI_STATUS_FAILURE(status))
14550 {
14551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14552 "Failure in Set power params REQ WDI API, free all the memory " );
14553 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14554 vos_mem_free(pWdaParams->wdaMsgParam);
14555 pWdaParams->wdaWdiApiMsgParam = NULL;
14556 pWdaParams->wdaMsgParam = NULL;
14557 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014558 return CONVERT_WDI2VOS_STATUS(status) ;
14559}
14560
14561/*
14562 * FUNCTION: WDA_SetTmLevelRspCallback
14563 * Set TM Level response
14564 */
14565void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
14566{
14567 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14568
14569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014570 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014571
14572 if(NULL == pWdaParams)
14573 {
14574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014575 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014576 VOS_ASSERT(0) ;
14577 return ;
14578 }
14579
14580 /* Dose not need to send notification to upper layer
14581 * Just free allocated resources */
14582 if( pWdaParams != NULL )
14583 {
14584 if( pWdaParams->wdaWdiApiMsgParam != NULL )
14585 {
14586 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14587 }
14588 vos_mem_free(pWdaParams->wdaMsgParam) ;
14589 vos_mem_free(pWdaParams) ;
14590 }
14591}
14592
14593/*
14594 * FUNCTION: WDA_ProcessSetTmLevelReq
14595 * Set TM Level request
14596 */
14597VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
14598 tAniSetTmLevelReq *setTmLevelReq)
14599{
14600 WDI_Status status = WDI_STATUS_SUCCESS ;
14601 tWDA_ReqParams *pWdaParams ;
14602 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
14603 (WDI_SetTmLevelReqType *)vos_mem_malloc(
14604 sizeof(WDI_SetTmLevelReqType)) ;
14605 if(NULL == wdiSetTmLevelReq)
14606 {
14607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014608 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014609 VOS_ASSERT(0);
14610 return VOS_STATUS_E_NOMEM;
14611 }
14612
14613 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14614 if(NULL == pWdaParams)
14615 {
14616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014617 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014618 VOS_ASSERT(0);
14619 vos_mem_free(wdiSetTmLevelReq);
14620 return VOS_STATUS_E_NOMEM;
14621 }
14622
14623 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014624 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014625
14626 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
14627 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
14628
14629 pWdaParams->pWdaContext = pWDA;
14630 pWdaParams->wdaMsgParam = setTmLevelReq;
14631 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
14632
14633 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
14634 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
14635
14636 if(IS_WDI_STATUS_FAILURE(status))
14637 {
14638 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080014639 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070014640 vos_mem_free(pWdaParams->wdaMsgParam) ;
14641 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14642 vos_mem_free(pWdaParams) ;
14643 }
14644
14645 return CONVERT_WDI2VOS_STATUS(status) ;
14646}
14647
14648VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
14649 tpTxControlParams pTxCtrlParam)
14650{
14651 VOS_STATUS wdaStatus;
14652
14653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014654 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014655 if( pTxCtrlParam == NULL )
14656 {
14657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014658 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014659 return VOS_STATUS_E_FAILURE;
14660 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014661 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
14662 {
14663 wdaStatus = WDA_SuspendDataTx(pWDA);
14664 }
14665 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
14666 {
14667 wdaStatus = WDA_ResumeDataTx(pWDA);
14668 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014669 return wdaStatus;
14670}
14671
14672 /* FUNCTION WDA_featureCapsExchange
14673 * WDA API to invoke capability exchange between host and FW.
14674 */
14675void WDA_featureCapsExchange(v_PVOID_t pVosContext)
14676{
14677 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014678 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014679 WDI_featureCapsExchangeReq( NULL, pVosContext);
14680}
14681
Yathish9f22e662012-12-10 14:21:35 -080014682/* FUNCTION WDA_disableCapablityFeature
14683 * WDA API to diable Active mode offload in host.
14684 */
14685void WDA_disableCapablityFeature(tANI_U8 feature_index)
14686{
14687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14688 "%s:enter", __func__ );
14689 WDI_disableCapablityFeature(feature_index);
14690}
14691
Jeff Johnson295189b2012-06-20 16:38:30 -070014692 /* FUNCTION WDA_getHostWlanFeatCaps
14693 * Wrapper for WDI API, that will return if the feature (enum value).passed
14694 * to this API is supported or not in Host
14695 * return value
14696 * 0 - implies feature is NOT Supported
14697 * any non zero value - implies feature is SUPPORTED
14698 */
14699tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
14700{
14701 return WDI_getHostWlanFeatCaps(featEnumValue);
14702}
14703
14704 /* FUNCTION WDA_getFwWlanFeatCaps
14705 * Wrapper for WDI API, that will return if the feature (enum value).passed
14706 * to this API is supported or not in FW
14707 * return value
14708 * 0 - implies feature is NOT Supported
14709 * any non zero value - implies feature is SUPPORTED
14710 */
14711tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
14712{
14713 return WDI_getFwWlanFeatCaps(featEnumValue);
14714}
14715
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053014716
Jeff Johnson295189b2012-06-20 16:38:30 -070014717/*
14718 * FUNCTION: WDA_shutdown
14719 * Shutdown WDA/WDI without handshaking with Riva.
14720 * Synchronous function.
14721 */
14722VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
14723{
14724 WDI_Status wdiStatus;
14725 //tANI_U8 eventIdx = 0;
14726 VOS_STATUS status = VOS_STATUS_SUCCESS;
14727 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070014728 if (NULL == pWDA)
14729 {
14730 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014731 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070014732 VOS_ASSERT(0);
14733 return VOS_STATUS_E_FAILURE;
14734 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014735 /* FTM mode stay START_STATE */
14736 if( (WDA_READY_STATE != pWDA->wdaState) &&
14737 (WDA_INIT_STATE != pWDA->wdaState) &&
14738 (WDA_START_STATE != pWDA->wdaState) )
14739 {
14740 VOS_ASSERT(0);
14741 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014742
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014743 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
14744 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070014745 {
14746 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080014747 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014748 }
Leo Chang9d76f622013-08-23 16:34:52 -070014749 else
14750 {
14751 vos_event_destroy(&pWDA->ftmStopDoneEvent);
14752 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014753
Jeff Johnson295189b2012-06-20 16:38:30 -070014754 /* call WDI shutdown */
14755 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070014756 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
14757 {
14758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14759 "error in WDA Stop" );
14760 status = VOS_STATUS_E_FAILURE;
14761 }
14762 /* WDI stop is synchrnous, shutdown is complete when it returns */
14763 pWDA->wdaState = WDA_STOP_STATE;
14764
Jeff Johnson295189b2012-06-20 16:38:30 -070014765 /* shutdown should perform the stop & close actions. */
14766 /* Destroy the event */
14767 status = vos_event_destroy(&pWDA->txFrameEvent);
14768 if(!VOS_IS_STATUS_SUCCESS(status))
14769 {
14770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014771 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014772 status = VOS_STATUS_E_FAILURE;
14773 }
14774 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
14775 if(!VOS_IS_STATUS_SUCCESS(status))
14776 {
14777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014778 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014779 status = VOS_STATUS_E_FAILURE;
14780 }
14781 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
14782 if(!VOS_IS_STATUS_SUCCESS(status))
14783 {
14784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080014785 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070014786 status = VOS_STATUS_E_FAILURE;
14787 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014788 /* free WDA context */
14789 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
14790 if ( !VOS_IS_STATUS_SUCCESS(status) )
14791 {
14792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14793 "error in WDA close " );
14794 status = VOS_STATUS_E_FAILURE;
14795 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014796 return status;
14797}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014798
Jeff Johnsone7245742012-09-05 17:12:55 -070014799/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014800 * FUNCTION: WDA_setNeedShutdown
14801 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070014802 */
14803
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080014804void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070014805{
14806 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014807 if(pWDA == NULL)
14808 {
14809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14810 "Could not get the WDA Context pointer" );
14811 return;
14812 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014813 pWDA->needShutdown = TRUE;
14814}
14815/*
14816 * FUNCTION: WDA_needShutdown
14817 * WDA needs a shutdown
14818 */
14819
14820v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
14821{
14822 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070014823 if(pWDA == NULL)
14824 {
14825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14826 "Could not get the WDA Context pointer" );
14827 return 0;
14828 }
14829 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070014830}
14831
Mohit Khanna4a70d262012-09-11 16:30:12 -070014832#ifdef WLAN_FEATURE_11AC
14833/*
14834 * FUNCTION: WDA_SetBeaconFilterReqCallback
14835 *
14836 */
14837void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
14838{
14839 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014841 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014842 if(NULL == pWdaParams)
14843 {
14844 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014845 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014846 VOS_ASSERT(0) ;
14847 return ;
14848 }
Jeff Johnsone7245742012-09-05 17:12:55 -070014849
Mohit Khanna4a70d262012-09-11 16:30:12 -070014850 vos_mem_free(pWdaParams->wdaMsgParam) ;
14851 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14852 vos_mem_free(pWdaParams) ;
14853 /*
14854 * No respone required for SetBeaconFilter req so just free the request
14855 * param here
14856 */
14857
14858 return ;
14859}
14860
14861VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
14862 tUpdateVHTOpMode *pData)
14863{
14864 WDI_Status status = WDI_STATUS_SUCCESS ;
14865 tWDA_ReqParams *pWdaParams ;
14866 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
14867 sizeof(WDI_UpdateVHTOpMode)) ;
14868 if(NULL == wdiTemp)
14869 {
14870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014871 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014872 VOS_ASSERT(0);
14873 return VOS_STATUS_E_NOMEM;
14874 }
14875 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14876 if(NULL == pWdaParams)
14877 {
14878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014879 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070014880 VOS_ASSERT(0);
14881 vos_mem_free(wdiTemp);
14882 return VOS_STATUS_E_NOMEM;
14883 }
14884
14885 wdiTemp->opMode = pData->opMode;
14886 wdiTemp->staId = pData->staId;
14887
14888 pWdaParams->pWdaContext = pWDA;
14889 /* Store Req pointer, as this will be used for response */
14890 pWdaParams->wdaMsgParam = (void *)pData;
14891 /* store Params pass it to WDI */
14892 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
14893
14894 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
14895
14896 if(IS_WDI_STATUS_FAILURE(status))
14897 {
14898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14899 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
14900 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14901 vos_mem_free(pWdaParams->wdaMsgParam);
14902 vos_mem_free(pWdaParams);
14903 }
14904 return CONVERT_WDI2VOS_STATUS(status) ;
14905}
14906#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014907
14908/*==========================================================================
14909 FUNCTION WDA_TransportChannelDebug
14910
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070014911 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014912 Display Transport Channel debugging information
14913 User may request to display DXE channel snapshot
14914 Or if host driver detects any abnormal stcuk may display
14915
14916 PARAMETERS
schang6295e542013-03-12 15:31:23 -070014917 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080014918 displaySnapshot : Display DXE snapshot option
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014919 enableStallDetect : Enable stall detect feature
14920 This feature will take effect to data performance
14921 Not integrate till fully verification
14922
14923 RETURN VALUE
14924 NONE
14925
14926===========================================================================*/
14927void WDA_TransportChannelDebug
14928(
schang6295e542013-03-12 15:31:23 -070014929 tpAniSirGlobal pMac,
14930 v_BOOL_t displaySnapshot,
14931 v_BOOL_t toggleStallDetect
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014932)
14933{
Madan Mohan Koyyalamudi24a00f92012-10-22 15:21:02 -070014934 WDI_TransportChannelDebug(displaySnapshot, toggleStallDetect);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070014935 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070014936}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070014937
14938/*==========================================================================
14939 FUNCTION WDA_SetEnableSSR
14940
14941 DESCRIPTION
14942 API to enable/disable SSR on WDI timeout
14943
14944 PARAMETERS
14945 enableSSR : enable/disable SSR
14946
14947 RETURN VALUE
14948 NONE
14949
14950===========================================================================*/
14951void WDA_SetEnableSSR(v_BOOL_t enableSSR)
14952{
14953 WDI_SetEnableSSR(enableSSR);
14954}
Leo Chang9056f462013-08-01 19:21:11 -070014955
14956#ifdef FEATURE_WLAN_LPHB
14957/*
14958 * FUNCTION: WDA_LPHBconfRspCallback
14959 *
14960 */
14961void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
14962{
14963 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14964
14965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14966 "<------ %s " ,__func__);
14967 if (NULL == pWdaParams)
14968 {
14969 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14970 "%s: pWdaParams received NULL", __func__);
14971 VOS_ASSERT(0) ;
14972 return ;
14973 }
14974
14975 /* Do not need to send notification to upper layer
14976 * Just free allocated resources */
14977 if (pWdaParams != NULL)
14978 {
14979 if (pWdaParams->wdaWdiApiMsgParam != NULL)
14980 {
14981 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14982 }
14983 vos_mem_free(pWdaParams->wdaMsgParam) ;
14984 vos_mem_free(pWdaParams) ;
14985 }
14986
14987 return;
14988}
14989
14990/*
14991 * FUNCTION: WDA_ProcessLPHBConfReq
14992 *
14993 */
14994VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
14995 tSirLPHBReq *pData)
14996{
14997 WDI_Status wdiStatus;
14998 tWDA_ReqParams *pWdaParams ;
14999
15000 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15001 "------> %s " , __func__);
15002
15003 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15004 if (NULL == pWdaParams)
15005 {
15006 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15007 "%s: VOS MEM Alloc Failure", __func__);
15008 VOS_ASSERT(0);
15009 vos_mem_free(pData);
15010 return VOS_STATUS_E_NOMEM;
15011 }
15012
15013 pWdaParams->pWdaContext = pWDA;
15014 pWdaParams->wdaMsgParam = (void *)pData;
15015 pWdaParams->wdaWdiApiMsgParam = NULL;
15016
15017 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15018 if (WDI_STATUS_PENDING == wdiStatus)
15019 {
15020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15021 "Pending received for %s:%d ", __func__, __LINE__);
15022 }
15023 else if (WDI_STATUS_SUCCESS != wdiStatus)
15024 {
15025 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15026 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15027 vos_mem_free(pWdaParams->wdaMsgParam);
15028 vos_mem_free(pWdaParams);
15029 }
15030
15031 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15032}
15033#endif /* FEATURE_WLAN_LPHB */
15034