blob: 6eefc801b489236c11f4816249ef442c3efec8cb [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2014 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
22/*
23 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
24 * All Rights Reserved.
25 * Qualcomm Atheros Confidential and Proprietary.
26 *
27 */
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029
30/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070031 W L A N _ Q C T _ WDA . C
Jeff Johnson295189b2012-06-20 16:38:30 -070032 OVERVIEW:
Jeff Johnson295189b2012-06-20 16:38:30 -070033 This software unit holds the implementation of the WLAN Transport Layer.
Jeff Johnson295189b2012-06-20 16:38:30 -070034 The functions externalized by this module are to be called ONLY by other
35 WLAN modules that properly register with the Transport Layer initially.
Jeff Johnson295189b2012-06-20 16:38:30 -070036 DEPENDENCIES:
Jeff Johnson295189b2012-06-20 16:38:30 -070037 Are listed for each API below.
38
Jeff Johnson295189b2012-06-20 16:38:30 -070039 Copyright (c) 2010-2011 QUALCOMM Incorporated.
40 All Rights Reserved.
41 Qualcomm Confidential and Proprietary
42===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070043/*===========================================================================
Jeff Johnson295189b2012-06-20 16:38:30 -070044 EDIT HISTORY FOR FILE
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046 This section contains comments describing changes made to the module.
47 Notice that changes are listed in reverse chronological order.
48
Jeff Johnson295189b2012-06-20 16:38:30 -070049 $Header$$DateTime$$Author$
50
Jeff Johnson295189b2012-06-20 16:38:30 -070051 when who what, where, why
52---------- --- -------------------------------------------------
5310/05/2011 haparna Adding support for Keep Alive Feature
542010-12-30 smiryala UMAC convergence changes
552010-08-19 adwivedi WLAN DAL AL(WDA) layer for Prima
56===========================================================================*/
Jeff Johnson295189b2012-06-20 16:38:30 -070057#include "vos_mq.h"
58#include "vos_api.h"
59#include "vos_packet.h"
60#include "vos_nvitem.h"
61#include "sirApi.h"
62#include "wlan_qct_pal_packet.h"
Mihir Shete40a55652014-03-02 14:14:47 +053063#include "wlan_qct_pal_device.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070064#include "wlan_qct_wda.h"
65#include "wlan_qct_wda_msg.h"
66#include "wlan_qct_wdi_cfg.h"
67#include "wlan_qct_wdi.h"
68#include "wlan_qct_wdi_ds.h"
69#include "wlan_hal_cfg.h"
70/**********************/
71#include "wniApi.h"
72#include "cfgApi.h"
73#include "limApi.h"
74#include "wlan_qct_tl.h"
75#include "wlan_qct_tli_ba.h"
76#include "limUtils.h"
77#include "btcApi.h"
78#include "vos_sched.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070079#include "pttMsgApi.h"
80#include "wlan_qct_sys.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070081/* Used MACRO's */
82/* Get WDA context from vOSS module */
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080083#define WDA_2_4_GHZ_MAX_FREQ 3000
Jeff Johnson295189b2012-06-20 16:38:30 -070084#define VOS_GET_WDA_CTXT(a) vos_get_context(VOS_MODULE_ID_WDA, a)
85#define VOS_GET_MAC_CTXT(a) vos_get_context(VOS_MODULE_ID_PE, a)
Jeff Johnson295189b2012-06-20 16:38:30 -070086#define WDA_BA_TX_FRM_THRESHOLD (5)
Jeff Johnson295189b2012-06-20 16:38:30 -070087#define CONVERT_WDI2SIR_STATUS(x) \
88 ((WDI_STATUS_SUCCESS != (x)) ? eSIR_FAILURE : eSIR_SUCCESS)
89
90#define IS_WDI_STATUS_FAILURE(status) \
91 ((WDI_STATUS_SUCCESS != (status)) && (WDI_STATUS_PENDING != (status)))
Jeff Johnson295189b2012-06-20 16:38:30 -070092#define CONVERT_WDI2VOS_STATUS(x) \
93 ((IS_WDI_STATUS_FAILURE(x)) ? VOS_STATUS_E_FAILURE : VOS_STATUS_SUCCESS)
94
95/* macro's for acessing TL API/data structures */
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070096#define WDA_TL_GET_STA_STATE(a, b, c) WLANTL_GetSTAState(a, b, c)
Jeff Johnson295189b2012-06-20 16:38:30 -070097#define WDA_TL_GET_TX_PKTCOUNT(a, b, c, d) WLANTL_GetTxPktCount(a, b, c, d)
Jeff Johnson295189b2012-06-20 16:38:30 -070098#define WDA_GET_BA_TXFLAG(a, b, c) \
99 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) & (1 << (c)))
100
101#define WDA_SET_BA_TXFLAG(a, b, c) \
102 (((a)->wdaStaInfo[(b)].ucUseBaBitmap) |= (1 << (c)))
103
104#define WDA_CLEAR_BA_TXFLAG(a, b, c) \
105 (((a)->wdaStaInfo[b].ucUseBaBitmap) &= ~(1 << c))
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WDA_TL_BA_SESSION_ADD(a, b, c, d, e, f, g) \
107 WLANTL_BaSessionAdd(a, b, c, d, e, f, g)
Jeff Johnson295189b2012-06-20 16:38:30 -0700108/* timer related Macros */
109#define WDA_CREATE_TIMER(a, b, c, d, e, f, g) \
110 tx_timer_create(a, b, c, d, e, f, g)
111#define WDA_START_TIMER(a) tx_timer_activate(a)
112#define WDA_STOP_TIMER(a) tx_timer_deactivate(a)
113#define WDA_DESTROY_TIMER(a) tx_timer_delete(a)
Jeff Johnson32d95a32012-09-10 13:15:23 -0700114#define WDA_WDI_START_TIMEOUT (WDI_RESPONSE_TIMEOUT + 5000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700115
116#define WDA_LAST_POLLED_THRESHOLD(a, curSta, tid) \
117 ((a)->wdaStaInfo[curSta].framesTxed[tid] + WDA_BA_TX_FRM_THRESHOLD)
Jeff Johnson295189b2012-06-20 16:38:30 -0700118#define WDA_BA_MAX_WINSIZE (64)
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#define WDA_INVALID_KEY_INDEX 0xFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700120#define WDA_NUM_PWR_SAVE_CFG 11
Jeff Johnson295189b2012-06-20 16:38:30 -0700121#define WDA_TX_COMPLETE_TIME_OUT_VALUE 1000
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800122#define WDA_TRAFFIC_STATS_TIME_OUT_VALUE 1000
Jeff Johnson295189b2012-06-20 16:38:30 -0700123
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700124#define WDA_MAX_RETRIES_TILL_RING_EMPTY 1000 /* MAX 10000 msec = 10 seconds wait */
Jeff Johnson295189b2012-06-20 16:38:30 -0700125
Jeff Johnson04dd8a82012-06-29 20:41:40 -0700126#define WDA_WAIT_MSEC_TILL_RING_EMPTY 10 /* 10 msec wait per cycle */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -0700127#define WDA_IS_NULL_MAC_ADDRESS(mac_addr) \
128 ((mac_addr[0] == 0x00) && (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) &&\
129 (mac_addr[1] == 0x00) && (mac_addr[2] == 0x00) && (mac_addr[3] == 0x00))
130
131#define WDA_MAC_ADDR_ARRAY(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
132#define WDA_MAC_ADDRESS_STR "%02x:%02x:%02x:%02x:%02x:%02x"
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -0800133#define WDA_DUMPCMD_WAIT_TIMEOUT 10000
134
Jeff Johnson295189b2012-06-20 16:38:30 -0700135/* extern declarations */
136extern void vos_WDAComplete_cback(v_PVOID_t pVosContext);
Hoonki Lee9af07cf2013-04-24 01:21:58 -0700137extern wpt_uint8 WDI_GetActiveSessionsCount (void *pWDICtx, wpt_macAddr macBSSID, wpt_boolean skipBSSID);
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/* forward declarations */
140void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
141 void *pBodyptr, tANI_U32 bodyVal) ;
142VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
143 WDI_StartReqParamsType *wdiStartParams ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700144VOS_STATUS WDA_wdiCompleteCB(v_PVOID_t pVosContext) ;
145VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams);
146
147extern v_BOOL_t sys_validateStaConfig( void *pImage, unsigned long cbFile,
148 void **ppStaConfig, v_SIZE_t *pcbStaConfig ) ;
149void processCfgDownloadReq(tpAniSirGlobal pMac, tANI_U16 length,
150 tANI_U32 *pConfig) ;
151void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
152 WDI_ConfigBSSReqInfoType *wdiBssParams, tAddBssParams *wdaBssParams) ;
153void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
154 WDI_ConfigStaReqInfoType *wdiStaParams, tAddStaParams *wdaStaParams) ;
155void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
156 void* pUserData ) ;
157static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA) ;
158static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA);
159void WDA_BaCheckActivity(tWDA_CbContext *pWDA) ;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -0800160void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700161void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams, void* pUserData);
Jeff Johnson295189b2012-06-20 16:38:30 -0700162#ifdef WLAN_FEATURE_VOWIFI_11R
163VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA, tAggrAddTsParams *pAggrAddTsReqParams);
164#endif /* WLAN_FEATURE_VOWIFI_11R */
165
Jeff Johnson295189b2012-06-20 16:38:30 -0700166void WDA_TimerHandler(v_VOID_t *pWDA, tANI_U32 timerInfo) ;
167void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pContext) ;
168VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -0700169#ifdef FEATURE_WLAN_SCAN_PNO
170static VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA, tSirPNOScanReq *pPNOScanReqParams);
171static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
172static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
173#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700174#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -0700175VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700176void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
177void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
178void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
179#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700180#ifdef WLAN_FEATURE_PACKET_FILTERING
181static VOS_STATUS WDA_Process8023MulticastListReq (
182 tWDA_CbContext *pWDA,
183 tSirRcvFltMcAddrList *pRcvFltMcAddrLis
184 );
185static VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (
186 tWDA_CbContext *pWDA,
187 tSirRcvPktFilterCfgType *pRcvPktFilterCfg
188 );
189static VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (
190 tWDA_CbContext *pWDA,
191 tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp
192 );
193static VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (
194 tWDA_CbContext *pWDA,
195 tSirRcvFltPktClearParam *pRcvFltPktClearParam
196 );
197#endif // WLAN_FEATURE_PACKET_FILTERING
Jeff Johnson295189b2012-06-20 16:38:30 -0700198VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA, tSirSetPowerParamsReq *pPowerParams);
Jeff Johnson295189b2012-06-20 16:38:30 -0700199static VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
200 tpTxControlParams pTxCtrlParam);
Jeff Johnson295189b2012-06-20 16:38:30 -0700201VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
202 v_U8_t *pDefaultKeyId,
203 v_U8_t *pNumKeys,
204 WDI_KeysType *pWdiKeys );
205
206#ifdef WLAN_FEATURE_GTK_OFFLOAD
207static VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA, tpSirGtkOffloadParams pGtkOffloadParams);
208static VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA, tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp);
209#endif // WLAN_FEATURE_GTK_OFFLOAD
210
c_hpothu92367912014-05-01 15:18:17 +0530211v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
212 tSirBcnMissRateReq *pData);
213
Jeff Johnson295189b2012-06-20 16:38:30 -0700214VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
215 tAniSetTmLevelReq *setTmLevelReq);
Mohit Khanna4a70d262012-09-11 16:30:12 -0700216#ifdef WLAN_FEATURE_11AC
217VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
218 tUpdateVHTOpMode *pData);
219#endif
Leo Chang9056f462013-08-01 19:21:11 -0700220
221#ifdef FEATURE_WLAN_LPHB
222VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
223 tSirLPHBReq *pData);
224#endif /* FEATURE_WLAN_LPHB */
Jeff Johnson295189b2012-06-20 16:38:30 -0700225/*
226 * FUNCTION: WDA_open
227 * Allocate the WDA context
228 */
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530229VOS_STATUS WDA_open(v_PVOID_t pVosContext, v_PVOID_t devHandle,
Jeff Johnson295189b2012-06-20 16:38:30 -0700230 tMacOpenParameters *pMacParams )
231{
232 tWDA_CbContext *wdaContext;
233 VOS_STATUS status;
234 WDI_DeviceCapabilityType wdiDevCapability = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700235 /* Allocate WDA context */
236 status = vos_alloc_context(pVosContext, VOS_MODULE_ID_WDA,
237 (v_VOID_t **)&wdaContext, sizeof(tWDA_CbContext)) ;
238 if(!VOS_IS_STATUS_SUCCESS(status))
239 {
240 return VOS_STATUS_E_NOMEM;
241 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700242 /*__asm int 3;*/
243 vos_mem_zero(wdaContext,sizeof(tWDA_CbContext));
244
245 /* Initialize data structures */
246 wdaContext->pVosContext = pVosContext;
247 wdaContext->wdaState = WDA_INIT_STATE;
248 wdaContext->uTxFlowMask = WDA_TXFLOWMASK;
249
250 /* Initialize WDA-WDI synchronization event */
251 status = vos_event_init(&wdaContext->wdaWdiEvent);
252 if(!VOS_IS_STATUS_SUCCESS(status))
253 {
254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800255 "WDI Sync Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800256 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700257 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700258 /* Init Frame transfer event */
259 status = vos_event_init(&wdaContext->txFrameEvent);
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 "VOS Mgmt Frame 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 status = vos_event_init(&wdaContext->suspendDataTxEvent);
267 if(!VOS_IS_STATUS_SUCCESS(status))
268 {
269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800270 "VOS suspend data tx Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800271 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700272 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700273 status = vos_event_init(&wdaContext->waitOnWdiIndicationCallBack);
274 if(!VOS_IS_STATUS_SUCCESS(status))
275 {
276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -0800277 "VOS wait On Wdi Ind Event init failed - status = %d", status);
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800278 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700279 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 vos_trace_setLevel(VOS_MODULE_ID_WDA,VOS_TRACE_LEVEL_ERROR);
Jeff Johnson295189b2012-06-20 16:38:30 -0700281 wdaContext->driverMode = pMacParams->driverType;
Arun Kumar Khandavalliebb19482014-03-25 13:56:53 +0530282 if(WDI_STATUS_SUCCESS != WDI_Init(devHandle, &wdaContext->pWdiContext,
Jeff Johnson295189b2012-06-20 16:38:30 -0700283 &wdiDevCapability, pMacParams->driverType))
284 {
285 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
286 "WDI Init failed" );
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800287 goto error;
Jeff Johnson295189b2012-06-20 16:38:30 -0700288 }
289 else
290 {
291 pMacParams->maxStation = wdiDevCapability.ucMaxSTASupported ;
292 pMacParams->maxBssId = wdiDevCapability.ucMaxBSSSupported;
293 pMacParams->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
Jeff Johnson295189b2012-06-20 16:38:30 -0700294 /* update max STA in WDA used for BA */
295 wdaContext->wdaMaxSta = pMacParams->maxStation;
296 /* store the frameTransRequired flag in wdaContext, to send this to HAL
297 * in WDA_Start
298 */
299 wdaContext->frameTransRequired = wdiDevCapability.bFrameXtlSupported;
300 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700301 return status;
Madan Mohan Koyyalamudi0b78e152012-11-28 15:46:51 -0800302
303error:
304 vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
305 return VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -0700306}
307
Jeff Johnson295189b2012-06-20 16:38:30 -0700308/*
309 * FUNCTION: WDA_preStart
310 * Trigger DAL-AL to start CFG download
311 */
312VOS_STATUS WDA_preStart(v_PVOID_t pVosContext)
313{
314 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
315 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700316 /*
317 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
318 */
319 wdaMsg.type = WNI_CFG_DNLD_REQ ;
320 wdaMsg.bodyptr = NULL;
321 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -0700322 /* post the message.. */
323 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
324 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
325 {
326 vosStatus = VOS_STATUS_E_BADMSG;
327 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700328 return( vosStatus );
329}
Jeff Johnson295189b2012-06-20 16:38:30 -0700330/*
331 * FUNCTION: WDA_wdiStartCallback
332 * Once WDI_Start is finished, WDI start callback will be called by WDI
333 * to indicate completion of WDI_Start.
334 */
335void WDA_wdiStartCallback(WDI_StartRspParamsType *wdiRspParams,
336 void *pVosContext)
337{
338 tWDA_CbContext *wdaContext;
339 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -0700340 if (NULL == pVosContext)
341 {
342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700343 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700344 return;
345 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700346 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
347 if (NULL == wdaContext)
348 {
349 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700350 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700351 return;
352 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700353 if (WDI_STATUS_SUCCESS != wdiRspParams->wdiStatus)
354 {
355 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700356 "%s: WDI_Start() failure reported", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700357 }
358 else
359 {
360 wdaContext->wdaState = WDA_START_STATE;
361 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700362 /* extract and save version information from the Start Response */
363 wdaContext->wcnssWlanCompiledVersion.major =
364 wdiRspParams->wlanCompiledVersion.major;
365 wdaContext->wcnssWlanCompiledVersion.minor =
366 wdiRspParams->wlanCompiledVersion.minor;
367 wdaContext->wcnssWlanCompiledVersion.version =
368 wdiRspParams->wlanCompiledVersion.version;
369 wdaContext->wcnssWlanCompiledVersion.revision =
370 wdiRspParams->wlanCompiledVersion.revision;
371 wdaContext->wcnssWlanReportedVersion.major =
372 wdiRspParams->wlanReportedVersion.major;
373 wdaContext->wcnssWlanReportedVersion.minor =
374 wdiRspParams->wlanReportedVersion.minor;
375 wdaContext->wcnssWlanReportedVersion.version =
376 wdiRspParams->wlanReportedVersion.version;
377 wdaContext->wcnssWlanReportedVersion.revision =
378 wdiRspParams->wlanReportedVersion.revision;
379 wpalMemoryCopy(wdaContext->wcnssSoftwareVersionString,
380 wdiRspParams->wcnssSoftwareVersion,
381 sizeof(wdaContext->wcnssSoftwareVersionString));
382 wpalMemoryCopy(wdaContext->wcnssHardwareVersionString,
383 wdiRspParams->wcnssHardwareVersion,
384 sizeof(wdaContext->wcnssHardwareVersionString));
Jeff Johnson295189b2012-06-20 16:38:30 -0700385 /* Notify WDA_start that WDI_Start has completed */
386 status = vos_event_set(&wdaContext->wdaWdiEvent);
Jeff Johnson43971f52012-07-17 12:26:56 -0700387 if (VOS_STATUS_SUCCESS != status)
Jeff Johnson295189b2012-06-20 16:38:30 -0700388 {
389 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700390 "%s: Unable to unblock WDA_start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700391 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700392 return;
393}
394
Jeff Johnson295189b2012-06-20 16:38:30 -0700395/*
396 * FUNCTION: WDA_start
397 * Prepare TLV configuration and call WDI_Start.
398 */
Jeff Johnson295189b2012-06-20 16:38:30 -0700399VOS_STATUS WDA_start(v_PVOID_t pVosContext)
400{
401 tWDA_CbContext *wdaContext;
402 VOS_STATUS status;
403 WDI_Status wdiStatus;
404 WDI_StartReqParamsType wdiStartParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700405 if (NULL == pVosContext)
406 {
407 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700408 "%s: Invoked with invalid pVosContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700409 return VOS_STATUS_E_FAILURE;
410 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700411 wdaContext = VOS_GET_WDA_CTXT(pVosContext);
412 if (NULL == wdaContext)
413 {
414 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700415 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700416 return VOS_STATUS_E_FAILURE;
417 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 /* Non-FTM mode, WDA status for START must be INIT
419 * FTM mode, WDA Status for START can be INIT or STOP */
420 if ( (WDA_INIT_STATE != wdaContext->wdaState) &&
421 (WDA_STOP_STATE != wdaContext->wdaState) )
422 {
423 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
424 "%s: Invoked from wrong state %d",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700425 __func__, wdaContext->wdaState );
Jeff Johnson295189b2012-06-20 16:38:30 -0700426 return VOS_STATUS_E_FAILURE;
427 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700428 /* initialize the wdiStartParam. Note that we can create this on
429 the stack since we won't exit until WDI_Start() completes or
430 times out */
431 vos_mem_set(&wdiStartParam, sizeof(wdiStartParam), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700432 wdiStartParam.wdiDriverType = wdaContext->driverMode;
Jeff Johnson295189b2012-06-20 16:38:30 -0700433 /* prepare the config TLV for the WDI */
434 status = WDA_prepareConfigTLV(pVosContext, &wdiStartParam);
435 if ( !VOS_IS_STATUS_SUCCESS(status) )
436 {
437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700438 "%s: Unable to prepare Config TLV", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700439 return VOS_STATUS_E_FAILURE;
440 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700441 /* note from here onwards if an error occurs we must
442 reclaim the config TLV buffer */
Jeff Johnson295189b2012-06-20 16:38:30 -0700443 wdiStartParam.wdiLowLevelIndCB = WDA_lowLevelIndCallback;
444 wdiStartParam.pIndUserData = (v_PVOID_t *)wdaContext;
445 wdiStartParam.wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -0700446 /* initialize the WDA-WDI synchronization event */
447 vos_event_reset(&wdaContext->wdaWdiEvent);
Jeff Johnson295189b2012-06-20 16:38:30 -0700448 /* call WDI start */
449 wdiStatus = WDI_Start(&wdiStartParam,
450 (WDI_StartRspCb)WDA_wdiStartCallback,
451 (v_VOID_t *)pVosContext);
452 if ( IS_WDI_STATUS_FAILURE(wdiStatus) )
453 {
454 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700455 "%s: WDI Start failed", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700456 vos_mem_free(wdiStartParam.pConfigBuffer);
457 return VOS_STATUS_E_FAILURE;
458 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700459 /* wait for WDI start to invoke our callback */
460 status = vos_wait_single_event( &wdaContext->wdaWdiEvent,
461 WDA_WDI_START_TIMEOUT );
462 if ( !VOS_IS_STATUS_SUCCESS(status) )
463 {
464 if ( VOS_STATUS_E_TIMEOUT == status )
465 {
466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700467 "%s: Timeout occurred during WDI_Start", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700468 }
469 else
470 {
471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
472 "%s: Error %d while waiting for WDI_Start",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700473 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -0700474 }
475 vos_mem_free(wdiStartParam.pConfigBuffer);
476 return VOS_STATUS_E_FAILURE;
477 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700478 /* WDI_Start() has completed so we can resume our work */
Jeff Johnson295189b2012-06-20 16:38:30 -0700479 /* we no longer need the config TLV */
480 vos_mem_free(wdiStartParam.pConfigBuffer);
Jeff Johnson295189b2012-06-20 16:38:30 -0700481 /* if we are not in the START state then WDI_Start() failed */
482 if (WDA_START_STATE != wdaContext->wdaState)
483 {
484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700485 "%s: WDI_Start() failure detected", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700486 return VOS_STATUS_E_FAILURE;
487 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700488 /* FTM mode does not need to monitor BA activity */
489 if ( eDRIVER_TYPE_MFG != wdaContext->driverMode )
490 {
491 status = wdaCreateTimers(wdaContext) ;
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -0800492 if(VOS_STATUS_SUCCESS == status)
493 {
494 wdaContext->wdaTimersCreated = VOS_TRUE;
495 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700496 }
Leo Chang9d76f622013-08-23 16:34:52 -0700497 else
498 {
499 vos_event_init(&wdaContext->ftmStopDoneEvent);
500 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700501 return status;
502}
503
Jeff Johnson295189b2012-06-20 16:38:30 -0700504/*
505 * FUNCTION: WDA_prepareConfigTLV
506 * Function to prepare CFG for DAL(WDA)
507 */
508VOS_STATUS WDA_prepareConfigTLV(v_PVOID_t pVosContext,
509 WDI_StartReqParamsType *wdiStartParams )
510{
511 /* get pMac to acess CFG data base */
512 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
513 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
514 tHalCfg *tlvStruct = NULL ;
515 tANI_U8 *tlvStructStart = NULL ;
516 tANI_U32 strLength = WNI_CFG_STA_ID_LEN;
517 v_PVOID_t *configParam;
518 tANI_U32 configParamSize;
519 tANI_U32 *configDataValue;
520 WDI_WlanVersionType wcnssCompiledApiVersion;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700521 tANI_U8 i;
522
Jeff Johnson295189b2012-06-20 16:38:30 -0700523 if ((NULL == pMac)||(NULL == wdaContext))
524 {
525 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700526 "%s: Invoked with invalid wdaContext or pMac", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -0700527 VOS_ASSERT(0);
528 return VOS_STATUS_E_FAILURE;
529 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700530 configParamSize = (sizeof(tHalCfg) * QWLAN_HAL_CFG_MAX_PARAMS) +
531 WNI_CFG_STA_ID_LEN +
532 WNI_CFG_EDCA_WME_ACBK_LEN +
533 WNI_CFG_EDCA_WME_ACBE_LEN +
534 WNI_CFG_EDCA_WME_ACVI_LEN +
535 WNI_CFG_EDCA_WME_ACVO_LEN +
536 + (QWLAN_HAL_CFG_INTEGER_PARAM * sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -0700537 /* malloc memory for all configs in one shot */
538 configParam = vos_mem_malloc(configParamSize);
539
540 if(NULL == configParam )
541 {
542 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700543 "%s:configParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700544 VOS_ASSERT(0) ;
545 return VOS_STATUS_E_NOMEM;
546 }
547 vos_mem_set(configParam, configParamSize, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -0700548 wdiStartParams->pConfigBuffer = configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 tlvStruct = (tHalCfg *)configParam;
550 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -0700551 /* TODO: Remove Later */
552 /* QWLAN_HAL_CFG_STA_ID */
553 tlvStruct->type = QWLAN_HAL_CFG_STA_ID;
554 configDataValue = (tANI_U32*)((tANI_U8 *) tlvStruct + sizeof(tHalCfg));
555 if(wlan_cfgGetStr(pMac, WNI_CFG_STA_ID, (tANI_U8*)configDataValue, &strLength) !=
556 eSIR_SUCCESS)
557 {
558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
559 "Failed to get value for WNI_CFG_STA_ID");
560 goto handle_failure;
561 }
562 tlvStruct->length = strLength ;
563 /* calculate the pad bytes to have the CFG in aligned format */
564 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
565 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -0700566 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
567 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700568 /* QWLAN_HAL_CFG_CURRENT_TX_ANTENNA */
569 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
570 tlvStruct->length = sizeof(tANI_U32);
571 configDataValue = (tANI_U32 *)(tlvStruct + 1);
572 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_TX_ANTENNA, configDataValue )
573 != eSIR_SUCCESS)
574 {
575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
576 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
577 goto handle_failure;
578 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700579 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
580 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700581 /* QWLAN_HAL_CFG_CURRENT_RX_ANTENNA */
582 tlvStruct->type = QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
583 tlvStruct->length = sizeof(tANI_U32);
584 configDataValue = (tANI_U32 *)(tlvStruct + 1);
585 if(wlan_cfgGetInt(pMac, WNI_CFG_CURRENT_RX_ANTENNA, configDataValue) !=
586 eSIR_SUCCESS)
587 {
588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
589 "Failed to get value for WNI_CFG_CURRENT_RX_ANTENNA");
590 goto handle_failure;
591 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700592 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
593 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700594 /* QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE */
595 tlvStruct->type = QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
596 tlvStruct->length = sizeof(tANI_U32);
597 configDataValue = (tANI_U32 *)(tlvStruct + 1);
598 if(wlan_cfgGetInt(pMac, WNI_CFG_LOW_GAIN_OVERRIDE, configDataValue )
599 != eSIR_SUCCESS)
600 {
601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
602 "Failed to get value for WNI_CFG_LOW_GAIN_OVERRIDE");
603 goto handle_failure;
604 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700605 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
606 + sizeof(tHalCfg) + tlvStruct->length)) ;
607
608 /* QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN */
609 tlvStruct->type = QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
610 tlvStruct->length = sizeof(tANI_U32);
611 configDataValue = (tANI_U32 *)(tlvStruct + 1);
612 if(wlan_cfgGetInt(pMac, WNI_CFG_POWER_STATE_PER_CHAIN,
613 configDataValue ) != eSIR_SUCCESS)
614 {
615 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
616 "Failed to get value for WNI_CFG_POWER_STATE_PER_CHAIN");
617 goto handle_failure;
618 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700619 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
620 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700621 /* QWLAN_HAL_CFG_CAL_PERIOD */
622 tlvStruct->type = QWLAN_HAL_CFG_CAL_PERIOD;
623 tlvStruct->length = sizeof(tANI_U32);
624 configDataValue = (tANI_U32 *)(tlvStruct + 1);
625 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_PERIOD, configDataValue )
626 != eSIR_SUCCESS)
627 {
628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
629 "Failed to get value for WNI_CFG_CAL_PERIOD");
630 goto handle_failure;
631 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700632 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
633 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700634 /* QWLAN_HAL_CFG_CAL_CONTROL */
635 tlvStruct->type = QWLAN_HAL_CFG_CAL_CONTROL ;
636 tlvStruct->length = sizeof(tANI_U32);
637 configDataValue = (tANI_U32 *)(tlvStruct + 1);
638 if(wlan_cfgGetInt(pMac, WNI_CFG_CAL_CONTROL, configDataValue )
639 != eSIR_SUCCESS)
640 {
641 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
642 "Failed to get value for WNI_CFG_CAL_CONTROL");
643 goto handle_failure;
644 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700645 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
646 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700647 /* QWLAN_HAL_CFG_PROXIMITY */
648 tlvStruct->type = QWLAN_HAL_CFG_PROXIMITY ;
649 tlvStruct->length = sizeof(tANI_U32);
650 configDataValue = (tANI_U32 *)(tlvStruct + 1);
651 if(wlan_cfgGetInt(pMac, WNI_CFG_PROXIMITY, configDataValue )
652 != eSIR_SUCCESS)
653 {
654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
655 "Failed to get value for WNI_CFG_PROXIMITY");
656 goto handle_failure;
657 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700658 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
659 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700660 /* QWLAN_HAL_CFG_NETWORK_DENSITY */
661 tlvStruct->type = QWLAN_HAL_CFG_NETWORK_DENSITY ;
662 tlvStruct->length = sizeof(tANI_U32);
663 configDataValue = (tANI_U32 *)(tlvStruct + 1);
664 if(wlan_cfgGetInt(pMac, WNI_CFG_NETWORK_DENSITY, configDataValue )
665 != eSIR_SUCCESS)
666 {
667 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
668 "Failed to get value for WNI_CFG_NETWORK_DENSITY");
669 goto handle_failure;
670 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700671 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
672 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700673 /* QWLAN_HAL_CFG_MAX_MEDIUM_TIME */
674 tlvStruct->type = QWLAN_HAL_CFG_MAX_MEDIUM_TIME ;
675 tlvStruct->length = sizeof(tANI_U32);
676 configDataValue = (tANI_U32 *)(tlvStruct + 1);
677 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MEDIUM_TIME, configDataValue ) !=
678 eSIR_SUCCESS)
679 {
680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
681 "Failed to get value for WNI_CFG_MAX_MEDIUM_TIME");
682 goto handle_failure;
683 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700684 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
685 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700686 /* QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU */
687 tlvStruct->type = QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU ;
688 tlvStruct->length = sizeof(tANI_U32);
689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
690 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_MPDUS_IN_AMPDU,
691 configDataValue ) != eSIR_SUCCESS)
692 {
693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
694 "Failed to get value for WNI_CFG_MAX_MPDUS_IN_AMPDU");
695 goto handle_failure;
696 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700697 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
698 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700699 /* QWLAN_HAL_CFG_RTS_THRESHOLD */
700 tlvStruct->type = QWLAN_HAL_CFG_RTS_THRESHOLD ;
701 tlvStruct->length = sizeof(tANI_U32);
702 configDataValue = (tANI_U32 *)(tlvStruct + 1);
703 if(wlan_cfgGetInt(pMac, WNI_CFG_RTS_THRESHOLD, configDataValue ) !=
704 eSIR_SUCCESS)
705 {
706 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
707 "Failed to get value for WNI_CFG_RTS_THRESHOLD");
708 goto handle_failure;
709 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700710 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
711 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700712 /* QWLAN_HAL_CFG_SHORT_RETRY_LIMIT */
713 tlvStruct->type = QWLAN_HAL_CFG_SHORT_RETRY_LIMIT ;
714 tlvStruct->length = sizeof(tANI_U32);
715 configDataValue = (tANI_U32 *)(tlvStruct + 1);
716 if(wlan_cfgGetInt(pMac, WNI_CFG_SHORT_RETRY_LIMIT, configDataValue ) !=
717 eSIR_SUCCESS)
718 {
719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
720 "Failed to get value for WNI_CFG_SHORT_RETRY_LIMIT");
721 goto handle_failure;
722 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700723 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
724 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700725 /* QWLAN_HAL_CFG_LONG_RETRY_LIMIT */
726 tlvStruct->type = QWLAN_HAL_CFG_LONG_RETRY_LIMIT ;
727 tlvStruct->length = sizeof(tANI_U32);
728 configDataValue = (tANI_U32 *)(tlvStruct + 1);
729 if(wlan_cfgGetInt(pMac, WNI_CFG_LONG_RETRY_LIMIT, configDataValue ) !=
730 eSIR_SUCCESS)
731 {
732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
733 "Failed to get value for WNI_CFG_LONG_RETRY_LIMIT");
734 goto handle_failure;
735 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700736 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
737 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700738 /* QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD */
739 tlvStruct->type = QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD ;
740 tlvStruct->length = sizeof(tANI_U32);
741 configDataValue = (tANI_U32 *)(tlvStruct + 1);
742 if(wlan_cfgGetInt(pMac, WNI_CFG_FRAGMENTATION_THRESHOLD,
743 configDataValue ) != eSIR_SUCCESS)
744 {
745 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
746 "Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD");
747 goto handle_failure;
748 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700749 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
750 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700751 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO */
752 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO ;
753 tlvStruct->length = sizeof(tANI_U32);
754 configDataValue = (tANI_U32 *)(tlvStruct + 1);
755 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ZERO,
756 configDataValue ) != eSIR_SUCCESS)
757 {
758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
759 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ZERO");
760 goto handle_failure;
761 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700762 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
763 + sizeof(tHalCfg) + tlvStruct->length));
764
765 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE */
766 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE ;
767 tlvStruct->length = sizeof(tANI_U32);
768 configDataValue = (tANI_U32 *)(tlvStruct + 1);
769 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_ONE,
770 configDataValue ) != eSIR_SUCCESS)
771 {
772 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
773 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_ONE");
774 goto handle_failure;
775 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700776 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
777 + sizeof(tHalCfg) + tlvStruct->length));
Jeff Johnson295189b2012-06-20 16:38:30 -0700778 /* QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO */
779 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO ;
780 tlvStruct->length = sizeof(tANI_U32);
781 configDataValue = (tANI_U32 *)(tlvStruct + 1);
782 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_THRESHOLD_TWO,
783 configDataValue ) != eSIR_SUCCESS)
784 {
785 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
786 "Failed to get value for WNI_CFG_DYNAMIC_THRESHOLD_TWO");
787 goto handle_failure;
788 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700789 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
790 + sizeof(tHalCfg) + tlvStruct->length));
791
792 /* QWLAN_HAL_CFG_FIXED_RATE */
793 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE ;
794 tlvStruct->length = sizeof(tANI_U32);
795 configDataValue = (tANI_U32 *)(tlvStruct + 1);
796 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE, configDataValue)
797 != eSIR_SUCCESS)
798 {
799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
800 "Failed to get value for WNI_CFG_FIXED_RATE");
801 goto handle_failure;
802 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700803 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
804 + sizeof(tHalCfg) + tlvStruct->length));
805
806 /* QWLAN_HAL_CFG_RETRYRATE_POLICY */
807 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_POLICY ;
808 tlvStruct->length = sizeof(tANI_U32);
809 configDataValue = (tANI_U32 *)(tlvStruct + 1);
810 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_POLICY, configDataValue )
811 != eSIR_SUCCESS)
812 {
813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
814 "Failed to get value for WNI_CFG_RETRYRATE_POLICY");
815 goto handle_failure;
816 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700817 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
818 + sizeof(tHalCfg) + tlvStruct->length));
819
820 /* QWLAN_HAL_CFG_RETRYRATE_SECONDARY */
821 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_SECONDARY ;
822 tlvStruct->length = sizeof(tANI_U32);
823 configDataValue = (tANI_U32 *)(tlvStruct + 1);
824 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_SECONDARY,
825 configDataValue ) != eSIR_SUCCESS)
826 {
827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
828 "Failed to get value for WNI_CFG_RETRYRATE_SECONDARY");
829 goto handle_failure;
830 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700831 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
832 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700833 /* QWLAN_HAL_CFG_RETRYRATE_TERTIARY */
834 tlvStruct->type = QWLAN_HAL_CFG_RETRYRATE_TERTIARY ;
835 tlvStruct->length = sizeof(tANI_U32);
836 configDataValue = (tANI_U32 *)(tlvStruct + 1);
837 if(wlan_cfgGetInt(pMac, WNI_CFG_RETRYRATE_TERTIARY,
838 configDataValue ) != eSIR_SUCCESS)
839 {
840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
841 "Failed to get value for WNI_CFG_RETRYRATE_TERTIARY");
842 goto handle_failure;
843 }
844 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
845 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -0700846 /* QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION */
847 tlvStruct->type = QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION ;
848 tlvStruct->length = sizeof(tANI_U32);
849 configDataValue = (tANI_U32 *)(tlvStruct + 1);
850 if(wlan_cfgGetInt(pMac, WNI_CFG_FORCE_POLICY_PROTECTION,
851 configDataValue ) != eSIR_SUCCESS)
852 {
853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
854 "Failed to get value for WNI_CFG_FORCE_POLICY_PROTECTION");
855 goto handle_failure;
856 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700857 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
858 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700859 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ */
860 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ ;
861 tlvStruct->length = sizeof(tANI_U32);
862 configDataValue = (tANI_U32 *)(tlvStruct + 1);
863 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_24GHZ,
864 configDataValue ) != eSIR_SUCCESS)
865 {
866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
867 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_24GHZ");
868 goto handle_failure;
869 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
871 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700872 /* QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ */
873 tlvStruct->type = QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ ;
874 tlvStruct->length = sizeof(tANI_U32);
875 configDataValue = (tANI_U32 *)(tlvStruct + 1);
876 if(wlan_cfgGetInt(pMac, WNI_CFG_FIXED_RATE_MULTICAST_5GHZ,
877 configDataValue ) != eSIR_SUCCESS)
878 {
879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
880 "Failed to get value for WNI_CFG_FIXED_RATE_MULTICAST_5GHZ");
881 goto handle_failure;
882 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700883 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
884 + sizeof(tHalCfg) + tlvStruct->length);
885
Jeff Johnson295189b2012-06-20 16:38:30 -0700886 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ */
887 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ ;
888 tlvStruct->length = sizeof(tANI_U32);
889 configDataValue = (tANI_U32 *)(tlvStruct + 1);
890 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_24GHZ,
891 configDataValue ) != eSIR_SUCCESS)
892 {
893 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
894 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_24GHZ");
895 goto handle_failure;
896 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700897 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
898 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700899 /* QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ */
900 tlvStruct->type = QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ ;
901 tlvStruct->length = sizeof(tANI_U32);
902 configDataValue = (tANI_U32 *)(tlvStruct + 1);
903 if(wlan_cfgGetInt(pMac, WNI_CFG_DEFAULT_RATE_INDEX_5GHZ,
904 configDataValue ) != eSIR_SUCCESS)
905 {
906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
907 "Failed to get value for WNI_CFG_DEFAULT_RATE_INDEX_5GHZ");
908 goto handle_failure;
909 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700910 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
911 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700912 /* QWLAN_HAL_CFG_MAX_BA_SESSIONS */
913 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_SESSIONS ;
914 tlvStruct->length = sizeof(tANI_U32);
915 configDataValue = (tANI_U32 *)(tlvStruct + 1);
916 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_SESSIONS, configDataValue ) !=
917 eSIR_SUCCESS)
918 {
919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
920 "Failed to get value for WNI_CFG_MAX_BA_SESSIONS");
921 goto handle_failure;
922 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700923 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
924 + sizeof(tHalCfg) + tlvStruct->length);
925
926 /* QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT */
927 tlvStruct->type = QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT ;
928 tlvStruct->length = sizeof(tANI_U32);
929 configDataValue = (tANI_U32 *)(tlvStruct + 1);
930 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT,
931 configDataValue ) != eSIR_SUCCESS)
932 {
933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
934 "Failed to get value for WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT");
935 goto handle_failure;
936 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700937 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
938 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700939 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER */
940 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER ;
941 tlvStruct->length = sizeof(tANI_U32);
942 configDataValue = (tANI_U32 *)(tlvStruct + 1);
943 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_BCN_FILTER,
944 configDataValue ) != eSIR_SUCCESS)
945 {
946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
947 "Failed to get value for WNI_CFG_PS_ENABLE_BCN_FILTER");
948 goto handle_failure;
949 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700950 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
951 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700952 /* QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR */
953 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR ;
954 tlvStruct->length = sizeof(tANI_U32);
955 configDataValue = (tANI_U32 *)(tlvStruct + 1);
956 if(wlan_cfgGetInt(pMac, WNI_CFG_PS_ENABLE_RSSI_MONITOR,
957 configDataValue ) != eSIR_SUCCESS)
958 {
959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
960 "Failed to get value for WNI_CFG_PS_ENABLE_RSSI_MONITOR");
961 goto handle_failure;
962 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700963 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
964 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700965 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
966 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE ;
967 tlvStruct->length = sizeof(tANI_U32);
968 configDataValue = (tANI_U32 *)(tlvStruct + 1);
969 if(wlan_cfgGetInt(pMac, WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE,
970 configDataValue ) != eSIR_SUCCESS)
971 {
972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
973 "Failed to get value for WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE");
974 goto handle_failure;
975 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700976 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
977 + sizeof(tHalCfg) + tlvStruct->length);
978
979 /* QWLAN_HAL_CFG_STATS_PERIOD */
980 tlvStruct->type = QWLAN_HAL_CFG_STATS_PERIOD ;
981 tlvStruct->length = sizeof(tANI_U32);
982 configDataValue = (tANI_U32 *)(tlvStruct + 1);
983 if(wlan_cfgGetInt(pMac, WNI_CFG_STATS_PERIOD, configDataValue ) !=
984 eSIR_SUCCESS)
985 {
986 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
987 "Failed to get value for WNI_CFG_STATS_PERIOD");
988 goto handle_failure;
989 }
Jeff Johnson295189b2012-06-20 16:38:30 -0700990 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
991 + sizeof(tHalCfg) + tlvStruct->length);
Jeff Johnson295189b2012-06-20 16:38:30 -0700992 /* QWLAN_HAL_CFG_CFP_MAX_DURATION */
993 tlvStruct->type = QWLAN_HAL_CFG_CFP_MAX_DURATION ;
994 tlvStruct->length = sizeof(tANI_U32);
995 configDataValue = (tANI_U32 *)(tlvStruct + 1);
996 if(wlan_cfgGetInt(pMac, WNI_CFG_CFP_MAX_DURATION, configDataValue ) !=
997 eSIR_SUCCESS)
998 {
999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1000 "Failed to get value for WNI_CFG_CFP_MAX_DURATION");
1001 goto handle_failure;
1002 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001003 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1004 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001005 /* QWLAN_HAL_CFG_FRAME_TRANS_ENABLED */
1006 tlvStruct->type = QWLAN_HAL_CFG_FRAME_TRANS_ENABLED ;
1007 tlvStruct->length = sizeof(tANI_U32);
1008 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1009 vos_mem_copy(configDataValue, &wdaContext->frameTransRequired,
1010 sizeof(tANI_U32));
Jeff Johnson295189b2012-06-20 16:38:30 -07001011 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1012 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001013 /* QWLAN_HAL_CFG_DTIM_PERIOD */
1014 tlvStruct->type = QWLAN_HAL_CFG_DTIM_PERIOD ;
1015 tlvStruct->length = sizeof(tANI_U32);
1016 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1017 if(wlan_cfgGetInt(pMac, WNI_CFG_DTIM_PERIOD, configDataValue)
1018 != eSIR_SUCCESS)
1019 {
1020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1021 "Failed to get value for WNI_CFG_DTIM_PERIOD");
1022 goto handle_failure;
1023 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001024 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1025 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001026 /* QWLAN_HAL_CFG_EDCA_WMM_ACBK */
1027 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBK ;
1028 strLength = WNI_CFG_EDCA_WME_ACBK_LEN;
1029 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1030 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBK, (tANI_U8 *)configDataValue,
1031 &strLength) != eSIR_SUCCESS)
1032 {
1033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1034 "Failed to get value for WNI_CFG_EDCA_WME_ACBK");
1035 goto handle_failure;
1036 }
1037 tlvStruct->length = strLength;
1038 /* calculate the pad bytes to have the CFG in aligned format */
1039 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1040 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001041 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1042 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001043 /* QWLAN_HAL_CFG_EDCA_WMM_ACBE */
1044 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACBE ;
1045 strLength = WNI_CFG_EDCA_WME_ACBE_LEN;
1046 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1047 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACBE, (tANI_U8 *)configDataValue,
1048 &strLength) != eSIR_SUCCESS)
1049 {
1050 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1051 "Failed to get value for WNI_CFG_EDCA_WME_ACBE");
1052 goto handle_failure;
1053 }
1054 tlvStruct->length = strLength;
1055 /* calculate the pad bytes to have the CFG in aligned format */
1056 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1057 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001058 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1059 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001060 /* QWLAN_HAL_CFG_EDCA_WMM_ACVI */
1061 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVO ;
1062 strLength = WNI_CFG_EDCA_WME_ACVI_LEN;
1063 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1064 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVO, (tANI_U8 *)configDataValue,
1065 &strLength) != eSIR_SUCCESS)
1066 {
1067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1068 "Failed to get value for WNI_CFG_EDCA_WME_ACVI");
1069 goto handle_failure;
1070 }
1071 tlvStruct->length = strLength;
1072 /* calculate the pad bytes to have the CFG in aligned format */
1073 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1074 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001075 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1076 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001077 /* QWLAN_HAL_CFG_EDCA_WMM_ACVO */
1078 tlvStruct->type = QWLAN_HAL_CFG_EDCA_WMM_ACVI ;
1079 strLength = WNI_CFG_EDCA_WME_ACVO_LEN;
1080 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1081 if(wlan_cfgGetStr(pMac, WNI_CFG_EDCA_WME_ACVI, (tANI_U8 *)configDataValue,
1082 &strLength) != eSIR_SUCCESS)
1083 {
1084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1085 "Failed to get value for WNI_CFG_EDCA_WME_ACVO");
1086 goto handle_failure;
1087 }
1088 tlvStruct->length = strLength;
1089 /* calculate the pad bytes to have the CFG in aligned format */
1090 tlvStruct->padBytes = ALIGNED_WORD_SIZE -
1091 (tlvStruct->length & (ALIGNED_WORD_SIZE - 1));
Jeff Johnson295189b2012-06-20 16:38:30 -07001092 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1093 + sizeof(tHalCfg) + tlvStruct->length + tlvStruct->padBytes) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001094 /* QWLAN_HAL_CFG_BA_THRESHOLD_HIGH */
1095 tlvStruct->type = QWLAN_HAL_CFG_BA_THRESHOLD_HIGH ;
1096 tlvStruct->length = sizeof(tANI_U32);
1097 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1098 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_THRESHOLD_HIGH, configDataValue)
1099 != eSIR_SUCCESS)
1100 {
1101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1102 "Failed to get value for WNI_CFG_BA_THRESHOLD_HIGH");
1103 goto handle_failure;
1104 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001105 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1106 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001107 /* QWLAN_HAL_CFG_MAX_BA_BUFFERS */
1108 tlvStruct->type = QWLAN_HAL_CFG_MAX_BA_BUFFERS ;
1109 tlvStruct->length = sizeof(tANI_U32);
1110 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1111 if(wlan_cfgGetInt(pMac, WNI_CFG_MAX_BA_BUFFERS, configDataValue)
1112 != eSIR_SUCCESS)
1113 {
1114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1115 "Failed to get value for WNI_CFG_MAX_BA_BUFFERS");
1116 goto handle_failure;
1117 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001118 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1119 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001120 /* QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE */
1121 tlvStruct->type = QWLAN_HAL_CFG_DYNAMIC_PS_POLL_VALUE ;
1122 tlvStruct->length = sizeof(tANI_U32);
1123 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1124 if(wlan_cfgGetInt(pMac, WNI_CFG_DYNAMIC_PS_POLL_VALUE, configDataValue)
1125 != eSIR_SUCCESS)
1126 {
1127 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1128 "Failed to get value for WNI_CFG_DYNAMIC_PS_POLL_VALUE");
1129 goto handle_failure;
1130 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001131 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1132 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001133 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI */
1134 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI ;
1135 tlvStruct->length = sizeof(tANI_U32);
1136 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1137 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI, configDataValue)
1138 != eSIR_SUCCESS)
1139 {
1140 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1141 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI");
1142 goto handle_failure;
1143 }
1144 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1145 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001146 /* QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS */
1147 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS ;
1148 tlvStruct->length = sizeof(tANI_U32);
1149 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1150 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS, configDataValue)
1151 != eSIR_SUCCESS)
1152 {
1153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1154 "Failed to get value for WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS");
1155 goto handle_failure;
1156 }
1157 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1158 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001159 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI */
1160 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI ;
1161 tlvStruct->length = sizeof(tANI_U32);
1162 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1163 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI, configDataValue)
1164 != eSIR_SUCCESS)
1165 {
1166 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1167 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI");
1168 goto handle_failure;
1169 }
1170 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1171 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001172 /* QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS */
1173 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS ;
1174 tlvStruct->length = sizeof(tANI_U32);
1175 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1176 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS, configDataValue)
1177 != eSIR_SUCCESS)
1178 {
1179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1180 "Failed to get value for WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS");
1181 goto handle_failure;
1182 }
1183 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1184 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001185 /* QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN */
1186 tlvStruct->type = QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN ;
1187 tlvStruct->length = sizeof(tANI_U32);
1188 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1189 if(wlan_cfgGetInt(pMac, WNI_CFG_TELE_BCN_WAKEUP_EN, configDataValue)
1190 != eSIR_SUCCESS)
1191 {
1192 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1193 "Failed to get value for WNI_CFG_TELE_BCN_WAKEUP_EN");
1194 goto handle_failure;
1195 }
1196 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1197 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001198 /* QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD */
1199 tlvStruct->type = QWLAN_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD ;
1200 tlvStruct->length = sizeof(tANI_U32);
1201 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1202 if(wlan_cfgGetInt(pMac, WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD, configDataValue)
1203 != eSIR_SUCCESS)
1204 {
1205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1206 "Failed to get value for WNI_CFG_INFRA_STA_KEEP_ALIVE_PERIOD");
1207 goto handle_failure;
1208 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001209 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1210 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001211 /*QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE*/
1212 tlvStruct->type = QWLAN_HAL_CFG_TX_PWR_CTRL_ENABLE ;
1213 tlvStruct->length = sizeof(tANI_U32);
1214 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1215 if(wlan_cfgGetInt(pMac, WNI_CFG_TX_PWR_CTRL_ENABLE, configDataValue)
1216 != eSIR_SUCCESS)
1217 {
1218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1219 "Failed to get value for WNI_CFG_TX_PWR_CTRL_ENABLE");
1220 goto handle_failure;
1221 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001222 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1223 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001224 /* QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP */
1225 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP ;
1226 tlvStruct->length = sizeof(tANI_U32);
1227 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1228 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_CLOSE_LOOP, configDataValue)
1229 != eSIR_SUCCESS)
1230 {
1231 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1232 "Failed to get value for WNI_CFG_ENABLE_CLOSE_LOOP");
1233 goto handle_failure;
1234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07001235 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1236 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001237 /* [COEX] strictly speaking, the Coex parameters are not part of the WLAN_CFG_FILE binary,
1238 * but are from the WLAN_INI_FILE file. However, this is the only parameter download routine
1239 * into FW, so the parameters are added here.
1240 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001241 /* [COEX] QWLAN_HAL_CFG_BTC_EXECUTION_MODE */
1242 tlvStruct->type = QWLAN_HAL_CFG_BTC_EXECUTION_MODE ;
1243 tlvStruct->length = sizeof(tANI_U32);
1244 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1245 *configDataValue = pMac->btc.btcConfig.btcExecutionMode;
1246 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1247 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001248 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK */
1249 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK ;
1250 tlvStruct->length = sizeof(tANI_U32);
1251 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1252 *configDataValue = pMac->btc.btcConfig.btcConsBtSlotsToBlockDuringDhcp;
1253 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1254 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001255 /* [COEX] QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS */
1256 tlvStruct->type = QWLAN_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS ;
1257 tlvStruct->length = sizeof(tANI_U32);
1258 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1259 *configDataValue = pMac->btc.btcConfig.btcA2DPBtSubIntervalsDuringDhcp;
1260 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1261 + sizeof(tHalCfg) + tlvStruct->length) ;
Jeff Johnson32d95a32012-09-10 13:15:23 -07001262 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT */
1263 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_BT ;
1264 tlvStruct->length = sizeof(tANI_U32);
1265 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1266 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqBt;
1267 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1268 + sizeof(tHalCfg) + tlvStruct->length) ;
1269
1270 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT */
1271 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_BT ;
1272 tlvStruct->length = sizeof(tANI_U32);
1273 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1274 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageBt;
1275 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1276 + sizeof(tHalCfg) + tlvStruct->length) ;
1277
1278 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT */
1279 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_BT ;
1280 tlvStruct->length = sizeof(tANI_U32);
1281 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1282 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnBt;
1283 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1284 + sizeof(tHalCfg) + tlvStruct->length) ;
1285
1286 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT */
1287 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_BT ;
1288 tlvStruct->length = sizeof(tANI_U32);
1289 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1290 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeBt;
1291 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1292 + sizeof(tHalCfg) + tlvStruct->length) ;
1293
1294 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN */
1295 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN ;
1296 tlvStruct->length = sizeof(tANI_U32);
1297 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1298 *configDataValue = pMac->btc.btcConfig.btcStaticLenInqWlan;
1299 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1300 + sizeof(tHalCfg) + tlvStruct->length) ;
1301
1302 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN */
1303 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN ;
1304 tlvStruct->length = sizeof(tANI_U32);
1305 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1306 *configDataValue = pMac->btc.btcConfig.btcStaticLenPageWlan;
1307 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1308 + sizeof(tHalCfg) + tlvStruct->length) ;
1309
1310 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN */
1311 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN ;
1312 tlvStruct->length = sizeof(tANI_U32);
1313 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1314 *configDataValue = pMac->btc.btcConfig.btcStaticLenConnWlan;
1315 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1316 + sizeof(tHalCfg) + tlvStruct->length) ;
1317
1318 /* [COEX] QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN */
1319 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_LEN_LE_WLAN ;
1320 tlvStruct->length = sizeof(tANI_U32);
1321 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1322 *configDataValue = pMac->btc.btcConfig.btcStaticLenLeWlan;
1323 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1324 + sizeof(tHalCfg) + tlvStruct->length) ;
1325
1326 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT */
1327 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_BT ;
1328 tlvStruct->length = sizeof(tANI_U32);
1329 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1330 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenBt;
1331 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1332 + sizeof(tHalCfg) + tlvStruct->length) ;
1333
1334 /* [COEX] QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN */
1335 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_MAX_LEN_WLAN ;
1336 tlvStruct->length = sizeof(tANI_U32);
1337 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1338 *configDataValue = pMac->btc.btcConfig.btcDynMaxLenWlan;
1339 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1340 + sizeof(tHalCfg) + tlvStruct->length) ;
1341
1342 /* [COEX] QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC */
1343 tlvStruct->type = QWLAN_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC ;
1344 tlvStruct->length = sizeof(tANI_U32);
1345 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1346 *configDataValue = pMac->btc.btcConfig.btcMaxScoBlockPerc;
1347 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1348 + sizeof(tHalCfg) + tlvStruct->length) ;
1349
1350 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP */
1351 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_A2DP ;
1352 tlvStruct->length = sizeof(tANI_U32);
1353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1354 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnA2dp;
1355 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1356 + sizeof(tHalCfg) + tlvStruct->length) ;
1357
1358 /* [COEX] QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO */
1359 tlvStruct->type = QWLAN_HAL_CFG_BTC_DHCP_PROT_ON_SCO ;
1360 tlvStruct->length = sizeof(tANI_U32);
1361 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1362 *configDataValue = pMac->btc.btcConfig.btcDhcpProtOnSco;
1363 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1364 + sizeof(tHalCfg) + tlvStruct->length) ;
1365
Wilson Tsaof8b37942013-09-06 10:49:00 -07001366 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_VICTIM; i++)
1367 {
1368 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WAN_FREQ */
1369 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WAN_FREQ + i*4;
1370 tlvStruct->length = sizeof(tANI_U32);
1371 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1372 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWANFreq[i];
1373 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1374 + sizeof(tHalCfg) + tlvStruct->length) ;
1375
1376 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_WLAN_FREQ */
1377 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_WLAN_FREQ + i*4;
1378 tlvStruct->length = sizeof(tANI_U32);
1379 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1380 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimWLANFreq[i];
1381 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1382 + sizeof(tHalCfg) + tlvStruct->length) ;
1383
1384 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG */
1385 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG + i*4;
1386 tlvStruct->length = sizeof(tANI_U32);
1387 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1388 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig[i];
1389 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1390 + sizeof(tHalCfg) + tlvStruct->length) ;
1391
1392 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_VX_CONFIG2 */
1393 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_V1_CONFIG2 + i*4;
1394 tlvStruct->length = sizeof(tANI_U32);
1395 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1396 *configDataValue = pMac->btc.btcConfig.mwsCoexVictimConfig2[i];
1397 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1398 + sizeof(tHalCfg) + tlvStruct->length) ;
1399 }
1400
1401 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF */
1402 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_MODEM_BACKOFF ;
1403 tlvStruct->length = sizeof(tANI_U32);
1404 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1405 *configDataValue = pMac->btc.btcConfig.mwsCoexModemBackoff;
1406 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1407 + sizeof(tHalCfg) + tlvStruct->length) ;
1408
1409 for (i = 0; i < QWLAN_HAL_CFG_MWS_COEX_MAX_CONFIG; i++)
1410 {
1411 /* [COEX] QWLAN_HAL_CFG_MWS_COEX_CONFIGX */
1412 tlvStruct->type = QWLAN_HAL_CFG_MWS_COEX_CONFIG1 + i;
1413 tlvStruct->length = sizeof(tANI_U32);
1414 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1415 *configDataValue = pMac->btc.btcConfig.mwsCoexConfig[i];
1416 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1417 + sizeof(tHalCfg) + tlvStruct->length) ;
1418 }
1419
1420 /* [COEX] QWLAN_HAL_CFG_SAR_POWER_BACKOFF */
1421 tlvStruct->type = QWLAN_HAL_CFG_SAR_POWER_BACKOFF ;
1422 tlvStruct->length = sizeof(tANI_U32);
1423 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1424 *configDataValue = pMac->btc.btcConfig.SARPowerBackoff;
1425 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1426 + sizeof(tHalCfg) + tlvStruct->length) ;
1427
Jeff Johnson32d95a32012-09-10 13:15:23 -07001428 /* QWLAN_HAL_CFG_WCNSS_API_VERSION */
Jeff Johnson295189b2012-06-20 16:38:30 -07001429 tlvStruct->type = QWLAN_HAL_CFG_WCNSS_API_VERSION ;
1430 tlvStruct->length = sizeof(tANI_U32);
1431 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1432 WDI_GetWcnssCompiledApiVersion(&wcnssCompiledApiVersion);
1433 *configDataValue = WLAN_HAL_CONSTRUCT_API_VERSION(wcnssCompiledApiVersion.major,
1434 wcnssCompiledApiVersion.minor,
1435 wcnssCompiledApiVersion.version,
1436 wcnssCompiledApiVersion.revision);
1437 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1438 + sizeof(tHalCfg) + tlvStruct->length) ;
1439
Jeff Johnsond13512a2012-07-17 11:42:19 -07001440 /* QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT */
1441 tlvStruct->type = QWLAN_HAL_CFG_AP_KEEPALIVE_TIMEOUT ;
1442 tlvStruct->length = sizeof(tANI_U32);
1443 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1444 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_KEEP_ALIVE_TIMEOUT,
1445 configDataValue ) != eSIR_SUCCESS)
1446 {
1447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1448 "Failed to get value for WNI_CFG_AP_KEEP_ALIVE_TIMEOUT");
1449 goto handle_failure;
1450 }
1451
1452 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1453 + sizeof(tHalCfg) + tlvStruct->length) ;
1454 /* QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT */
1455 tlvStruct->type = QWLAN_HAL_CFG_GO_KEEPALIVE_TIMEOUT ;
1456 tlvStruct->length = sizeof(tANI_U32);
1457 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1458 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_KEEP_ALIVE_TIMEOUT,
1459 configDataValue ) != eSIR_SUCCESS)
1460 {
1461 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1462 "Failed to get value for WNI_CFG_GO_KEEP_ALIVE_TIMEOUT");
1463 goto handle_failure;
1464 }
1465
1466 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1467 + sizeof(tHalCfg) + tlvStruct->length) ;
1468
1469 /* QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST */
1470 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MC_ADDR_LIST;
1471 tlvStruct->length = sizeof(tANI_U32);
1472 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1473 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MC_ADDR_LIST, configDataValue)
1474 != eSIR_SUCCESS)
1475 {
1476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1477 "Failed to get value for WNI_CFG_ENABLE_MC_ADDR_LIST");
1478 goto handle_failure;
1479 }
1480
1481 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1482 + sizeof(tHalCfg) + tlvStruct->length) ;
1483
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08001484 /* QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION */
1485 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION ;
1486 tlvStruct->length = sizeof(tANI_U32);
1487 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1488 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_LPWR_IMG_TRANSITION, configDataValue)
1489 != eSIR_SUCCESS)
1490 {
1491 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1492 "Failed to get value for WNI_CFG_ENABLE_LPWR_IMG_TRANSITION");
1493 goto handle_failure;
1494 }
1495
1496 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1497 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala976e3252013-01-03 15:45:56 -08001498#ifdef WLAN_SOFTAP_VSTA_FEATURE
1499 tlvStruct->type = QWLAN_HAL_CFG_MAX_ASSOC_LIMIT;
1500 tlvStruct->length = sizeof(tANI_U32);
1501 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1502 if(wlan_cfgGetInt(pMac, WNI_CFG_ASSOC_STA_LIMIT, configDataValue)
1503 != eSIR_SUCCESS)
1504 {
1505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1506 "Failed to get value for WNI_CFG_ASSOC_STA_LIMIT");
1507 goto handle_failure;
1508 }
1509
1510 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1511 + sizeof(tHalCfg) + tlvStruct->length) ;
1512#endif
1513
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -08001514 /* QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER */
1515 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER;
1516 tlvStruct->length = sizeof(tANI_U32);
1517 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1518
1519 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, configDataValue)
1520 != eSIR_SUCCESS)
1521 {
1522 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1523 "Failed to get value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
1524 goto handle_failure;
1525 }
1526
1527 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1528 + sizeof(tHalCfg) + tlvStruct->length) ;
1529
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301530/* QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT */
1531 tlvStruct->type = QWLAN_HAL_CFG_AP_LINK_MONITOR_TIMEOUT ;
1532 tlvStruct->length = sizeof(tANI_U32);
1533 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1534 if(wlan_cfgGetInt(pMac, WNI_CFG_AP_LINK_MONITOR_TIMEOUT,
1535 configDataValue ) != eSIR_SUCCESS)
1536 {
1537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1538 "Failed to get value for WNI_CFG_AP_LINK_MONITOR_TIMEOUT");
1539 goto handle_failure;
1540 }
1541
1542 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1543 + sizeof(tHalCfg) + tlvStruct->length) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301544#ifdef FEATURE_WLAN_TDLS
1545 /* QWLAN_HAL_CFG_TDLS_PUAPSD_MASK */
1546 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_MASK;
1547 tlvStruct->length = sizeof(tANI_U32);
1548 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1549 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK,
1550 configDataValue ) != eSIR_SUCCESS)
1551 {
1552 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1553 "Failed to get value for WNI_CFG_TDLS_QOS_WMM_UAPSD_MASK");
1554 goto handle_failure;
1555 }
1556 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1557 + sizeof(tHalCfg) + tlvStruct->length) ;
1558
1559 /* QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE */
1560 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_BUFFER_STA_CAPABLE;
1561 tlvStruct->length = sizeof(tANI_U32);
1562 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1563 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_BUF_STA_ENABLED,
1564 configDataValue ) != eSIR_SUCCESS)
1565 {
1566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1567 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1568 goto handle_failure;
1569 }
1570 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1571 + sizeof(tHalCfg) + tlvStruct->length) ;
1572 /* QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME */
1573 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_INACTIVITY_TIME;
1574 tlvStruct->length = sizeof(tANI_U32);
1575 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1576 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_PUAPSD_INACT_TIME,
1577 configDataValue ) != eSIR_SUCCESS)
1578 {
1579 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1580 "Failed to get value for WNI_CFG_TDLS_PUAPSD_INACT_TIME");
1581 goto handle_failure;
1582 }
1583 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1584 + sizeof(tHalCfg) + tlvStruct->length) ;
1585 /* QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP */
1586 tlvStruct->type = QWLAN_HAL_CFG_TDLS_PUAPSD_RX_FRAME_THRESHOLD_IN_SP;
1587 tlvStruct->length = sizeof(tANI_U32);
1588 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1589 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_RX_FRAME_THRESHOLD,
1590 configDataValue ) != eSIR_SUCCESS)
1591 {
1592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1593 "Failed to get value for WNI_CFG_TDLS_RX_FRAME_THRESHOLD");
1594 goto handle_failure;
1595 }
1596 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1597 + sizeof(tHalCfg) + tlvStruct->length) ;
Naresh Jayaramf73f3762014-02-04 16:13:20 +05301598 /* QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE */
1599 tlvStruct->type = QWLAN_HAL_CFG_TDLS_OFF_CHANNEL_CAPABLE;
1600 tlvStruct->length = sizeof(tANI_U32);
1601 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1602 if(wlan_cfgGetInt(pMac, WNI_CFG_TDLS_OFF_CHANNEL_ENABLED,
1603 configDataValue ) != eSIR_SUCCESS)
1604 {
1605 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1606 "Failed to get value for WNI_CFG_TDLS_BUF_STA_ENABLED");
1607 goto handle_failure;
1608 }
1609 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1610 + sizeof(tHalCfg) + tlvStruct->length) ;
1611
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05301612#endif
Sejal Chauhanbcde8bc2013-03-04 18:06:36 +05301613
Sudhir Sattayappa Kohallida1be202013-07-11 12:04:30 -07001614 /* QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN */
1615 tlvStruct->type = QWLAN_HAL_CFG_ENABLE_ADAPTIVE_RX_DRAIN_FEATURE ;
1616 tlvStruct->length = sizeof(tANI_U32);
1617 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1618 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_ADAPT_RX_DRAIN,
1619 configDataValue ) != eSIR_SUCCESS)
1620 {
1621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1622 "Failed to get value for WNI_CFG_ENABLE_ADAPT_RX_DRAIN");
1623 goto handle_failure;
1624 }
1625
1626 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1627 + sizeof(tHalCfg) + tlvStruct->length) ;
Yue Ma0fd23872013-08-01 15:56:47 -07001628
1629 /* QWLAN_HAL_CFG_FLEX_CONNECT_POWER_FACTOR */
1630 tlvStruct->type = QWLAN_HAL_CFG_FLEXCONNECT_POWER_FACTOR;
1631 tlvStruct->length = sizeof(tANI_U32);
1632 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1633 if(wlan_cfgGetInt(pMac, WNI_CFG_FLEX_CONNECT_POWER_FACTOR, configDataValue)
1634 != eSIR_SUCCESS)
1635 {
1636 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1637 "Failed to get value for WNI_CFG_FLEX_CONNECT_POWER_FACTOR");
1638 goto handle_failure;
1639 }
1640 tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
1641 + sizeof(tHalCfg) + tlvStruct->length));
1642
Madan Mohan Koyyalamudica454572013-08-07 19:57:03 +05301643 /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
1644 tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
1645 tlvStruct->length = sizeof(tANI_U32);
1646 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1647 if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
1648 configDataValue ) != eSIR_SUCCESS)
1649 {
1650 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1651 "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
1652 goto handle_failure;
1653 }
1654
1655 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1656 + sizeof(tHalCfg) + tlvStruct->length) ;
1657
Madan Mohan Koyyalamudi2558bc92013-08-24 16:54:31 +05301658 /* QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT */
1659 tlvStruct->type = QWLAN_HAL_CFG_GO_LINK_MONITOR_TIMEOUT ;
1660 tlvStruct->length = sizeof(tANI_U32);
1661 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1662 if(wlan_cfgGetInt(pMac, WNI_CFG_GO_LINK_MONITOR_TIMEOUT,
1663 configDataValue ) != eSIR_SUCCESS)
1664 {
1665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1666 "Failed to get value for WNI_CFG_GO_LINK_MONITOR_TIMEOUT");
1667 goto handle_failure;
1668 }
1669 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1670 + sizeof(tHalCfg) + tlvStruct->length) ;
1671
Kiet Lam4bbd3cb2013-11-07 20:03:49 +05301672 /* QWLAN_HAL_CFG_ATH_DISABLE */
1673 tlvStruct->type = QWLAN_HAL_CFG_ATH_DISABLE ;
1674 tlvStruct->length = sizeof(tANI_U32);
1675 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1676 if(wlan_cfgGetInt(pMac, WNI_CFG_ATH_DISABLE,
1677 configDataValue ) != eSIR_SUCCESS)
1678 {
1679 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1680 "Failed to get value for WNI_CFG_ATH_DISABLE");
1681 goto handle_failure;
1682 }
1683 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1684 + sizeof(tHalCfg) + tlvStruct->length) ;
1685
c_hpothu6d7dc922013-12-02 12:36:41 +05301686 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_WLAN_LEN */
1687 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1688 tlvStruct->length = sizeof(tANI_U32);
1689 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1690 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_WLAN_LEN,
1691 configDataValue ) != eSIR_SUCCESS)
1692 {
1693 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1694 "Failed to get value for WNI_CFG_BTC_ACTIVE_WLAN_LEN");
1695 goto handle_failure;
1696 }
1697 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1698 + sizeof(tHalCfg) + tlvStruct->length) ;
1699
1700 /* QWLAN_HAL_CFG_BTC_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1701 tlvStruct->type = QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1702 tlvStruct->length = sizeof(tANI_U32);
1703 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1704 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_ACTIVE_BT_LEN,
1705 configDataValue ) != eSIR_SUCCESS)
1706 {
1707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1708 "Failed to get value for WNI_CFG_BTC_ACTIVE_BT_LEN");
1709 goto handle_failure;
1710 }
1711 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1712 + sizeof(tHalCfg) + tlvStruct->length) ;
1713
1714 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN */
1715 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN ;
1716 tlvStruct->length = sizeof(tANI_U32);
1717 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1718 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN,
1719 configDataValue ) != eSIR_SUCCESS)
1720 {
1721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1722 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN");
1723 goto handle_failure;
1724 }
1725 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1726 + sizeof(tHalCfg) + tlvStruct->length) ;
1727
1728 /* QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_BTC_ACTIVE_BT_LEN */
1729 tlvStruct->type = QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN ;
1730 tlvStruct->length = sizeof(tANI_U32);
1731 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1732 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_SAP_ACTIVE_BT_LEN,
1733 configDataValue ) != eSIR_SUCCESS)
1734 {
1735 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1736 "Failed to get value for WNI_CFG_BTC_SAP_ACTIVE_BT_LEN");
1737 goto handle_failure;
1738 }
1739 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1740 + sizeof(tHalCfg) + tlvStruct->length) ;
1741
AnjaneeDevi Kapparapu50239e32014-01-07 18:09:33 +05301742 /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
1743 tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL ;
1744 tlvStruct->length = sizeof(tANI_U32);
1745 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1746 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
1747 configDataValue ) != eSIR_SUCCESS)
1748 {
1749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1750 "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
1751 goto handle_failure;
1752 }
1753 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1754 + sizeof(tHalCfg) + tlvStruct->length) ;
1755
1756 /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
1757 tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD ;
1758 tlvStruct->length = sizeof(tANI_U32);
1759 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1760 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
1761 configDataValue ) != eSIR_SUCCESS)
1762 {
1763 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1764 "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
1765 goto handle_failure;
1766 }
1767 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1768 + sizeof(tHalCfg) + tlvStruct->length) ;
1769
1770 /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
1771 tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
1772 tlvStruct->length = sizeof(tANI_U32);
1773 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1774 if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
1775 configDataValue ) != eSIR_SUCCESS)
1776 {
1777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1778 "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
1779 goto handle_failure;
1780 }
1781 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1782 + sizeof(tHalCfg) + tlvStruct->length) ;
1783
Leela Venkata Kiran Kumar Reddy Chirala22c159b2013-12-23 18:19:13 -08001784 /* QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO */
1785 tlvStruct->type = QWLAN_HAL_CFG_BTC_CTS2S_ON_STA_DURING_SCO ;
1786 tlvStruct->length = sizeof(tANI_U32);
1787 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1788 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CTS2S_DURING_SCO,
1789 configDataValue ) != eSIR_SUCCESS)
1790 {
1791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1792 "Failed to get value for WNI_CFG_BTC_CTS2S_DURING_SCO");
1793 goto handle_failure;
1794 }
1795 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1796 + sizeof(tHalCfg) + tlvStruct->length) ;
1797
c_hpothu5bd1ae42014-03-07 20:28:22 +05301798 /* QWLAN_HAL_CFG_RA_FILTER_ENABLE */
1799 tlvStruct->type = QWLAN_HAL_CFG_RA_FILTER_ENABLE ;
1800 tlvStruct->length = sizeof(tANI_U32);
1801 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1802
1803 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_FILTER_ENABLE,
1804 configDataValue ) != eSIR_SUCCESS)
1805 {
1806 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1807 "Failed to get value for WNI_CFG_RA_FILTER_ENABLE");
1808 goto handle_failure;
1809 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301810 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1811 + sizeof(tHalCfg) + tlvStruct->length) ;
1812
1813 /* QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL */
1814 tlvStruct->type = QWLAN_HAL_CFG_RA_RATE_LIMIT_INTERVAL ;
1815 tlvStruct->length = sizeof(tANI_U32);
1816 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1817
1818 if (wlan_cfgGetInt(pMac, WNI_CFG_RA_RATE_LIMIT_INTERVAL,
1819 configDataValue ) != eSIR_SUCCESS)
1820 {
1821 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1822 "Failed to get value for WNI_CFG_RA_RATE_LIMIT_INTERVAL");
1823 goto handle_failure;
1824 }
c_hpothu2d0f1c42014-04-01 18:38:51 +05301825 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1826 + sizeof(tHalCfg) + tlvStruct->length) ;
c_hpothu5bd1ae42014-03-07 20:28:22 +05301827
c_hpothu2d0f1c42014-04-01 18:38:51 +05301828 /* QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE */
1829 tlvStruct->type = QWLAN_HAL_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE ;
1830 tlvStruct->length = sizeof(tANI_U32);
1831 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1832
1833 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE,
1834 configDataValue ) != eSIR_SUCCESS)
1835 {
1836 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1837 "Failed to get value for WNI_CFG_BTC_FATAL_HID_NSNIFF_BLK_GUIDANCE");
1838 goto handle_failure;
1839 }
1840 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1841 + sizeof(tHalCfg) + tlvStruct->length) ;
1842
1843 /* QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE */
1844 tlvStruct->type = QWLAN_HAL_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE ;
1845 tlvStruct->length = sizeof(tANI_U32);
1846 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1847
1848 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE,
1849 configDataValue ) != eSIR_SUCCESS)
1850 {
1851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1852 "Failed to get value for WNI_CFG_BTC_CRITICAL_HID_NSNIFF_BLK_GUIDANCE");
1853 goto handle_failure;
1854 }
1855 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1856 + sizeof(tHalCfg) + tlvStruct->length) ;
1857
1858 /* QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD */
1859 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD ;
1860 tlvStruct->length = sizeof(tANI_U32);
1861 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1862
1863 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD,
1864 configDataValue ) != eSIR_SUCCESS)
1865 {
1866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1867 "Failed to get value for WNI_CFG_BTC_DYN_A2DP_TX_QUEUE_THOLD");
1868 goto handle_failure;
1869 }
1870 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1871 + sizeof(tHalCfg) + tlvStruct->length) ;
1872
1873 /* QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD */
1874 tlvStruct->type = QWLAN_HAL_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD ;
1875 tlvStruct->length = sizeof(tANI_U32);
1876 configDataValue = (tANI_U32 *)(tlvStruct + 1);
1877
1878 if (wlan_cfgGetInt(pMac, WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD,
1879 configDataValue ) != eSIR_SUCCESS)
1880 {
1881 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1882 "Failed to get value for WNI_CFG_BTC_DYN_OPP_TX_QUEUE_THOLD");
1883 goto handle_failure;
1884 }
c_hpothu5bd1ae42014-03-07 20:28:22 +05301885 tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
1886 + sizeof(tHalCfg) + tlvStruct->length) ;
1887
Jeff Johnson295189b2012-06-20 16:38:30 -07001888 wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001889#ifdef WLAN_DEBUG
1890 {
1891 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07001892 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1893 "****** Dumping CFG TLV ***** ");
1894 for (i=0; (i+7) < wdiStartParams->usConfigBufferLen; i+=8)
1895 {
1896 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1897 "%02x %02x %02x %02x %02x %02x %02x %02x",
1898 tlvStructStart[i],
1899 tlvStructStart[i+1],
1900 tlvStructStart[i+2],
1901 tlvStructStart[i+3],
1902 tlvStructStart[i+4],
1903 tlvStructStart[i+5],
1904 tlvStructStart[i+6],
1905 tlvStructStart[i+7]);
1906 }
1907 /* Dump the bytes in the last line*/
1908 for (; i < wdiStartParams->usConfigBufferLen; i++)
1909 {
1910 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1911 "%02x ",tlvStructStart[i]);
1912 }
1913 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
1914 "**************************** ");
1915 }
1916#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07001917 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07001918handle_failure:
1919 vos_mem_free(configParam);
1920 return VOS_STATUS_E_FAILURE;
1921}
Jeff Johnson295189b2012-06-20 16:38:30 -07001922/*
1923 * FUNCTION: WDA_wdiCompleteCB
1924 * call the voss call back function
1925 */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001926void WDA_stopCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07001927{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001928 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
1929 tWDA_CbContext *wdaContext;
1930
1931 if(NULL == pWdaParams)
1932 {
1933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001934 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001935 VOS_ASSERT(0) ;
1936 return ;
1937 }
1938
1939 wdaContext = (tWDA_CbContext *)pWdaParams->pWdaContext;
1940
Jeff Johnson295189b2012-06-20 16:38:30 -07001941 if (NULL == wdaContext)
1942 {
1943 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001944 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001945 return ;
1946 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001947
Jeff Johnson295189b2012-06-20 16:38:30 -07001948 /* free the config structure */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001949 if(pWdaParams->wdaWdiApiMsgParam != NULL)
Jeff Johnson295189b2012-06-20 16:38:30 -07001950 {
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001951 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07001952 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001953 vos_mem_free(pWdaParams);
1954
Jeff Johnson295189b2012-06-20 16:38:30 -07001955 if(WDI_STATUS_SUCCESS != status)
1956 {
1957 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
1958 "WDI stop callback returned failure" );
1959 VOS_ASSERT(0) ;
1960 }
1961 else
1962 {
1963 wdaContext->wdaState = WDA_STOP_STATE;
1964 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001965
Leo Chang9d76f622013-08-23 16:34:52 -07001966 /* FTM Driver stop procedure should be synced.
1967 * Stop and Close will happen on same context */
1968 if (eDRIVER_TYPE_MFG == wdaContext->driverMode)
1969 {
1970 if (VOS_STATUS_SUCCESS != vos_event_set(&wdaContext->ftmStopDoneEvent))
1971 {
1972 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
1973 "%s: FTM Stop Event Set Fail", __func__);
1974 VOS_ASSERT(0);
1975 }
1976 }
1977
Jeff Johnson295189b2012-06-20 16:38:30 -07001978 /* Indicate VOSS about the start complete */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001979 vos_WDAComplete_cback(wdaContext->pVosContext);
1980
Jeff Johnson295189b2012-06-20 16:38:30 -07001981 return ;
1982}
Jeff Johnson295189b2012-06-20 16:38:30 -07001983/*
1984 * FUNCTION: WDA_stop
1985 * call WDI_stop
1986 */
Jeff Johnson295189b2012-06-20 16:38:30 -07001987VOS_STATUS WDA_stop(v_PVOID_t pVosContext, tANI_U8 reason)
1988{
1989 WDI_Status wdiStatus;
1990 VOS_STATUS status = VOS_STATUS_SUCCESS;
1991 WDI_StopReqParamsType *wdiStopReq;
1992 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07001993 tWDA_ReqParams *pWdaParams ;
1994
Jeff Johnson295189b2012-06-20 16:38:30 -07001995 if (NULL == pWDA)
1996 {
1997 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07001998 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07001999 VOS_ASSERT(0);
2000 return VOS_STATUS_E_FAILURE;
2001 }
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002002 if (pWDA->wdiFailed == true)
2003 {
2004 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002005 "%s: WDI in failed state", __func__ );
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -07002006 return VOS_STATUS_E_ALREADY;
2007 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002008
Jeff Johnson295189b2012-06-20 16:38:30 -07002009 /* FTM mode stay START_STATE */
2010 if( (WDA_READY_STATE != pWDA->wdaState) &&
2011 (WDA_INIT_STATE != pWDA->wdaState) &&
2012 (WDA_START_STATE != pWDA->wdaState) )
2013 {
2014 VOS_ASSERT(0);
2015 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002016 wdiStopReq = (WDI_StopReqParamsType *)
2017 vos_mem_malloc(sizeof(WDI_StopReqParamsType));
2018 if(NULL == wdiStopReq)
2019 {
2020 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002021 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002022 VOS_ASSERT(0);
2023 return VOS_STATUS_E_NOMEM;
2024 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002025
Jeff Johnson295189b2012-06-20 16:38:30 -07002026 wdiStopReq->wdiStopReason = reason;
2027 wdiStopReq->wdiReqStatusCB = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002028
2029 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2030 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07002031 {
2032 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002033 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002034 VOS_ASSERT(0);
2035 vos_mem_free(wdiStopReq);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002036 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07002037 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002038
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002039 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
2040 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -07002041 {
2042 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002043 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002044 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -08002045
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002046 pWdaParams->wdaWdiApiMsgParam = (v_PVOID_t *)wdiStopReq;
2047 pWdaParams->wdaMsgParam = NULL;
2048 pWdaParams->pWdaContext = pWDA;
2049
Jeff Johnson295189b2012-06-20 16:38:30 -07002050 /* call WDI stop */
2051 wdiStatus = WDI_Stop(wdiStopReq,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002052 (WDI_StopRspCb)WDA_stopCallback, pWdaParams);
2053
Jeff Johnson295189b2012-06-20 16:38:30 -07002054 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
2055 {
2056 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2057 "error in WDA Stop" );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07002058 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2059 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002060 status = VOS_STATUS_E_FAILURE;
2061 }
Leo Chang9d76f622013-08-23 16:34:52 -07002062
2063 /* FTM Driver stop procedure should be synced.
2064 * Stop and Close will happen on same context */
2065 if (eDRIVER_TYPE_MFG == pWDA->driverMode)
2066 {
2067 status = vos_wait_single_event(&pWDA->ftmStopDoneEvent,
2068 WDI_RESPONSE_TIMEOUT);
2069 if (status != VOS_STATUS_SUCCESS)
2070 {
2071 VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
2072 "%s: FTM Stop Timepoout", __func__);
2073 VOS_ASSERT(0);
2074 vos_event_reset(&pWDA->ftmStopDoneEvent);
2075 }
2076 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002077 return status;
2078}
Jeff Johnson295189b2012-06-20 16:38:30 -07002079/*
2080 * FUNCTION: WDA_close
2081 * call WDI_close and free the WDA context
2082 */
2083VOS_STATUS WDA_close(v_PVOID_t pVosContext)
2084{
Jeff Johnson43971f52012-07-17 12:26:56 -07002085 VOS_STATUS status = VOS_STATUS_SUCCESS;
2086 WDI_Status wstatus;
2087 VOS_STATUS vstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07002088 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002089 if (NULL == wdaContext)
2090 {
2091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002092 "%s: Invoked with invalid wdaContext", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002093 return VOS_STATUS_E_FAILURE;
2094 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002095 if((WDA_INIT_STATE != wdaContext->wdaState) &&
2096 (WDA_STOP_STATE != wdaContext->wdaState))
2097 {
2098 VOS_ASSERT(0);
2099 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002100 /*call WDI close*/
Jeff Johnson43971f52012-07-17 12:26:56 -07002101 wstatus = WDI_Close();
2102 if ( wstatus != WDI_STATUS_SUCCESS )
Jeff Johnson295189b2012-06-20 16:38:30 -07002103 {
2104 status = VOS_STATUS_E_FAILURE;
2105 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002106 wdaContext->wdaState = WDA_CLOSE_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002107 /* Destroy the events */
Jeff Johnson43971f52012-07-17 12:26:56 -07002108 vstatus = vos_event_destroy(&wdaContext->wdaWdiEvent);
2109 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002110 {
2111 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002112 "WDI Sync Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002113 status = VOS_STATUS_E_FAILURE;
2114 }
2115
Jeff Johnson43971f52012-07-17 12:26:56 -07002116 vstatus = vos_event_destroy(&wdaContext->txFrameEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002117 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002118 {
2119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002120 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002121 status = VOS_STATUS_E_FAILURE;
2122 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002123 vstatus = vos_event_destroy(&wdaContext->suspendDataTxEvent);
Jeff Johnsone7245742012-09-05 17:12:55 -07002124 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002125 {
2126 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002127 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002128 status = VOS_STATUS_E_FAILURE;
2129 }
Jeff Johnson43971f52012-07-17 12:26:56 -07002130 vstatus = vos_event_destroy(&wdaContext->waitOnWdiIndicationCallBack);
Jeff Johnsone7245742012-09-05 17:12:55 -07002131 if(!VOS_IS_STATUS_SUCCESS(vstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07002132 {
2133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002134 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002135 status = VOS_STATUS_E_FAILURE;
2136 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002137 /* free WDA context */
Jeff Johnson43971f52012-07-17 12:26:56 -07002138 vstatus = vos_free_context(pVosContext, VOS_MODULE_ID_WDA, wdaContext);
Jeff Johnsone7245742012-09-05 17:12:55 -07002139 if ( !VOS_IS_STATUS_SUCCESS(vstatus) )
Jeff Johnson295189b2012-06-20 16:38:30 -07002140 {
2141 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2142 "error in WDA close " );
2143 status = VOS_STATUS_E_FAILURE;
2144 }
2145 return status;
2146}
Jeff Johnson295189b2012-06-20 16:38:30 -07002147/*
2148 * FUNCTION: WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual
2149 * returns 1 if the compiled version is greater than or equal to the input version
2150 */
2151
2152uint8 WDA_IsWcnssWlanCompiledVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2153{
2154 VOS_STATUS status = VOS_STATUS_SUCCESS;
2155 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2156 tSirVersionType compiledVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002157 status = WDA_GetWcnssWlanCompiledVersion(vosContext, &compiledVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002158 if ((compiledVersion.major > major) || ((compiledVersion.major == major)&& (compiledVersion.minor > minor)) ||
2159 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version > version)) ||
2160 ((compiledVersion.major == major)&& (compiledVersion.minor == minor) &&(compiledVersion.version == version) &&
2161 (compiledVersion.revision >= revision)))
2162 return 1;
2163 else
2164 return 0;
2165}
Jeff Johnson295189b2012-06-20 16:38:30 -07002166/*
2167 * FUNCTION: WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual
2168 * returns 1 if the compiled version is greater than or equal to the input version
2169 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002170uint8 WDA_IsWcnssWlanReportedVersionGreaterThanOrEqual(uint8 major, uint8 minor, uint8 version, uint8 revision)
2171{
2172 VOS_STATUS status = VOS_STATUS_SUCCESS;
2173 v_CONTEXT_t vosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
2174 tSirVersionType reportedVersion;
Jeff Johnson295189b2012-06-20 16:38:30 -07002175 status = WDA_GetWcnssWlanReportedVersion(vosContext, &reportedVersion);
Jeff Johnson295189b2012-06-20 16:38:30 -07002176 if ((reportedVersion.major > major) || ((reportedVersion.major == major)&& (reportedVersion.minor > minor)) ||
2177 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version > version)) ||
2178 ((reportedVersion.major == major)&& (reportedVersion.minor == minor) &&(reportedVersion.version == version) &&
2179 (reportedVersion.revision >= revision)))
2180 return 1;
2181 else
2182 return 0;
2183}
Jeff Johnson295189b2012-06-20 16:38:30 -07002184/*
2185 * FUNCTION: WDA_GetWcnssWlanCompiledVersion
2186 * Returns the version of the WCNSS WLAN API with which the HOST
2187 * device driver was compiled
2188 */
2189VOS_STATUS WDA_GetWcnssWlanCompiledVersion(v_PVOID_t pvosGCtx,
2190 tSirVersionType *pVersion)
2191{
2192 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002193 if ((NULL == pvosGCtx) || (NULL == pVersion))
2194 {
2195 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002196 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002197 VOS_ASSERT(0);
2198 return VOS_STATUS_E_FAILURE;
2199 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002200 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2201 if (NULL == pWDA )
2202 {
2203 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002204 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002205 VOS_ASSERT(0);
2206 return VOS_STATUS_E_FAILURE;
2207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002208 *pVersion = pWDA->wcnssWlanCompiledVersion;
2209 return VOS_STATUS_SUCCESS;
2210}
Jeff Johnson295189b2012-06-20 16:38:30 -07002211/*
2212 * FUNCTION: WDA_GetWcnssWlanReportedVersion
2213 * Returns the version of the WCNSS WLAN API with which the WCNSS
2214 * device driver was compiled
2215 */
2216VOS_STATUS WDA_GetWcnssWlanReportedVersion(v_PVOID_t pvosGCtx,
2217 tSirVersionType *pVersion)
2218{
2219 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002220 if ((NULL == pvosGCtx) || (NULL == pVersion))
2221 {
2222 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002223 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002224 VOS_ASSERT(0);
2225 return VOS_STATUS_E_FAILURE;
2226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002227 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2228 if (NULL == pWDA )
2229 {
2230 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002231 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002232 VOS_ASSERT(0);
2233 return VOS_STATUS_E_FAILURE;
2234 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002235 *pVersion = pWDA->wcnssWlanReportedVersion;
2236 return VOS_STATUS_SUCCESS;
2237}
Jeff Johnson295189b2012-06-20 16:38:30 -07002238/*
2239 * FUNCTION: WDA_GetWcnssSoftwareVersion
2240 * Returns the WCNSS Software version string
2241 */
2242VOS_STATUS WDA_GetWcnssSoftwareVersion(v_PVOID_t pvosGCtx,
2243 tANI_U8 *pVersion,
2244 tANI_U32 versionBufferSize)
2245{
2246 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002247 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002248 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002249 if ((NULL == pvosGCtx) || (NULL == pVersion))
2250 {
2251 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002252 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002253 VOS_ASSERT(0);
2254 return VOS_STATUS_E_FAILURE;
2255 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002256 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2257 if (NULL == pWDA )
2258 {
2259 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002260 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002261 VOS_ASSERT(0);
2262 return VOS_STATUS_E_FAILURE;
2263 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002264 wpalMemoryCopy(pVersion, pWDA->wcnssSoftwareVersionString, versionBufferSize);
2265 return VOS_STATUS_SUCCESS;
2266}
Jeff Johnson295189b2012-06-20 16:38:30 -07002267/*
2268 * FUNCTION: WDA_GetWcnssHardwareVersion
2269 * Returns the WCNSS Hardware version string
2270 */
2271VOS_STATUS WDA_GetWcnssHardwareVersion(v_PVOID_t pvosGCtx,
2272 tANI_U8 *pVersion,
2273 tANI_U32 versionBufferSize)
2274{
2275 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07002276 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002277 "%s: Entered", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002278 if ((NULL == pvosGCtx) || (NULL == pVersion))
2279 {
2280 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002281 "%s: Invoked with invalid parameter", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002282 VOS_ASSERT(0);
2283 return VOS_STATUS_E_FAILURE;
2284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002285 pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
2286 if (NULL == pWDA )
2287 {
2288 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002289 "%s: Invalid WDA context", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002290 VOS_ASSERT(0);
2291 return VOS_STATUS_E_FAILURE;
2292 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002293 wpalMemoryCopy(pVersion, pWDA->wcnssHardwareVersionString, versionBufferSize);
2294 return VOS_STATUS_SUCCESS;
2295}
Jeff Johnson295189b2012-06-20 16:38:30 -07002296/*
2297 * FUNCTION: WDA_WniCfgDnld
2298 * Trigger CFG Download
2299 */
2300VOS_STATUS WDA_WniCfgDnld(tWDA_CbContext *pWDA)
2301{
2302 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07002303 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002304 v_VOID_t *pFileImage = NULL;
2305 v_SIZE_t cbFileImageSize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002306 v_VOID_t *pCfgBinary = NULL;
2307 v_SIZE_t cbCfgBinarySize = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002308 v_BOOL_t bStatus = VOS_FALSE;
Jeff Johnsonab81a082013-04-03 16:00:31 -07002309
Jeff Johnson295189b2012-06-20 16:38:30 -07002310 if (NULL == pMac )
2311 {
2312 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002313 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002314 VOS_ASSERT(0);
2315 return VOS_STATUS_E_FAILURE;
2316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002317 /* get the number of bytes in the CFG Binary... */
2318 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, NULL,
2319 &cbFileImageSize );
2320 if ( VOS_STATUS_E_NOMEM != vosStatus )
2321 {
2322 VOS_TRACE( VOS_MODULE_ID_SYS, VOS_TRACE_LEVEL_ERROR,
2323 "Error obtaining binary size" );
2324 goto fail;
2325 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002326 // malloc a buffer to read in the Configuration binary file.
2327 pFileImage = vos_mem_malloc( cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002328 if ( NULL == pFileImage )
2329 {
2330 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2331 "Unable to allocate memory for the CFG binary [size= %d bytes]",
2332 cbFileImageSize );
Jeff Johnson295189b2012-06-20 16:38:30 -07002333 vosStatus = VOS_STATUS_E_NOMEM;
2334 goto fail;
2335 }
2336
2337 /* Get the entire CFG file image... */
2338 vosStatus = vos_get_binary_blob( VOS_BINARY_ID_CONFIG, pFileImage,
2339 &cbFileImageSize );
2340 if ( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
2341 {
2342 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2343 "Error: Cannot retrieve CFG file image from vOSS. [size= %d bytes]",
2344 cbFileImageSize );
2345 goto fail;
2346 }
2347
2348 /*
2349 * Validate the binary image. This function will return a pointer
2350 * and length where the CFG binary is located within the binary image file.
2351 */
2352 bStatus = sys_validateStaConfig( pFileImage, cbFileImageSize,
2353 &pCfgBinary, &cbCfgBinarySize );
2354 if ( VOS_FALSE == bStatus )
2355 {
2356 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2357 "Error: Cannot find STA CFG in binary image file" );
2358 vosStatus = VOS_STATUS_E_FAILURE;
2359 goto fail;
2360 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002361 /*
2362 * TODO: call the config download function
2363 * for now calling the existing cfg download API
2364 */
2365 processCfgDownloadReq(pMac,cbCfgBinarySize,pCfgBinary);
Jeff Johnsonab81a082013-04-03 16:00:31 -07002366 vosStatus = VOS_STATUS_SUCCESS;
2367
2368 /* fall through to clean up and return success */
Jeff Johnson295189b2012-06-20 16:38:30 -07002369
2370fail:
Jeff Johnsonab81a082013-04-03 16:00:31 -07002371 vos_mem_free( pFileImage );
Jeff Johnson295189b2012-06-20 16:38:30 -07002372 return vosStatus;
2373}
Jeff Johnson295189b2012-06-20 16:38:30 -07002374/* -----------------------------------------------------------------
2375 * WDI interface
2376 * -----------------------------------------------------------------
2377 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002378/*
2379 * FUNCTION: WDA_suspendDataTxCallback
2380 * call back function called from TL after suspend Transmission
2381 */
2382VOS_STATUS WDA_SuspendDataTxCallback( v_PVOID_t pvosGCtx,
2383 v_U8_t* ucSTAId,
2384 VOS_STATUS vosStatus)
2385{
2386 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pvosGCtx);
Jeff Johnson295189b2012-06-20 16:38:30 -07002387 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002388 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002389 if (NULL == pWDA )
2390 {
2391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002392 "%s: Invoked with invalid WDA context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002393 VOS_ASSERT(0);
2394 return VOS_STATUS_E_FAILURE;
2395 }
2396 if(VOS_IS_STATUS_SUCCESS(vosStatus))
2397 {
2398 pWDA->txStatus = WDA_TL_TX_SUSPEND_SUCCESS;
2399 }
2400 else
2401 {
2402 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
2403 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002404 /* Trigger the event to bring the WDA TL suspend function to come
2405 * out of wait*/
2406 vosStatus = vos_event_set(&pWDA->suspendDataTxEvent);
2407 if(!VOS_IS_STATUS_SUCCESS(vosStatus))
2408 {
2409 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002410 "NEW VOS Event Set failed - status = %d", vosStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07002411 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002412 /* If TL suspended had timedout before this callback was called, resume back
2413 * TL.*/
2414 if (pWDA->txSuspendTimedOut)
2415 {
2416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002417 "Late TLSuspendCallback, resuming TL back again");
Jeff Johnson295189b2012-06-20 16:38:30 -07002418 WDA_ResumeDataTx(pWDA);
2419 pWDA->txSuspendTimedOut = FALSE;
2420 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002421 return VOS_STATUS_SUCCESS;
2422}
Jeff Johnson295189b2012-06-20 16:38:30 -07002423/*
2424 * FUNCTION: WDA_suspendDataTx
2425 * Update TL to suspend the data Transmission
2426 */
2427VOS_STATUS WDA_SuspendDataTx(tWDA_CbContext *pWDA)
2428{
2429 VOS_STATUS status = VOS_STATUS_E_FAILURE;
2430 tANI_U8 eventIdx = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07002431
2432 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002433 "%s: Entered " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002434 pWDA->txStatus = WDA_TL_TX_SUSPEND_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -07002435 if (pWDA->txSuspendTimedOut)
2436 {
2437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002438 "TL suspend timedout previously, CB not called yet");
Jeff Johnson295189b2012-06-20 16:38:30 -07002439 return status;
2440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002441 /* Reset the event to be not signalled */
2442 status = vos_event_reset(&pWDA->suspendDataTxEvent);
2443 if(!VOS_IS_STATUS_SUCCESS(status))
2444 {
2445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08002446 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002447 return VOS_STATUS_E_FAILURE;
2448 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002449 /*Indicate TL to suspend transmission for all Sta Id */
Hoonki Lee14621352013-04-16 17:51:19 -07002450 status = WLANTL_SuspendDataTx(pWDA->pVosContext, NULL,
Jeff Johnson295189b2012-06-20 16:38:30 -07002451 WDA_SuspendDataTxCallback);
2452 if(status != VOS_STATUS_SUCCESS)
2453 {
2454 return status;
2455 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002456 /* Wait for the event to be set by the TL, to get the response of
2457 * suspending the TX queues, this event should be set by the Callback
2458 * function called by TL*/
2459 status = vos_wait_events(&pWDA->suspendDataTxEvent, 1,
2460 WDA_TL_SUSPEND_TIMEOUT, &eventIdx);
2461 if(!VOS_IS_STATUS_SUCCESS(status))
2462 {
2463 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2464 "%s: Status %d when waiting for Suspend Data TX Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002465 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -07002466 /* Set this flag to true when TL suspend times out, so that when TL
2467 * suspend eventually happens and calls the callback, TL can be resumed
2468 * right away by looking at this flag when true.*/
2469 pWDA->txSuspendTimedOut = TRUE;
2470 }
2471 else
2472 {
2473 pWDA->txSuspendTimedOut = FALSE;
2474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002475 if(WDA_TL_TX_SUSPEND_SUCCESS == pWDA->txStatus)
2476 {
2477 status = VOS_STATUS_SUCCESS;
2478 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002479 return status;
2480}
Jeff Johnson295189b2012-06-20 16:38:30 -07002481/*
2482 * FUNCTION: WDA_resumeDataTx
2483 * Update TL to resume the data Transmission
2484 */
2485VOS_STATUS WDA_ResumeDataTx(tWDA_CbContext *pWDA)
2486{
2487 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07002488
2489 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002490 "%s: Entered " ,__func__);
Hoonki Lee14621352013-04-16 17:51:19 -07002491
2492 status = WLANTL_ResumeDataTx(pWDA->pVosContext, NULL);
Jeff Johnson295189b2012-06-20 16:38:30 -07002493 return status;
2494}
Jeff Johnson295189b2012-06-20 16:38:30 -07002495/*
2496 * FUNCTION: WDA_InitScanReqCallback
2497 * Trigger Init SCAN callback
2498 */
2499void WDA_InitScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2500{
2501 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2502 tWDA_CbContext *pWDA;
2503 tInitScanParams *pWDA_ScanParam ;
2504 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002505 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002506 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002507 if(NULL == pWdaParams)
2508 {
2509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002510 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002511 VOS_ASSERT(0) ;
2512 return ;
2513 }
2514 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2515 pWDA_ScanParam = (tInitScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002516 if(NULL == pWDA_ScanParam)
2517 {
2518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002519 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07002520 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002521 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2522 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002523 return ;
2524 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002525 if(WDI_STATUS_SUCCESS != wdiStatus)
2526 {
2527 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002528 if(VOS_STATUS_SUCCESS != status)
2529 {
2530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002531 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002532 }
2533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002534 /* free WDI command buffer */
2535 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07002536 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002537
Jeff Johnson295189b2012-06-20 16:38:30 -07002538
2539 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002540 /* without converting the Status to Failure or Success Just
2541 pass the same status to lim */
2542 pWDA_ScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002543 /* send SCAN RSP message back to PE */
2544 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002545 return ;
2546}
2547
2548/*
2549 * FUNCTION: WDA_ProcessInitScanReq
2550 * Trigger Init SCAN in DAL
2551 */
2552VOS_STATUS WDA_ProcessInitScanReq(tWDA_CbContext *pWDA,
2553 tInitScanParams *initScanParams)
2554{
2555 WDI_Status status = WDI_STATUS_SUCCESS ;
2556 WDI_InitScanReqParamsType *wdiInitScanParam =
2557 (WDI_InitScanReqParamsType *)vos_mem_malloc(
2558 sizeof(WDI_InitScanReqParamsType)) ;
2559 tWDA_ReqParams *pWdaParams;
2560 tANI_U8 i = 0;
2561
2562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002563 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002564 if(NULL == wdiInitScanParam)
2565 {
2566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002567 "%s:VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002568 VOS_ASSERT(0);
2569 return VOS_STATUS_E_NOMEM;
2570 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002571 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2572 if(NULL == pWdaParams)
2573 {
2574 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002575 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002576 VOS_ASSERT(0);
2577 vos_mem_free(wdiInitScanParam);
2578 return VOS_STATUS_E_NOMEM;
2579 }
2580
2581 /* Copy init Scan params to WDI structure */
2582 wdiInitScanParam->wdiReqInfo.wdiScanMode = initScanParams->scanMode ;
2583 vos_mem_copy(wdiInitScanParam->wdiReqInfo.macBSSID, initScanParams->bssid,
2584 sizeof(tSirMacAddr)) ;
2585 wdiInitScanParam->wdiReqInfo.bNotifyBSS = initScanParams->notifyBss ;
2586 wdiInitScanParam->wdiReqInfo.ucFrameType = initScanParams->frameType ;
2587 wdiInitScanParam->wdiReqInfo.ucFrameLength = initScanParams->frameLength ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002588 wdiInitScanParam->wdiReqInfo.bUseNOA = initScanParams->useNoA;
2589 wdiInitScanParam->wdiReqInfo.scanDuration = initScanParams->scanDuration;
Jeff Johnson295189b2012-06-20 16:38:30 -07002590 wdiInitScanParam->wdiReqInfo.wdiScanEntry.activeBSScnt =
2591 initScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002592 for (i=0; i < initScanParams->scanEntry.activeBSScnt; i++)
2593 {
2594 wdiInitScanParam->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2595 initScanParams->scanEntry.bssIdx[i] ;
2596 }
2597
2598 /* if Frame length, copy macMgmtHdr or WDI structure */
2599 if(0 != wdiInitScanParam->wdiReqInfo.ucFrameLength)
2600 {
2601 vos_mem_copy(&wdiInitScanParam->wdiReqInfo.wdiMACMgmtHdr,
2602 &initScanParams->macMgmtHdr, sizeof(tSirMacMgmtHdr)) ;
2603 }
2604 wdiInitScanParam->wdiReqStatusCB = NULL ;
2605
Jeff Johnson295189b2012-06-20 16:38:30 -07002606 /* Store Init Req pointer, as this will be used for response */
2607 pWdaParams->pWdaContext = pWDA;
2608 pWdaParams->wdaMsgParam = initScanParams;
2609 pWdaParams->wdaWdiApiMsgParam = wdiInitScanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002610 /* first try to suspend TX */
2611 status = WDA_SuspendDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002612 if(WDI_STATUS_SUCCESS != status)
2613 {
2614 goto handleWdiFailure;
2615 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002616 /* call DAL API to pass init scan request to DAL */
2617 status = WDI_InitScanReq(wdiInitScanParam,
2618 WDA_InitScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002619 if(IS_WDI_STATUS_FAILURE(status))
2620 {
2621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2622 "error in WDA Init Scan, Resume Tx " );
2623 status = WDA_ResumeDataTx(pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002624 VOS_ASSERT(0) ;
2625
2626 goto handleWdiFailure;
2627 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002628 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002629handleWdiFailure:
2630 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2631 "Failure in WDI Api, free all the memory " );
2632 /* free WDI command buffer */
2633 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2634 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002635 /* send Failure to PE */
2636 initScanParams->status = eSIR_FAILURE ;
2637 WDA_SendMsg(pWDA, WDA_INIT_SCAN_RSP, (void *)initScanParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002638 return CONVERT_WDI2VOS_STATUS(status) ;
2639}
2640
Jeff Johnson295189b2012-06-20 16:38:30 -07002641/*
2642 * FUNCTION: WDA_StartScanReqCallback
2643 * send Start SCAN RSP back to PE
2644 */
2645void WDA_StartScanReqCallback(WDI_StartScanRspParamsType *pScanRsp,
2646 void* pUserData)
2647{
2648 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2649 tWDA_CbContext *pWDA;
2650 tStartScanParams *pWDA_ScanParam;
2651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002652 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002653 if(NULL == pWdaParams)
2654 {
2655 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002656 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002657 VOS_ASSERT(0) ;
2658 return ;
2659 }
2660 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2661 pWDA_ScanParam = (tStartScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002662 if(NULL == pWDA_ScanParam)
2663 {
2664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002665 "%s: pWDA_ScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002666 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002667 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002668 return ;
2669 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002670 if(NULL == pWdaParams->wdaWdiApiMsgParam)
2671 {
2672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002673 "%s: wdaWdiApiMsgParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002674 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002675 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002676 return ;
2677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002678 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2679 vos_mem_free(pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002680
Jeff Johnson295189b2012-06-20 16:38:30 -07002681
2682 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002683 pWDA_ScanParam->status = pScanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002684 /* send SCAN RSP message back to PE */
2685 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)pWDA_ScanParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002686 return ;
2687}
2688
Jeff Johnson295189b2012-06-20 16:38:30 -07002689/*
2690 * FUNCTION: WDA_ProcessStartScanReq
2691 * Trigger start SCAN in WDI
2692 */
2693VOS_STATUS WDA_ProcessStartScanReq(tWDA_CbContext *pWDA,
2694 tStartScanParams *startScanParams)
2695{
2696 WDI_Status status = WDI_STATUS_SUCCESS;
2697 WDI_StartScanReqParamsType *wdiStartScanParams =
2698 (WDI_StartScanReqParamsType *)vos_mem_malloc(
2699 sizeof(WDI_StartScanReqParamsType)) ;
2700 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002701 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002702 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002703 if(NULL == wdiStartScanParams)
2704 {
2705 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002706 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002707 VOS_ASSERT(0);
2708 return VOS_STATUS_E_NOMEM;
2709 }
2710 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2711 if(NULL == pWdaParams)
2712 {
2713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002714 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002715 VOS_ASSERT(0);
2716 vos_mem_free(wdiStartScanParams);
2717 return VOS_STATUS_E_NOMEM;
2718 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002719 /* Copy init Scan params to WDI structure */
2720 wdiStartScanParams->ucChannel = startScanParams->scanChannel ;
2721 wdiStartScanParams->wdiReqStatusCB = NULL ;
2722
Jeff Johnson295189b2012-06-20 16:38:30 -07002723 /* Store Init Req pointer, as this will be used for response */
2724 /* store Params pass it to WDI */
2725 pWdaParams->pWdaContext = pWDA;
2726 pWdaParams->wdaMsgParam = startScanParams;
2727 pWdaParams->wdaWdiApiMsgParam = wdiStartScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002728 /* call DAL API to pass init scan request to DAL */
2729 status = WDI_StartScanReq(wdiStartScanParams,
2730 WDA_StartScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002731 /* failure returned by WDI API */
2732 if(IS_WDI_STATUS_FAILURE(status))
2733 {
2734 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2735 "Failure in Start Scan WDI API, free all the memory "
2736 "It should be due to previous abort scan." );
2737 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2738 vos_mem_free(pWdaParams) ;
2739 startScanParams->status = eSIR_FAILURE ;
2740 WDA_SendMsg(pWDA, WDA_START_SCAN_RSP, (void *)startScanParams, 0) ;
2741 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002742 return CONVERT_WDI2VOS_STATUS(status) ;
2743}
Jeff Johnson295189b2012-06-20 16:38:30 -07002744/*
2745 * FUNCTION: WDA_EndScanReqCallback
2746 * END SCAN callback
2747 */
2748void WDA_EndScanReqCallback(WDI_Status status, void* pUserData)
2749{
2750 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2751 tWDA_CbContext *pWDA;
2752 tEndScanParams *endScanParam;
2753 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002754 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002755 if(NULL == pWdaParams)
2756 {
2757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002758 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002759 VOS_ASSERT(0) ;
2760 return ;
2761 }
2762 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2763 endScanParam = (tEndScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002764 if(NULL == endScanParam)
2765 {
2766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002767 "%s: endScanParam received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002768 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002769 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2770 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002771 return ;
2772 }
2773
2774 /* Free WDI command buffer */
2775 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2776 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002777 /* assign status to scan params */
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002778 endScanParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002779 /* send response back to PE */
2780 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParam, 0) ;
2781 return ;
2782}
2783
Jeff Johnson295189b2012-06-20 16:38:30 -07002784/*
2785 * FUNCTION: WDA_ProcessEndScanReq
2786 * Trigger END SCAN in WDI
2787 */
2788VOS_STATUS WDA_ProcessEndScanReq(tWDA_CbContext *pWDA,
2789 tEndScanParams *endScanParams)
2790{
2791 WDI_Status status = WDI_STATUS_SUCCESS;
2792 WDI_EndScanReqParamsType *wdiEndScanParams =
2793 (WDI_EndScanReqParamsType *)vos_mem_malloc(
2794 sizeof(WDI_EndScanReqParamsType)) ;
2795 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002796 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002797 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002798 if(NULL == wdiEndScanParams)
2799 {
2800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002801 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002802 VOS_ASSERT(0);
2803 return VOS_STATUS_E_NOMEM;
2804 }
2805 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2806 if(NULL == pWdaParams)
2807 {
2808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002809 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002810 VOS_ASSERT(0);
2811 vos_mem_free(wdiEndScanParams);
2812 return VOS_STATUS_E_NOMEM;
2813 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002814 /* Copy init Scan params to WDI structure */
2815 wdiEndScanParams->ucChannel = endScanParams->scanChannel ;
2816 wdiEndScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002817 /* Store Init Req pointer, as this will be used for response */
2818 /* store Params pass it to WDI */
2819 pWdaParams->pWdaContext = pWDA;
2820 pWdaParams->wdaMsgParam = endScanParams;
2821 pWdaParams->wdaWdiApiMsgParam = wdiEndScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002822 /* call DAL API to pass init scan request to DAL */
2823 status = WDI_EndScanReq(wdiEndScanParams,
2824 WDA_EndScanReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002825 if(IS_WDI_STATUS_FAILURE(status))
2826 {
2827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2828 "Failure in End Scan WDI API, free all the memory "
2829 "It should be due to previous abort scan." );
2830 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2831 vos_mem_free(pWdaParams) ;
2832 endScanParams->status = eSIR_FAILURE ;
2833 WDA_SendMsg(pWDA, WDA_END_SCAN_RSP, (void *)endScanParams, 0) ;
2834 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002835 return CONVERT_WDI2VOS_STATUS(status) ;
2836}
Jeff Johnson295189b2012-06-20 16:38:30 -07002837/*
2838 * FUNCTION: WDA_FinishScanReqCallback
2839 * Trigger Finish SCAN callback
2840 */
2841void WDA_FinishScanReqCallback(WDI_Status wdiStatus, void* pUserData)
2842{
2843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2844 tWDA_CbContext *pWDA;
2845 tFinishScanParams *finishScanParam;
2846 VOS_STATUS status;
Jeff Johnson295189b2012-06-20 16:38:30 -07002847 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002848 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002849 if(NULL == pWdaParams)
2850 {
2851 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002852 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002853 VOS_ASSERT(0) ;
2854 return ;
2855 }
2856
2857 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2858 finishScanParam = (tFinishScanParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002859 if(NULL == finishScanParam)
2860 {
2861 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002862 "%s: finishScanParam is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002863 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07002864 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2865 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07002866 return ;
2867 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002870 /*
2871 * Now Resume TX, if we reached here means, TX is already suspended, we
2872 * have to resume it unconditionaly
2873 */
2874 status = WDA_ResumeDataTx(pWDA) ;
2875
2876 if(VOS_STATUS_SUCCESS != status)
2877 {
2878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002879 "%s error in Resume Tx ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07002880 }
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002881 finishScanParam->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002882 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParam, 0) ;
2883 return ;
2884}
Jeff Johnson295189b2012-06-20 16:38:30 -07002885/*
2886 * FUNCTION: WDA_ProcessFinshScanReq
2887 * Trigger Finish SCAN in WDI
2888 */
2889VOS_STATUS WDA_ProcessFinishScanReq(tWDA_CbContext *pWDA,
2890 tFinishScanParams *finishScanParams)
2891{
2892 WDI_Status status = WDI_STATUS_SUCCESS;
2893 WDI_FinishScanReqParamsType *wdiFinishScanParams =
2894 (WDI_FinishScanReqParamsType *)vos_mem_malloc(
2895 sizeof(WDI_FinishScanReqParamsType)) ;
2896 tWDA_ReqParams *pWdaParams ;
2897 tANI_U8 i = 0;
2898 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002899 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002900 if(NULL == wdiFinishScanParams)
2901 {
2902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002904 VOS_ASSERT(0);
2905 return VOS_STATUS_E_NOMEM;
2906 }
2907 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
2908 if(NULL == pWdaParams)
2909 {
2910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002911 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002912 VOS_ASSERT(0);
2913 vos_mem_free(wdiFinishScanParams);
2914 return VOS_STATUS_E_NOMEM;
2915 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002916 /* Copy init Scan params to WDI structure */
2917 wdiFinishScanParams->wdiReqInfo.wdiScanMode = finishScanParams->scanMode ;
2918 vos_mem_copy(wdiFinishScanParams->wdiReqInfo.macBSSID,
2919 finishScanParams->bssid, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002920 wdiFinishScanParams->wdiReqInfo.bNotifyBSS = finishScanParams->notifyBss ;
2921 wdiFinishScanParams->wdiReqInfo.ucFrameType = finishScanParams->frameType ;
2922 wdiFinishScanParams->wdiReqInfo.ucFrameLength =
2923 finishScanParams->frameLength ;
2924 wdiFinishScanParams->wdiReqInfo.ucCurrentOperatingChannel =
2925 finishScanParams->currentOperChannel ;
2926 wdiFinishScanParams->wdiReqInfo.wdiCBState = finishScanParams->cbState ;
2927 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.activeBSScnt =
2928 finishScanParams->scanEntry.activeBSScnt ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002929 for (i = 0; i < finishScanParams->scanEntry.activeBSScnt; i++)
2930 {
2931 wdiFinishScanParams->wdiReqInfo.wdiScanEntry.bssIdx[i] =
2932 finishScanParams->scanEntry.bssIdx[i] ;
2933 }
2934
2935
Jeff Johnson295189b2012-06-20 16:38:30 -07002936 /* if Frame length, copy macMgmtHdr ro WDI structure */
2937 if(0 != wdiFinishScanParams->wdiReqInfo.ucFrameLength)
2938 {
2939 vos_mem_copy(&wdiFinishScanParams->wdiReqInfo.wdiMACMgmtHdr,
2940 &finishScanParams->macMgmtHdr,
2941 sizeof(WDI_MacMgmtHdr)) ;
2942 }
2943 wdiFinishScanParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002944 /* Store Init Req pointer, as this will be used for response */
2945 /* store Params pass it to WDI */
2946 pWdaParams->pWdaContext = pWDA;
2947 pWdaParams->wdaMsgParam = finishScanParams;
2948 pWdaParams->wdaWdiApiMsgParam = wdiFinishScanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07002949 /* call DAL API to pass init scan request to DAL */
2950 status = WDI_FinishScanReq(wdiFinishScanParams,
2951 WDA_FinishScanReqCallback, pWdaParams) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07002952
Jeff Johnson295189b2012-06-20 16:38:30 -07002953
2954 /*
2955 * WDI API returns failure..
2956 */
2957 if(IS_WDI_STATUS_FAILURE( status))
2958 {
2959 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
2960 "Failure in Finish Scan WDI API, free all the memory " );
2961 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
2962 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002963 finishScanParams->status = eSIR_FAILURE ;
2964 WDA_SendMsg(pWDA, WDA_FINISH_SCAN_RSP, (void *)finishScanParams, 0) ;
2965 }
Jeff Johnson295189b2012-06-20 16:38:30 -07002966 return CONVERT_WDI2VOS_STATUS(status) ;
2967}
Jeff Johnson295189b2012-06-20 16:38:30 -07002968/*---------------------------------------------------------------------
2969 * ASSOC API's
2970 *---------------------------------------------------------------------
2971 */
Jeff Johnson295189b2012-06-20 16:38:30 -07002972/*
2973 * FUNCTION: WDA_JoinReqCallback
2974 * Trigger Init SCAN callback
2975 */
2976void WDA_JoinReqCallback(WDI_Status status, void* pUserData)
2977{
2978 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
2979 tWDA_CbContext *pWDA;
2980 tSwitchChannelParams *joinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002981 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002982 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002983 if(NULL == pWdaParams)
2984 {
2985 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07002986 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07002987 VOS_ASSERT(0) ;
2988 return ;
2989 }
2990 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
2991 joinReqParam = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07002992 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
2993 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002994 /* reset macBSSID */
2995 vos_mem_set(pWDA->macBSSID, sizeof(pWDA->macBSSID),0 );
Jeff Johnson295189b2012-06-20 16:38:30 -07002996 /* reset macSTASelf */
2997 vos_mem_set(pWDA->macSTASelf, sizeof(pWDA->macSTASelf),0 );
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07002998 joinReqParam->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07002999 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003000 return ;
3001}
Jeff Johnson295189b2012-06-20 16:38:30 -07003002/*
3003 * FUNCTION: WDA_ProcessJoinReq
3004 * Trigger Join REQ in WDI
3005 */
Jeff Johnson295189b2012-06-20 16:38:30 -07003006VOS_STATUS WDA_ProcessJoinReq(tWDA_CbContext *pWDA,
3007 tSwitchChannelParams* joinReqParam)
3008{
3009 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003010 WDI_JoinReqParamsType *wdiJoinReqParam =
3011 (WDI_JoinReqParamsType *)vos_mem_malloc(
3012 sizeof(WDI_JoinReqParamsType)) ;
3013 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003014 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003015 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003016 if(NULL == wdiJoinReqParam)
3017 {
3018 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003019 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003020 VOS_ASSERT(0);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003021 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003022 return VOS_STATUS_E_NOMEM;
3023 }
3024 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3025 if(NULL == pWdaParams)
3026 {
3027 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003028 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003029 VOS_ASSERT(0);
3030 vos_mem_free(wdiJoinReqParam);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003031 vos_mem_free(joinReqParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07003032 return VOS_STATUS_E_NOMEM;
3033 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003034
3035 /*if the BSSID or self STA in pWDA is NULL, join request can't be processed*/
3036 if(WDA_IS_NULL_MAC_ADDRESS(pWDA->macBSSID) ||
3037 WDA_IS_NULL_MAC_ADDRESS(pWDA->macSTASelf))
3038 {
3039 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3040 "%s: received join request when BSSID or self-STA is NULL "
3041 " BSSID:" WDA_MAC_ADDRESS_STR "Self-STA:" WDA_MAC_ADDRESS_STR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003042 __func__, WDA_MAC_ADDR_ARRAY(pWDA->macBSSID),
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07003043 WDA_MAC_ADDR_ARRAY(pWDA->macSTASelf));
3044 VOS_ASSERT(0);
3045 vos_mem_free(wdiJoinReqParam);
3046 vos_mem_free(pWdaParams);
3047 joinReqParam->status = eSIR_FAILURE ;
3048 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3049 return VOS_STATUS_E_INVAL;
3050 }
3051
Jeff Johnson295189b2012-06-20 16:38:30 -07003052 /* copy the BSSID for pWDA */
3053 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macBSSID, pWDA->macBSSID,
3054 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003055 vos_mem_copy(wdiJoinReqParam->wdiReqInfo.macSTASelf,
3056 pWDA->macSTASelf, sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003057 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucChannel =
3058 joinReqParam->channelNumber ;
Madan Mohan Koyyalamudi83b12822012-11-02 12:43:10 -07003059#ifdef WLAN_FEATURE_VOWIFI
3060 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.cMaxTxPower =
3061 joinReqParam->maxTxPower ;
3062#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003063 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.ucLocalPowerConstraint =
3064 joinReqParam->localPowerConstraint ;
3065#endif
3066 wdiJoinReqParam->wdiReqInfo.wdiChannelInfo.wdiSecondaryChannelOffset =
3067 joinReqParam->secondaryChannelOffset ;
3068 wdiJoinReqParam->wdiReqInfo.linkState = pWDA->linkState;
3069
3070 wdiJoinReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003071 /* Store Init Req pointer, as this will be used for response */
3072 /* store Params pass it to WDI */
3073 pWdaParams->pWdaContext = pWDA;
3074 pWdaParams->wdaMsgParam = joinReqParam;
3075 pWdaParams->wdaWdiApiMsgParam = wdiJoinReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003076 status = WDI_JoinReq(wdiJoinReqParam,
3077 (WDI_JoinRspCb )WDA_JoinReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003078 if(IS_WDI_STATUS_FAILURE(status))
3079 {
3080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3081 "Failure in Join WDI API, free all the memory " );
3082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3083 vos_mem_free(pWdaParams) ;
3084 joinReqParam->status = eSIR_FAILURE ;
3085 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)joinReqParam, 0) ;
3086 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003087 return CONVERT_WDI2VOS_STATUS(status) ;
3088}
Jeff Johnson295189b2012-06-20 16:38:30 -07003089/*
3090 * FUNCTION: WDA_SwitchChannelReqCallback
3091 * send Switch channel RSP back to PE
3092 */
3093void WDA_SwitchChannelReqCallback(
3094 WDI_SwitchCHRspParamsType *wdiSwitchChanRsp, void* pUserData)
3095{
3096 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3097 tWDA_CbContext *pWDA;
3098 tSwitchChannelParams *pSwitchChanParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003099 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003100 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003101 if(NULL == pWdaParams)
3102 {
3103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003104 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003105 VOS_ASSERT(0) ;
3106 return ;
3107 }
3108 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3109 pSwitchChanParams = (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3110
3111#ifdef WLAN_FEATURE_VOWIFI
3112 pSwitchChanParams->txMgmtPower = wdiSwitchChanRsp->ucTxMgmtPower;
3113#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3115 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003116 pSwitchChanParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003117 wdiSwitchChanRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003118 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003119 return ;
3120}
Jeff Johnson295189b2012-06-20 16:38:30 -07003121/*
3122 * FUNCTION: WDA_ProcessChannelSwitchReq
3123 * Request to WDI to switch channel REQ params.
3124 */
3125VOS_STATUS WDA_ProcessChannelSwitchReq(tWDA_CbContext *pWDA,
3126 tSwitchChannelParams *pSwitchChanParams)
3127{
3128 WDI_Status status = WDI_STATUS_SUCCESS ;
3129 WDI_SwitchChReqParamsType *wdiSwitchChanParam =
3130 (WDI_SwitchChReqParamsType *)vos_mem_malloc(
3131 sizeof(WDI_SwitchChReqParamsType)) ;
3132 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003133 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003134 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003135 if(NULL == wdiSwitchChanParam)
3136 {
3137 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003138 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003139 VOS_ASSERT(0);
3140 return VOS_STATUS_E_NOMEM;
3141 }
3142 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3143 if(NULL == pWdaParams)
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 vos_mem_free(wdiSwitchChanParam);
3149 return VOS_STATUS_E_NOMEM;
3150 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003151 wdiSwitchChanParam->wdiChInfo.ucChannel = pSwitchChanParams->channelNumber;
3152#ifndef WLAN_FEATURE_VOWIFI
3153 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3154 pSwitchChanParams->localPowerConstraint;
3155#endif
3156 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3157 pSwitchChanParams->secondaryChannelOffset;
3158 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003159 /* Store req pointer, as this will be used for response */
3160 /* store Params pass it to WDI */
3161 pWdaParams->pWdaContext = pWDA;
3162 pWdaParams->wdaMsgParam = pSwitchChanParams;
3163 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003164#ifdef WLAN_FEATURE_VOWIFI
3165 wdiSwitchChanParam->wdiChInfo.cMaxTxPower
3166 = pSwitchChanParams->maxTxPower;
3167 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3168 pSwitchChanParams ->selfStaMacAddr,
3169 sizeof(tSirMacAddr));
3170#endif
3171 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3172 pSwitchChanParams->bssId,
3173 sizeof(tSirMacAddr));
3174
3175 status = WDI_SwitchChReq(wdiSwitchChanParam,
3176 (WDI_SwitchChRspCb)WDA_SwitchChannelReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003177 if(IS_WDI_STATUS_FAILURE(status))
3178 {
3179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3180 "Failure in process channel switch Req WDI API, free all the memory " );
3181 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3182 vos_mem_free(pWdaParams) ;
3183 pSwitchChanParams->status = eSIR_FAILURE ;
3184 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP, (void *)pSwitchChanParams, 0) ;
3185 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003186 return CONVERT_WDI2VOS_STATUS(status) ;
3187}
Kalikinkar dhara1e83b772014-02-06 12:59:22 -08003188
3189/*
3190 * FUNCTION: WDA_SwitchChannelReqCallback_V1
3191 * send Switch channel RSP back to PE
3192 */
3193void WDA_SwitchChannelReqCallback_V1(
3194 WDI_SwitchChRspParamsType_V1 *wdiSwitchChanRsp,
3195 void* pUserData)
3196{
3197 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
3198 tWDA_CbContext *pWDA;
3199 tSwitchChannelParams *pSwitchChanParams;
3200 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3201 "<------ %s " ,__func__);
3202
3203 if (NULL == pWdaParams)
3204 {
3205 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3206 "%s: pWdaParams received NULL", __func__);
3207 VOS_ASSERT(0);
3208 return ;
3209 }
3210 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3211 pSwitchChanParams =
3212 (tSwitchChannelParams *)pWdaParams->wdaMsgParam;
3213 pSwitchChanParams->channelSwitchSrc =
3214 wdiSwitchChanRsp->channelSwitchSrc;
3215#ifdef WLAN_FEATURE_VOWIFI
3216 pSwitchChanParams->txMgmtPower =
3217 wdiSwitchChanRsp->ucTxMgmtPower;
3218#endif
3219 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3220 vos_mem_free(pWdaParams);
3221 pSwitchChanParams->status =
3222 wdiSwitchChanRsp->wdiStatus ;
3223 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3224 (void *)pSwitchChanParams , 0);
3225 return;
3226}
3227
3228/*
3229 * FUNCTION: WDA_ProcessChannelSwitchReq_V1
3230 * Request to WDI to switch channel REQ params.
3231 */
3232VOS_STATUS WDA_ProcessChannelSwitchReq_V1(tWDA_CbContext *pWDA,
3233 tSwitchChannelParams *pSwitchChanParams)
3234{
3235 WDI_Status status = WDI_STATUS_SUCCESS ;
3236 WDI_SwitchChReqParamsType_V1 *wdiSwitchChanParam =
3237 (WDI_SwitchChReqParamsType_V1 *)vos_mem_malloc(
3238 sizeof(WDI_SwitchChReqParamsType_V1)) ;
3239 tWDA_ReqParams *pWdaParams ;
3240 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3241 "------> %s " ,__func__);
3242 if (NULL == wdiSwitchChanParam)
3243 {
3244 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3245 "%s: VOS MEM Alloc Failure", __func__);
3246 VOS_ASSERT(0);
3247 return VOS_STATUS_E_NOMEM;
3248 }
3249 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3250 if (NULL == pWdaParams)
3251 {
3252 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3253 "%s: VOS MEM Alloc Failure", __func__);
3254 VOS_ASSERT(0);
3255 vos_mem_free(wdiSwitchChanParam);
3256 return VOS_STATUS_E_NOMEM;
3257 }
3258 wdiSwitchChanParam->wdiChInfo.channelSwitchSrc =
3259 pSwitchChanParams->channelSwitchSrc;
3260
3261 wdiSwitchChanParam->wdiChInfo.ucChannel =
3262 pSwitchChanParams->channelNumber;
3263#ifndef WLAN_FEATURE_VOWIFI
3264 wdiSwitchChanParam->wdiChInfo.ucLocalPowerConstraint =
3265 pSwitchChanParams->localPowerConstraint;
3266#endif
3267 wdiSwitchChanParam->wdiChInfo.wdiSecondaryChannelOffset =
3268 pSwitchChanParams->secondaryChannelOffset;
3269 wdiSwitchChanParam->wdiReqStatusCB = NULL ;
3270 /* Store req pointer, as this will be used for response */
3271 /* store Params pass it to WDI */
3272 pWdaParams->pWdaContext = pWDA;
3273 pWdaParams->wdaMsgParam = pSwitchChanParams;
3274 pWdaParams->wdaWdiApiMsgParam = wdiSwitchChanParam;
3275#ifdef WLAN_FEATURE_VOWIFI
3276 wdiSwitchChanParam->wdiChInfo.cMaxTxPower =
3277 pSwitchChanParams->maxTxPower;
3278 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macSelfStaMacAddr,
3279 pSwitchChanParams ->selfStaMacAddr,
3280 sizeof(tSirMacAddr));
3281#endif
3282 vos_mem_copy(wdiSwitchChanParam->wdiChInfo.macBSSId,
3283 pSwitchChanParams->bssId,
3284 sizeof(tSirMacAddr));
3285
3286 status = WDI_SwitchChReq_V1(wdiSwitchChanParam,
3287 (WDI_SwitchChRspCb_V1)WDA_SwitchChannelReqCallback_V1,
3288 pWdaParams);
3289 if (IS_WDI_STATUS_FAILURE(status))
3290 {
3291 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3292 "Failure in process channel switch Req WDI "
3293 "API, free all the memory " );
3294 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3295 vos_mem_free(pWdaParams) ;
3296 pSwitchChanParams->status = eSIR_FAILURE ;
3297 WDA_SendMsg(pWDA, WDA_SWITCH_CHANNEL_RSP,
3298 (void *)pSwitchChanParams, 0) ;
3299 }
3300 return CONVERT_WDI2VOS_STATUS(status) ;
3301}
3302
Jeff Johnson295189b2012-06-20 16:38:30 -07003303/*
3304 * FUNCTION: WDA_ConfigBssReqCallback
3305 * config BSS Req Callback, called by WDI
3306 */
3307void WDA_ConfigBssReqCallback(WDI_ConfigBSSRspParamsType *wdiConfigBssRsp
3308 ,void* pUserData)
3309{
3310 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3311 tWDA_CbContext *pWDA;
3312 tAddBssParams *configBssReqParam;
3313 tAddStaParams *staConfigBssParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003315 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003316 if(NULL == pWdaParams)
3317 {
3318 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003319 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003320 VOS_ASSERT(0) ;
3321 return ;
3322 }
3323 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3324 configBssReqParam = (tAddBssParams *)pWdaParams->wdaMsgParam;
3325 staConfigBssParam = &configBssReqParam->staContext ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003326 configBssReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003327 wdiConfigBssRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003328 if(WDI_STATUS_SUCCESS == wdiConfigBssRsp->wdiStatus)
3329 {
3330 vos_mem_copy(configBssReqParam->bssId, wdiConfigBssRsp->macBSSID,
3331 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003332 configBssReqParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
3333 configBssReqParam->bcastDpuSignature = wdiConfigBssRsp->ucBcastSig;
3334 configBssReqParam->mgmtDpuSignature = wdiConfigBssRsp->ucUcastSig;
3335
3336 if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_STA)
3337 {
3338 if(configBssReqParam->bssType == eSIR_IBSS_MODE)
3339 {
3340 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_IN_IBSS_ROLE;
3341 staConfigBssParam->staType = STA_ENTRY_BSSID;
3342 }
3343 else if ((configBssReqParam->bssType == eSIR_BTAMP_STA_MODE) &&
3344 (staConfigBssParam->staType == STA_ENTRY_SELF))
3345 {
3346 /* This is the 1st add BSS Req for the BTAMP STA */
3347 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3348 staConfigBssParam->staType = STA_ENTRY_BSSID;
3349 }
3350 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3351 (staConfigBssParam->staType == STA_ENTRY_PEER))
3352 {
3353 /* This is the 2nd ADD BSS Request that is sent
3354 * on the BTAMP STA side. The Sta type is
3355 * set to STA_ENTRY_PEER here.*/
3356 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_STA_ROLE;
3357 }
3358 else if ((configBssReqParam->bssType == eSIR_BTAMP_AP_MODE) &&
3359 (staConfigBssParam->staType == STA_ENTRY_SELF))
3360 {
3361 /* statype is already set by PE.
3362 * Only 1 ADD BSS Req is sent on the BTAMP AP side.*/
3363 pWDA->wdaGlobalSystemRole = eSYSTEM_BTAMP_AP_ROLE;
3364 staConfigBssParam->staType = STA_ENTRY_BSSID;
3365 }
3366 else
3367 {
3368 pWDA->wdaGlobalSystemRole = eSYSTEM_STA_ROLE;
3369 staConfigBssParam->staType = STA_ENTRY_PEER;
3370 }
3371 }
3372 else if (configBssReqParam->operMode == BSS_OPERATIONAL_MODE_AP)
3373 {
3374 pWDA->wdaGlobalSystemRole = eSYSTEM_AP_ROLE;
3375 staConfigBssParam->staType = STA_ENTRY_SELF;
3376 }
3377 else
3378 {
3379 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3380 "Invalid operation mode specified");
3381 VOS_ASSERT(0);
3382 }
3383
3384 staConfigBssParam->staIdx = wdiConfigBssRsp->ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003385 staConfigBssParam->bssIdx = wdiConfigBssRsp->ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003386 staConfigBssParam->ucUcastSig = wdiConfigBssRsp->ucUcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003387 staConfigBssParam->ucBcastSig = wdiConfigBssRsp->ucBcastSig;
Jeff Johnson295189b2012-06-20 16:38:30 -07003388 vos_mem_copy(staConfigBssParam->staMac, wdiConfigBssRsp->macSTA,
3389 sizeof(tSirMacAddr));
3390 staConfigBssParam->txChannelWidthSet =
3391 configBssReqParam->txChannelWidthSet;
Jeff Johnson295189b2012-06-20 16:38:30 -07003392 if(staConfigBssParam->staType == STA_ENTRY_PEER &&
3393 staConfigBssParam->htCapable)
3394 {
3395 pWDA->wdaStaInfo[staConfigBssParam->staIdx].bssIdx =
3396 wdiConfigBssRsp->ucBSSIdx;
3397 pWDA->wdaStaInfo[staConfigBssParam->staIdx].ucValidStaIndex =
3398 WDA_VALID_STA_INDEX ;
3399 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003400 if(WDI_DS_SetStaIdxPerBssIdx(pWDA->pWdiContext,
3401 wdiConfigBssRsp->ucBSSIdx,
3402 wdiConfigBssRsp->ucSTAIdx))
3403 {
3404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003405 "%s: fail to set STA idx associated with BSS index", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003406 VOS_ASSERT(0) ;
3407 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003408 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigBssRsp->ucSTAIdx))
3409 {
3410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003411 "%s: add BSS into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003412 VOS_ASSERT(0) ;
3413 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003414#ifdef WLAN_FEATURE_VOWIFI
3415 configBssReqParam->txMgmtPower = wdiConfigBssRsp->ucTxMgmtPower;
3416#endif
3417 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003418 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3419 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003420 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003421 return ;
3422}
Jeff Johnson295189b2012-06-20 16:38:30 -07003423/*
3424 * FUNCTION: WDA_UpdateEdcaParamsForAC
3425 * Update WDI EDCA params with PE edca params
3426 */
3427void WDA_UpdateEdcaParamsForAC(tWDA_CbContext *pWDA,
3428 WDI_EdcaParamRecord *wdiEdcaParam,
3429 tSirMacEdcaParamRecord *macEdcaParam)
3430{
3431 wdiEdcaParam->wdiACI.aifsn = macEdcaParam->aci.aifsn;
3432 wdiEdcaParam->wdiACI.acm= macEdcaParam->aci.acm;
3433 wdiEdcaParam->wdiACI.aci = macEdcaParam->aci.aci;
3434 wdiEdcaParam->wdiCW.min = macEdcaParam->cw.min;
3435 wdiEdcaParam->wdiCW.max = macEdcaParam->cw.max;
3436 wdiEdcaParam->usTXOPLimit = macEdcaParam->txoplimit;
3437}
Jeff Johnson295189b2012-06-20 16:38:30 -07003438/*
3439 * FUNCTION: WDA_ProcessConfigBssReq
3440 * Configure BSS before starting Assoc with AP
3441 */
3442VOS_STATUS WDA_ProcessConfigBssReq(tWDA_CbContext *pWDA,
3443 tAddBssParams* configBssReqParam)
3444{
3445 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303446 WDI_ConfigBSSReqParamsType *wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003447 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003448 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003449 "------> %s " ,__func__);
Madan Mohan Koyyalamudi67b82f62013-06-21 18:35:53 +05303450 if (NULL == configBssReqParam)
3451 {
3452 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
3453 "%s: configBssReqParam is NULL", __func__);
3454 return VOS_STATUS_E_INVAL;
3455 }
3456
3457 wdiConfigBssReqParam = (WDI_ConfigBSSReqParamsType *)vos_mem_malloc(
3458 sizeof(WDI_ConfigBSSReqParamsType)) ;
3459
Jeff Johnson295189b2012-06-20 16:38:30 -07003460 if(NULL == wdiConfigBssReqParam)
3461 {
3462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003463 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003464 VOS_ASSERT(0);
3465 return VOS_STATUS_E_NOMEM;
3466 }
3467 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3468 if(NULL == pWdaParams)
3469 {
3470 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003471 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003472 VOS_ASSERT(0);
3473 vos_mem_free(wdiConfigBssReqParam);
3474 return VOS_STATUS_E_NOMEM;
3475 }
Kiran4a17ebe2013-01-31 10:43:43 -08003476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
3477 "%s: maxTxPower %d", __func__, configBssReqParam->maxTxPower);
Jeff Johnson295189b2012-06-20 16:38:30 -07003478 vos_mem_set(wdiConfigBssReqParam, sizeof(WDI_ConfigBSSReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003479 WDA_UpdateBSSParams(pWDA, &wdiConfigBssReqParam->wdiReqInfo,
3480 configBssReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003481 /* Store Init Req pointer, as this will be used for response */
3482 /* store Params pass it to WDI */
3483 pWdaParams->pWdaContext = pWDA;
3484 pWdaParams->wdaMsgParam = configBssReqParam;
3485 pWdaParams->wdaWdiApiMsgParam = wdiConfigBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003486 status = WDI_ConfigBSSReq(wdiConfigBssReqParam,
3487 (WDI_ConfigBSSRspCb )WDA_ConfigBssReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003488 if(IS_WDI_STATUS_FAILURE(status))
3489 {
3490 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3491 "Failure in Config BSS WDI API, free all the memory " );
3492 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3493 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003494 configBssReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003495 WDA_SendMsg(pWDA, WDA_ADD_BSS_RSP, (void *)configBssReqParam, 0) ;
3496 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003497 return CONVERT_WDI2VOS_STATUS(status) ;
3498}
Jeff Johnson295189b2012-06-20 16:38:30 -07003499#ifdef ENABLE_HAL_COMBINED_MESSAGES
3500/*
3501 * FUNCTION: WDA_PostAssocReqCallback
3502 * Post ASSOC req callback, send RSP back to PE
3503 */
3504void WDA_PostAssocReqCallback(WDI_PostAssocRspParamsType *wdiPostAssocRsp,
3505 void* pUserData)
3506{
3507 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
3508 tPostAssocParams *postAssocReqParam =
3509 (tPostAssocParams *)pWDA->wdaMsgParam ;
3510 /*STA context within the BSS Params*/
3511 tAddStaParams *staPostAssocParam =
3512 &postAssocReqParam->addBssParams.staContext ;
3513 /*STA Params for self STA*/
3514 tAddStaParams *selfStaPostAssocParam =
3515 &postAssocReqParam->addStaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003516 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003517 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003518 postAssocReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003519 wdiPostAssocRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003520 if(WDI_STATUS_SUCCESS == wdiPostAssocRsp->wdiStatus)
3521 {
3522 staPostAssocParam->staIdx = wdiPostAssocRsp->bssParams.ucSTAIdx ;
3523 vos_mem_copy(staPostAssocParam->staMac, wdiPostAssocRsp->bssParams.macSTA,
3524 sizeof(tSirMacAddr)) ;
3525 staPostAssocParam->ucUcastSig = wdiPostAssocRsp->bssParams.ucUcastSig ;
3526 staPostAssocParam->ucBcastSig = wdiPostAssocRsp->bssParams.ucBcastSig ;
3527 staPostAssocParam->bssIdx = wdiPostAssocRsp->bssParams.ucBSSIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07003528 selfStaPostAssocParam->staIdx = wdiPostAssocRsp->staParams.ucSTAIdx;
3529 }
3530 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3531 pWDA->wdaWdiApiMsgParam = NULL;
3532 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003533 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003534 return ;
3535}
Jeff Johnson295189b2012-06-20 16:38:30 -07003536/*
3537 * FUNCTION: WDA_ProcessPostAssocReq
3538 * Trigger POST ASSOC processing in WDI
3539 */
3540VOS_STATUS WDA_ProcessPostAssocReq(tWDA_CbContext *pWDA,
3541 tPostAssocParams *postAssocReqParam)
3542{
Jeff Johnson295189b2012-06-20 16:38:30 -07003543 WDI_Status status = WDI_STATUS_SUCCESS ;
3544
3545 WDI_PostAssocReqParamsType *wdiPostAssocReqParam =
3546 (WDI_PostAssocReqParamsType *)vos_mem_malloc(
3547 sizeof(WDI_PostAssocReqParamsType)) ;
3548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003549 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003550
Jeff Johnson295189b2012-06-20 16:38:30 -07003551 if(NULL == wdiPostAssocReqParam)
3552 {
3553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003554 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003555 VOS_ASSERT(0);
3556 return VOS_STATUS_E_NOMEM;
3557 }
3558
3559 if((NULL != pWDA->wdaMsgParam) || (NULL != pWDA->wdaWdiApiMsgParam))
3560 {
3561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003562 "%s: wdaMsgParam or wdaWdiApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003563 VOS_ASSERT(0);
3564 return VOS_STATUS_E_FAILURE;
3565 }
3566
Jeff Johnson295189b2012-06-20 16:38:30 -07003567 /* update BSS params into WDI structure */
3568 WDA_UpdateBSSParams(pWDA, &wdiPostAssocReqParam->wdiBSSParams,
3569 &postAssocReqParam->addBssParams) ;
3570 /* update STA params into WDI structure */
3571 WDA_UpdateSTAParams(pWDA, &wdiPostAssocReqParam->wdiSTAParams,
3572 &postAssocReqParam->addStaParams) ;
3573
3574 wdiPostAssocReqParam->wdiBSSParams.ucEDCAParamsValid =
3575 postAssocReqParam->addBssParams.highPerformance;
3576 WDA_UpdateEdcaParamsForAC(pWDA,
3577 &wdiPostAssocReqParam->wdiBSSParams.wdiBEEDCAParams,
3578 &postAssocReqParam->addBssParams.acbe);
3579 WDA_UpdateEdcaParamsForAC(pWDA,
3580 &wdiPostAssocReqParam->wdiBSSParams.wdiBKEDCAParams,
3581 &postAssocReqParam->addBssParams.acbk);
3582 WDA_UpdateEdcaParamsForAC(pWDA,
3583 &wdiPostAssocReqParam->wdiBSSParams.wdiVIEDCAParams,
3584 &postAssocReqParam->addBssParams.acvi);
3585 WDA_UpdateEdcaParamsForAC(pWDA,
3586 &wdiPostAssocReqParam->wdiBSSParams.wdiVOEDCAParams,
3587 &postAssocReqParam->addBssParams.acvo);
Jeff Johnson295189b2012-06-20 16:38:30 -07003588 /* Store Init Req pointer, as this will be used for response */
3589 pWDA->wdaMsgParam = (void *)postAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003590 /* store Params pass it to WDI */
3591 pWDA->wdaWdiApiMsgParam = (void *)wdiPostAssocReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003592 status = WDI_PostAssocReq(wdiPostAssocReqParam,
3593 (WDI_PostAssocRspCb )WDA_PostAssocReqCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003594 if(IS_WDI_STATUS_FAILURE(status))
3595 {
3596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3597 "Failure in Post Assoc WDI API, free all the memory " );
3598 vos_mem_free(pWDA->wdaWdiApiMsgParam) ;
3599 pWDA->wdaWdiApiMsgParam = NULL;
3600 pWDA->wdaMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003601 postAssocReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003602 WDA_SendMsg(pWDA, WDA_POST_ASSOC_RSP, (void *)postAssocReqParam, 0) ;
3603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003604 return CONVERT_WDI2VOS_STATUS(status) ;
3605}
3606#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003607/*
3608 * FUNCTION: WDA_AddStaReqCallback
3609 * ADD STA req callback, send RSP back to PE
3610 */
3611void WDA_AddStaReqCallback(WDI_ConfigSTARspParamsType *wdiConfigStaRsp,
3612 void* pUserData)
3613{
3614 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3615 tWDA_CbContext *pWDA;
3616 tAddStaParams *addStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003617 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 {
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,"%s: pWdaParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003622 VOS_ASSERT(0) ;
3623 return ;
3624 }
3625 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3626 addStaReqParam = (tAddStaParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003627 addStaReqParam->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003628 wdiConfigStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003629 if(WDI_STATUS_SUCCESS == wdiConfigStaRsp->wdiStatus)
3630 {
3631 addStaReqParam->staIdx = wdiConfigStaRsp->ucSTAIdx;
3632 /*TODO: UMAC structure doesn't have these fields*/
3633 /*addStaReqParam-> = wdiConfigStaRsp->ucDpuIndex;
3634 addStaReqParam-> = wdiConfigStaRsp->ucBcastDpuIndex;
3635 addStaReqParam-> = wdiConfigStaRsp->ucBcastMgmtDpuIdx; */
3636 addStaReqParam->ucUcastSig = wdiConfigStaRsp->ucUcastSig;
3637 addStaReqParam->ucBcastSig = wdiConfigStaRsp->ucBcastSig;
3638 /* update staIndex as valid index for BA if STA is HT capable*/
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003639#ifdef FEATURE_WLAN_TDLS
3640 if( (addStaReqParam->staType == STA_ENTRY_PEER ||
3641 addStaReqParam->staType == STA_ENTRY_TDLS_PEER) && addStaReqParam->htCapable)
3642#else
Jeff Johnson295189b2012-06-20 16:38:30 -07003643 if(addStaReqParam->staType == STA_ENTRY_PEER && addStaReqParam->htCapable)
Mohit Khanna698ba2a2012-12-04 15:08:18 -08003644#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07003645 {
3646 pWDA->wdaStaInfo[addStaReqParam->staIdx].bssIdx =
3647 wdiConfigStaRsp->ucBssIdx;
3648 pWDA->wdaStaInfo[addStaReqParam->staIdx].ucValidStaIndex =
3649 WDA_VALID_STA_INDEX ;
3650 }
3651 if(WDI_DS_AddSTAMemPool(pWDA->pWdiContext, wdiConfigStaRsp->ucSTAIdx))
3652 {
3653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003654 "%s: add STA into mempool fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003655 VOS_ASSERT(0) ;
3656 return ;
3657 }
3658 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003659 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
3660 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003661 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003662 return ;
3663}
Jeff Johnson295189b2012-06-20 16:38:30 -07003664/*
3665 * FUNCTION: WDA_ConfigStaReq
3666 * Trigger Config STA processing in WDI
3667 */
3668VOS_STATUS WDA_ProcessAddStaReq(tWDA_CbContext *pWDA,
3669 tAddStaParams *addStaReqParam)
3670{
Jeff Johnson295189b2012-06-20 16:38:30 -07003671 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003672 WDI_ConfigSTAReqParamsType *wdiConfigStaReqParam =
3673 (WDI_ConfigSTAReqParamsType *)vos_mem_malloc(
3674 sizeof(WDI_ConfigSTAReqParamsType)) ;
3675 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003677 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003678 if(NULL == wdiConfigStaReqParam)
3679 {
3680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003681 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003682 VOS_ASSERT(0);
3683 return VOS_STATUS_E_NOMEM;
3684 }
3685 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3686 if(NULL == pWdaParams)
3687 {
3688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003689 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003690 VOS_ASSERT(0);
3691 vos_mem_free(wdiConfigStaReqParam);
3692 return VOS_STATUS_E_NOMEM;
3693 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003694 vos_mem_set(wdiConfigStaReqParam, sizeof(WDI_ConfigSTAReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07003695 /* update STA params into WDI structure */
3696 WDA_UpdateSTAParams(pWDA, &wdiConfigStaReqParam->wdiReqInfo,
3697 addStaReqParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003698 /* Store Init Req pointer, as this will be used for response */
3699 /* store Params pass it to WDI */
3700 pWdaParams->pWdaContext = pWDA;
3701 pWdaParams->wdaMsgParam = addStaReqParam;
3702 pWdaParams->wdaWdiApiMsgParam = wdiConfigStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003703 status = WDI_ConfigSTAReq(wdiConfigStaReqParam,
3704 (WDI_ConfigSTARspCb )WDA_AddStaReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003705 if(IS_WDI_STATUS_FAILURE(status))
3706 {
3707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3708 "Failure in Config STA WDI API, free all the memory " );
3709 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3710 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003711 addStaReqParam->status = eSIR_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003712 WDA_SendMsg(pWDA, WDA_ADD_STA_RSP, (void *)addStaReqParam, 0) ;
3713 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003714 return CONVERT_WDI2VOS_STATUS(status) ;
3715}
Jeff Johnson295189b2012-06-20 16:38:30 -07003716/*
3717 * FUNCTION: WDA_DelBSSReqCallback
3718 * Dens DEL BSS RSP back to PE
3719 */
3720void WDA_DelBSSReqCallback(WDI_DelBSSRspParamsType *wdiDelBssRsp,
3721 void* pUserData)
3722{
3723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3724 tWDA_CbContext *pWDA;
3725 tDeleteBssParams *delBssReqParam;
3726 tANI_U8 staIdx,tid;
Jeff Johnson295189b2012-06-20 16:38:30 -07003727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003728 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003729 if(NULL == pWdaParams)
3730 {
3731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003732 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003733 VOS_ASSERT(0) ;
3734 return ;
3735 }
3736 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3737 delBssReqParam = (tDeleteBssParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003738 delBssReqParam->status = wdiDelBssRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003739 if(WDI_STATUS_SUCCESS == wdiDelBssRsp->wdiStatus)
3740 {
3741 vos_mem_copy(delBssReqParam->bssid, wdiDelBssRsp->macBSSID,
3742 sizeof(tSirMacAddr)) ;
3743 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003744 if(WDI_DS_GetStaIdxFromBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, &staIdx))
3745 {
3746 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003747 "%s: Get STA index from BSS index Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003748 VOS_ASSERT(0) ;
3749 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003750 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, staIdx))
3751 {
3752 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003753 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003754 VOS_ASSERT(0) ;
3755 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003756 if(WDI_DS_ClearStaIdxPerBssIdx(pWDA->pWdiContext, delBssReqParam->bssIdx, staIdx))
3757 {
3758 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003759 "%s: Clear STA index form table Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003760 VOS_ASSERT(0) ;
3761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003762 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3763 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003764 /* reset the the system role*/
3765 pWDA->wdaGlobalSystemRole = eSYSTEM_UNKNOWN_ROLE;
3766
3767 /* Reset the BA related information */
3768 for(staIdx=0; staIdx < WDA_MAX_STA; staIdx++)
3769 {
3770 if( pWDA->wdaStaInfo[staIdx].bssIdx == wdiDelBssRsp->ucBssIdx )
3771 {
3772 pWDA->wdaStaInfo[staIdx].ucValidStaIndex = WDA_INVALID_STA_INDEX;
3773 pWDA->wdaStaInfo[staIdx].ucUseBaBitmap = 0;
3774 /* Reset framesTxed counters here */
3775 for(tid = 0; tid < STACFG_MAX_TC; tid++)
3776 {
3777 pWDA->wdaStaInfo[staIdx].framesTxed[tid] = 0;
3778 }
3779 }
3780 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003781 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003782 return ;
3783}
3784
Jeff Johnson295189b2012-06-20 16:38:30 -07003785/*
3786 * FUNCTION: WDA_ProcessDelBssReq
3787 * Init DEL BSS req with WDI
3788 */
3789VOS_STATUS WDA_ProcessDelBssReq(tWDA_CbContext *pWDA,
3790 tDeleteBssParams *delBssParam)
3791{
3792 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003793 WDI_DelBSSReqParamsType *wdiDelBssReqParam =
3794 (WDI_DelBSSReqParamsType *)vos_mem_malloc(
3795 sizeof(WDI_DelBSSReqParamsType)) ;
3796 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003798 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003799 if(NULL == wdiDelBssReqParam)
3800 {
3801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003802 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003803 VOS_ASSERT(0);
3804 return VOS_STATUS_E_NOMEM;
3805 }
3806 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3807 if(NULL == pWdaParams)
3808 {
3809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003810 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003811 VOS_ASSERT(0);
3812 vos_mem_free(wdiDelBssReqParam);
3813 return VOS_STATUS_E_NOMEM;
3814 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003815 wdiDelBssReqParam->ucBssIdx = delBssParam->bssIdx;
3816 wdiDelBssReqParam->wdiReqStatusCB = NULL ;
3817
3818 /* Store Init Req pointer, as this will be used for response */
3819 /* store Params pass it to WDI */
3820 pWdaParams->pWdaContext = pWDA;
3821 pWdaParams->wdaMsgParam = delBssParam;
3822 pWdaParams->wdaWdiApiMsgParam = wdiDelBssReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003823 status = WDI_DelBSSReq(wdiDelBssReqParam,
3824 (WDI_DelBSSRspCb )WDA_DelBSSReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003825 if(IS_WDI_STATUS_FAILURE(status))
3826 {
3827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3828 "Failure in Del BSS WDI API, free all the memory " );
3829 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3830 vos_mem_free(pWdaParams) ;
3831 delBssParam->status = eSIR_FAILURE ;
3832 WDA_SendMsg(pWDA, WDA_DELETE_BSS_RSP, (void *)delBssParam, 0) ;
3833 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003834 return CONVERT_WDI2VOS_STATUS(status) ;
3835}
Jeff Johnson295189b2012-06-20 16:38:30 -07003836/*
3837 * FUNCTION: WDA_DelSTAReqCallback
3838 * Dens DEL STA RSP back to PE
3839 */
3840void WDA_DelSTAReqCallback(WDI_DelSTARspParamsType *wdiDelStaRsp,
3841 void* pUserData)
3842{
3843 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3844 tWDA_CbContext *pWDA;
3845 tDeleteStaParams *delStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003847 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003848 if(NULL == pWdaParams)
3849 {
3850 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003851 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003852 VOS_ASSERT(0) ;
3853 return ;
3854 }
3855 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3856 delStaReqParam = (tDeleteStaParams *)pWdaParams->wdaMsgParam;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07003857 delStaReqParam->status = wdiDelStaRsp->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003858 if(WDI_STATUS_SUCCESS == wdiDelStaRsp->wdiStatus)
3859 {
3860 if(WDI_DS_DelSTAMemPool(pWDA->pWdiContext, wdiDelStaRsp->ucSTAIdx))
3861 {
3862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003863 "%s: DEL STA from MemPool Fail", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003864 VOS_ASSERT(0) ;
3865 }
3866 delStaReqParam->staIdx = wdiDelStaRsp->ucSTAIdx ;
3867 }
3868 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3869 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003870 /*Reset the BA information corresponding to this STAIdx */
3871 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucValidStaIndex =
3872 WDA_INVALID_STA_INDEX;
3873 pWDA->wdaStaInfo[wdiDelStaRsp->ucSTAIdx].ucUseBaBitmap = 0;
3874
3875 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaReqParam , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003876 return ;
3877}
Jeff Johnson295189b2012-06-20 16:38:30 -07003878/*
3879 * FUNCTION: WDA_ProcessDelStaReq
3880 * Init DEL STA req with WDI
3881 */
3882VOS_STATUS WDA_ProcessDelStaReq(tWDA_CbContext *pWDA,
3883 tDeleteStaParams *delStaParam)
3884{
3885 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003886 WDI_DelSTAReqParamsType *wdiDelStaReqParam =
3887 (WDI_DelSTAReqParamsType *)vos_mem_malloc(
3888 sizeof(WDI_DelSTAReqParamsType)) ;
3889 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003891 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003892 if(NULL == wdiDelStaReqParam)
3893 {
3894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003895 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003896 VOS_ASSERT(0);
3897 return VOS_STATUS_E_NOMEM;
3898 }
3899 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
3900 if(NULL == pWdaParams)
3901 {
3902 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003903 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003904 VOS_ASSERT(0);
3905 vos_mem_free(wdiDelStaReqParam);
3906 return VOS_STATUS_E_NOMEM;
3907 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003908 wdiDelStaReqParam->ucSTAIdx = delStaParam->staIdx ;
3909 wdiDelStaReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003910 /* Store Init Req pointer, as this will be used for response */
3911 /* store Params pass it to WDI */
3912 pWdaParams->pWdaContext = pWDA;
3913 pWdaParams->wdaMsgParam = delStaParam;
3914 pWdaParams->wdaWdiApiMsgParam = wdiDelStaReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003915 status = WDI_DelSTAReq(wdiDelStaReqParam,
3916 (WDI_DelSTARspCb )WDA_DelSTAReqCallback, pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003917 if(IS_WDI_STATUS_FAILURE(status))
3918 {
3919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3920 "Failure in Del STA WDI API, free all the memory status = %d",
3921 status );
3922 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3923 vos_mem_free(pWdaParams) ;
3924 delStaParam->status = eSIR_FAILURE ;
3925 WDA_SendMsg(pWDA, WDA_DELETE_STA_RSP, (void *)delStaParam, 0) ;
3926 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003927 return CONVERT_WDI2VOS_STATUS(status) ;
3928}
Jeff Johnson295189b2012-06-20 16:38:30 -07003929void WDA_ProcessAddStaSelfRsp(WDI_AddSTASelfRspParamsType* pwdiAddSTASelfRsp, void* pUserData)
3930{
3931 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
3932 tWDA_CbContext *pWDA;
3933 tAddStaSelfParams *pAddStaSelfRsp = NULL;
3934 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003935 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003936 if(NULL == pWdaParams)
3937 {
3938 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003939 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003940 VOS_ASSERT(0) ;
3941 return ;
3942 }
3943 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
3944 pAddStaSelfRsp = (tAddStaSelfParams*)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07003945 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
3946 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003947 pAddStaSelfRsp->status = CONVERT_WDI2SIR_STATUS(pwdiAddSTASelfRsp->wdiStatus);
3948 vos_mem_copy(pAddStaSelfRsp->selfMacAddr,
3949 pwdiAddSTASelfRsp->macSelfSta,
3950 sizeof(pAddStaSelfRsp->selfMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07003951 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfRsp, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003952 return ;
3953}
Jeff Johnson295189b2012-06-20 16:38:30 -07003954/*
3955 * FUNCTION: WDA_ProcessAddStaSelfReq
3956 *
3957 */
3958VOS_STATUS WDA_ProcessAddStaSelfReq( tWDA_CbContext *pWDA, tpAddStaSelfParams pAddStaSelfReq)
3959{
3960 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07003961 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07003962 WDI_AddSTASelfReqParamsType *wdiAddStaSelfReq =
3963 (WDI_AddSTASelfReqParamsType *)vos_mem_malloc(
3964 sizeof(WDI_AddSTASelfReqParamsType)) ;
3965 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07003966 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003967 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003968 if( NULL == wdiAddStaSelfReq )
3969 {
3970 VOS_ASSERT( 0 );
3971 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003972 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003973 return( VOS_STATUS_E_NOMEM );
3974 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003975 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07003976 if( NULL == pWdaParams )
3977 {
3978 VOS_ASSERT( 0 );
3979 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07003980 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07003981 vos_mem_free(wdiAddStaSelfReq) ;
3982 return( VOS_STATUS_E_NOMEM );
3983 }
Jeff Johnson295189b2012-06-20 16:38:30 -07003984 wdiAddStaSelfReq->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07003985 vos_mem_copy( wdiAddStaSelfReq->wdiAddSTASelfInfo.selfMacAddr, pAddStaSelfReq->selfMacAddr, 6);
Kiran Kumar Lokere0ad5cd32013-06-25 11:26:22 -07003986 wdiAddStaSelfReq->wdiAddSTASelfInfo.currDeviceMode = pAddStaSelfReq->currDeviceMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07003987 /* Store Init Req pointer, as this will be used for response */
3988 /* store Params pass it to WDI */
3989 pWdaParams->pWdaContext = pWDA;
3990 pWdaParams->wdaMsgParam = pAddStaSelfReq;
3991 pWdaParams->wdaWdiApiMsgParam = wdiAddStaSelfReq;
Jeff Johnson43971f52012-07-17 12:26:56 -07003992 wstatus = WDI_AddSTASelfReq( wdiAddStaSelfReq, WDA_ProcessAddStaSelfRsp, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07003993
Jeff Johnson43971f52012-07-17 12:26:56 -07003994 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07003995 {
3996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
3997 "Failure in Add Self Sta Request API, free all the memory status = %d",
Jeff Johnson43971f52012-07-17 12:26:56 -07003998 wstatus );
3999 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004000 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4001 vos_mem_free(pWdaParams) ;
4002 pAddStaSelfReq->status = eSIR_FAILURE ;
4003 WDA_SendMsg( pWDA, WDA_ADD_STA_SELF_RSP, (void *)pAddStaSelfReq, 0) ;
4004 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004005 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004006}
Jeff Johnson295189b2012-06-20 16:38:30 -07004007/*
4008 * FUNCTION: WDA_DelSTASelfRespCallback
4009 *
4010 */
4011void WDA_DelSTASelfRespCallback(WDI_DelSTASelfRspParamsType *
4012 wdiDelStaSelfRspParams , void* pUserData)
4013{
4014 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4015 tWDA_CbContext *pWDA;
4016 tDelStaSelfParams *delStaSelfParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004017 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004018 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004019 if (NULL == pWdaParams)
4020 {
4021 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004022 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004023 VOS_ASSERT(0);
4024 return;
4025 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004026 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4027 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004028 delStaSelfParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004029 wdiDelStaSelfRspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004030
4031 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4032 vos_mem_free(pWdaParams) ;
4033
4034 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004035 return ;
4036}
Jeff Johnson295189b2012-06-20 16:38:30 -07004037/*
4038 * FUNCTION: WDA_DelSTASelfReqCallback
4039 *
4040 */
4041void WDA_DelSTASelfReqCallback(WDI_Status wdiStatus,
4042 void* pUserData)
4043{
4044 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4045 tWDA_CbContext *pWDA;
4046 tDelStaSelfParams *delStaSelfParams;
4047
4048 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +05304049 "<------ %s, wdiStatus: %d pWdaParams: %p",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004050 __func__, wdiStatus, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004051
4052 if (NULL == pWdaParams)
4053 {
4054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004055 "%s: Invalid pWdaParams pointer", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004056 VOS_ASSERT(0);
4057 return;
4058 }
4059
4060 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4061 delStaSelfParams = (tDelStaSelfParams *)pWdaParams->wdaMsgParam;
4062
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004063 delStaSelfParams->status = wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004064
4065 if(IS_WDI_STATUS_FAILURE(wdiStatus))
4066 {
4067 VOS_ASSERT(0);
4068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4069 vos_mem_free(pWdaParams) ;
4070 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)delStaSelfParams , 0) ;
4071 }
4072
4073 return ;
4074}
4075
4076/*
4077 * FUNCTION: WDA_DelSTASelfReq
4078 * Trigger Config STA processing in WDI
4079 */
4080VOS_STATUS WDA_ProcessDelSTASelfReq(tWDA_CbContext *pWDA,
4081 tDelStaSelfParams* pDelStaSelfReqParam)
4082{
4083 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07004084 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07004085 tWDA_ReqParams *pWdaParams = NULL;
4086 WDI_DelSTASelfReqParamsType *wdiDelStaSelfReq =
4087 (WDI_DelSTASelfReqParamsType *)vos_mem_malloc(
4088 sizeof(WDI_DelSTASelfReqParamsType)) ;
4089
Jeff Johnson295189b2012-06-20 16:38:30 -07004090 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004091 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004092 if( NULL == wdiDelStaSelfReq )
4093 {
4094 VOS_ASSERT( 0 );
4095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004096 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004097 return( VOS_STATUS_E_NOMEM );
4098 }
4099
4100 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4101 if( NULL == pWdaParams )
4102 {
4103 VOS_ASSERT( 0 );
4104 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004105 "%s: Unable to allocate memory " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004106 vos_mem_free(wdiDelStaSelfReq) ;
4107 return( VOS_STATUS_E_NOMEM );
4108 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004109 pWdaParams->pWdaContext = pWDA;
4110 /* Store param pointer as passed in by caller */
4111 pWdaParams->wdaMsgParam = pDelStaSelfReqParam;
4112 /* store Params pass it to WDI */
4113 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelStaSelfReq;
Jeff Johnson295189b2012-06-20 16:38:30 -07004114 vos_mem_copy( wdiDelStaSelfReq->wdiDelStaSelfInfo.selfMacAddr,
4115 pDelStaSelfReqParam->selfMacAddr, sizeof(tSirMacAddr));
4116
4117 wdiDelStaSelfReq->wdiReqStatusCB = WDA_DelSTASelfReqCallback;
4118 wdiDelStaSelfReq->pUserData = pWdaParams;
4119
Jeff Johnson43971f52012-07-17 12:26:56 -07004120 wstatus = WDI_DelSTASelfReq(wdiDelStaSelfReq,
Jeff Johnson295189b2012-06-20 16:38:30 -07004121 (WDI_DelSTASelfRspCb)WDA_DelSTASelfRespCallback, pWdaParams);
4122
Jeff Johnson43971f52012-07-17 12:26:56 -07004123 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07004124 {
4125 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
4126 "Failure in Del Sta Self REQ WDI API, free all the memory " );
4127 VOS_ASSERT(0);
Jeff Johnson43971f52012-07-17 12:26:56 -07004128 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07004129 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4130 vos_mem_free(pWdaParams) ;
4131 pDelStaSelfReqParam->status = eSIR_FAILURE ;
4132 WDA_SendMsg(pWDA, WDA_DEL_STA_SELF_RSP, (void *)pDelStaSelfReqParam, 0) ;
4133 }
Jeff Johnson43971f52012-07-17 12:26:56 -07004134 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07004135}
4136
Jeff Johnson295189b2012-06-20 16:38:30 -07004137/*
4138 * FUNCTION: WDA_SendMsg
4139 * Send Message back to PE
4140 */
4141void WDA_SendMsg(tWDA_CbContext *pWDA, tANI_U16 msgType,
4142 void *pBodyptr, tANI_U32 bodyVal)
4143{
4144 tSirMsgQ msg = {0} ;
4145 tANI_U32 status = VOS_STATUS_SUCCESS ;
4146 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -07004147 msg.type = msgType;
4148 msg.bodyval = bodyVal;
4149 msg.bodyptr = pBodyptr;
Jeff Johnson295189b2012-06-20 16:38:30 -07004150 status = limPostMsgApi(pMac, &msg);
Jeff Johnson295189b2012-06-20 16:38:30 -07004151 if (VOS_STATUS_SUCCESS != status)
4152 {
4153 if(NULL != pBodyptr)
4154 {
4155 vos_mem_free(pBodyptr);
4156 }
4157 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004158 "%s: limPostMsgApi is failed " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004159 VOS_ASSERT(0) ;
4160 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004161 return ;
4162}
Jeff Johnson295189b2012-06-20 16:38:30 -07004163/*
4164 * FUNCTION: WDA_UpdateBSSParams
4165 * Translated WDA/PE BSS info into WDI BSS info..
4166 */
4167void WDA_UpdateBSSParams(tWDA_CbContext *pWDA,
4168 WDI_ConfigBSSReqInfoType *wdiBssParams,
4169 tAddBssParams *wdaBssParams)
4170{
4171 v_U8_t keyIndex = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004172 /* copy bssReq Params to WDI structure */
4173 vos_mem_copy(wdiBssParams->macBSSID,
4174 wdaBssParams->bssId, sizeof(tSirMacAddr)) ;
4175 vos_mem_copy(wdiBssParams->macSelfAddr, wdaBssParams->selfMacAddr,
4176 sizeof(tSirMacAddr)) ;
4177 wdiBssParams->wdiBSSType = wdaBssParams->bssType ;
4178 wdiBssParams->ucOperMode = wdaBssParams->operMode ;
4179 wdiBssParams->wdiNWType = wdaBssParams->nwType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004180 wdiBssParams->ucShortSlotTimeSupported =
4181 wdaBssParams->shortSlotTimeSupported ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004182 wdiBssParams->ucllaCoexist = wdaBssParams->llaCoexist ;
4183 wdiBssParams->ucllbCoexist = wdaBssParams->llbCoexist ;
4184 wdiBssParams->ucllgCoexist = wdaBssParams->llgCoexist ;
4185 wdiBssParams->ucHT20Coexist = wdaBssParams->ht20Coexist ;
4186 wdiBssParams->ucObssProtEnabled = wdaBssParams->obssProtEnabled ;
4187
4188 wdiBssParams->ucllnNonGFCoexist = wdaBssParams->llnNonGFCoexist ;
4189 wdiBssParams->ucTXOPProtectionFullSupport =
4190 wdaBssParams->fLsigTXOPProtectionFullSupport ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004191 wdiBssParams->ucRIFSMode = wdaBssParams->fRIFSMode ;
4192 wdiBssParams->usBeaconInterval = wdaBssParams->beaconInterval ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004193 wdiBssParams->ucDTIMPeriod = wdaBssParams->dtimPeriod ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004194 wdiBssParams->ucTXChannelWidthSet = wdaBssParams->txChannelWidthSet ;
4195 wdiBssParams->ucCurrentOperChannel = wdaBssParams->currentOperChannel ;
4196 wdiBssParams->ucCurrentExtChannel = wdaBssParams->currentExtChannel ;
4197 wdiBssParams->bHiddenSSIDEn = wdaBssParams->bHiddenSSIDEn ;
4198
Chet Lanctot186b5732013-03-18 10:26:30 -07004199 wdiBssParams->ucRMFEnabled = wdaBssParams->rmfEnabled;
4200
Jeff Johnson295189b2012-06-20 16:38:30 -07004201 /* copy SSID into WDI structure */
4202 wdiBssParams->wdiSSID.ucLength = wdaBssParams->ssId.length ;
4203 vos_mem_copy(wdiBssParams->wdiSSID.sSSID,
4204 wdaBssParams->ssId.ssId, wdaBssParams->ssId.length) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004205 WDA_UpdateSTAParams(pWDA, &wdiBssParams->wdiSTAContext,
4206 &wdaBssParams->staContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004207 wdiBssParams->wdiAction = wdaBssParams->updateBss;
Jeff Johnson295189b2012-06-20 16:38:30 -07004208#ifdef WLAN_FEATURE_VOWIFI
4209 wdiBssParams->cMaxTxPower = wdaBssParams->maxTxPower;
4210#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004211 wdiBssParams->ucPersona = wdaBssParams->halPersona;
Jeff Johnson295189b2012-06-20 16:38:30 -07004212 wdiBssParams->bSpectrumMgtEn = wdaBssParams->bSpectrumMgtEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -07004213#ifdef WLAN_FEATURE_VOWIFI_11R
4214 wdiBssParams->bExtSetStaKeyParamValid = wdaBssParams->extSetStaKeyParamValid;
Jeff Johnson295189b2012-06-20 16:38:30 -07004215 if(wdiBssParams->bExtSetStaKeyParamValid)
4216 {
4217 /* copy set STA key params to WDI structure */
4218 wdiBssParams->wdiExtSetKeyParam.ucSTAIdx =
4219 wdaBssParams->extSetStaKeyParam.staIdx;
4220 wdiBssParams->wdiExtSetKeyParam.wdiEncType =
4221 wdaBssParams->extSetStaKeyParam.encType;
4222 wdiBssParams->wdiExtSetKeyParam.wdiWEPType =
4223 wdaBssParams->extSetStaKeyParam.wepType;
4224 wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx =
4225 wdaBssParams->extSetStaKeyParam.defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004226 if(wdaBssParams->extSetStaKeyParam.encType != eSIR_ED_NONE)
4227 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004228 if( (wdiBssParams->wdiExtSetKeyParam.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004229 (WDA_INVALID_KEY_INDEX == wdaBssParams->extSetStaKeyParam.defWEPIdx) &&
4230 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4231 {
4232 WDA_GetWepKeysFromCfg( pWDA,
4233 &wdiBssParams->wdiExtSetKeyParam.ucDefWEPIdx,
4234 &wdiBssParams->wdiExtSetKeyParam.ucNumKeys,
4235 wdiBssParams->wdiExtSetKeyParam.wdiKey );
4236 }
4237 else
4238 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004239 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4240 keyIndex++)
4241 {
4242 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyId =
4243 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyId;
4244 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].unicast =
4245 wdaBssParams->extSetStaKeyParam.key[keyIndex].unicast;
4246 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyDirection =
4247 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004248 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyRsc,
4249 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4250 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].paeRole =
4251 wdaBssParams->extSetStaKeyParam.key[keyIndex].paeRole;
4252 wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].keyLength =
4253 wdaBssParams->extSetStaKeyParam.key[keyIndex].keyLength;
4254 vos_mem_copy(wdiBssParams->wdiExtSetKeyParam.wdiKey[keyIndex].key,
4255 wdaBssParams->extSetStaKeyParam.key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4256 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004257 wdiBssParams->wdiExtSetKeyParam.ucNumKeys =
4258 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004259 }
4260 }
4261 wdiBssParams->wdiExtSetKeyParam.ucSingleTidRc = wdaBssParams->extSetStaKeyParam.singleTidRc;
4262 }
4263 else /* wdaBssParams->bExtSetStaKeyParamValid is not valid */
4264 {
4265 vos_mem_zero( &wdaBssParams->extSetStaKeyParam,
4266 sizeof(wdaBssParams->extSetStaKeyParam) );
4267 }
4268#endif /*WLAN_FEATURE_VOWIFI_11R*/
Jeff Johnsone7245742012-09-05 17:12:55 -07004269#ifdef WLAN_FEATURE_11AC
4270 wdiBssParams->ucVhtCapableSta = wdaBssParams->vhtCapable;
4271 wdiBssParams->ucVhtTxChannelWidthSet = wdaBssParams->vhtTxChannelWidthSet;
4272#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004273
4274 return ;
4275}
Jeff Johnson295189b2012-06-20 16:38:30 -07004276/*
4277 * FUNCTION: WDA_UpdateSTAParams
4278 * Translated WDA/PE BSS info into WDI BSS info..
4279 */
4280void WDA_UpdateSTAParams(tWDA_CbContext *pWDA,
4281 WDI_ConfigStaReqInfoType *wdiStaParams,
4282 tAddStaParams *wdaStaParams)
4283{
4284 tANI_U8 i = 0;
4285 /* Update STA params */
4286 vos_mem_copy(wdiStaParams->macBSSID, wdaStaParams->bssId,
4287 sizeof(tSirMacAddr)) ;
4288 wdiStaParams->usAssocId = wdaStaParams->assocId;
4289 wdiStaParams->wdiSTAType = wdaStaParams->staType;
Gopichand Nakkalae7cbc5d2013-03-27 21:09:23 -07004290 wdiStaParams->staIdx = wdaStaParams->staIdx;
4291
Jeff Johnson295189b2012-06-20 16:38:30 -07004292 wdiStaParams->ucShortPreambleSupported =
4293 wdaStaParams->shortPreambleSupported;
4294 vos_mem_copy(wdiStaParams->macSTA, wdaStaParams->staMac,
4295 sizeof(tSirMacAddr)) ;
4296 wdiStaParams->usListenInterval = wdaStaParams->listenInterval;
4297
4298 wdiStaParams->ucWMMEnabled = wdaStaParams->wmmEnabled;
4299
4300 wdiStaParams->ucHTCapable = wdaStaParams->htCapable;
4301 wdiStaParams->ucTXChannelWidthSet = wdaStaParams->txChannelWidthSet;
4302 wdiStaParams->ucRIFSMode = wdaStaParams->rifsMode;
4303 wdiStaParams->ucLSIGTxopProtection = wdaStaParams->lsigTxopProtection;
4304 wdiStaParams->ucMaxAmpduSize = wdaStaParams->maxAmpduSize;
4305 wdiStaParams->ucMaxAmpduDensity = wdaStaParams->maxAmpduDensity;
4306 wdiStaParams->ucMaxAmsduSize = wdaStaParams->maxAmsduSize;
4307
4308 wdiStaParams->ucShortGI40Mhz = wdaStaParams->fShortGI40Mhz;
4309 wdiStaParams->ucShortGI20Mhz = wdaStaParams->fShortGI20Mhz;
Jeff Johnson295189b2012-06-20 16:38:30 -07004310 wdiStaParams->wdiSupportedRates.opRateMode =
4311 wdaStaParams->supportedRates.opRateMode;
Jeff Johnson295189b2012-06-20 16:38:30 -07004312 for(i = 0;i < WDI_NUM_11B_RATES;i++)
4313 {
4314 wdiStaParams->wdiSupportedRates.llbRates[i] =
4315 wdaStaParams->supportedRates.llbRates[i];
4316 }
4317 for(i = 0;i < WDI_NUM_11A_RATES;i++)
4318 {
4319 wdiStaParams->wdiSupportedRates.llaRates[i] =
4320 wdaStaParams->supportedRates.llaRates[i];
4321 }
4322 for(i = 0;i < SIR_NUM_POLARIS_RATES;i++)
4323 {
4324 wdiStaParams->wdiSupportedRates.aLegacyRates[i] =
4325 wdaStaParams->supportedRates.aniLegacyRates[i];
4326 }
4327 wdiStaParams->wdiSupportedRates.uEnhancedRateBitmap =
4328 wdaStaParams->supportedRates.aniEnhancedRateBitmap;
Jeff Johnsone7245742012-09-05 17:12:55 -07004329#ifdef WLAN_FEATURE_11AC
4330 wdiStaParams->wdiSupportedRates.vhtRxMCSMap = wdaStaParams->supportedRates.vhtRxMCSMap;
4331 wdiStaParams->wdiSupportedRates.vhtRxHighestDataRate = wdaStaParams->supportedRates.vhtRxHighestDataRate;
4332 wdiStaParams->wdiSupportedRates.vhtTxMCSMap = wdaStaParams->supportedRates.vhtTxMCSMap;
4333 wdiStaParams->wdiSupportedRates.vhtTxHighestDataRate = wdaStaParams->supportedRates.vhtTxHighestDataRate;
4334#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07004335 for(i = 0;i <SIR_MAC_MAX_SUPPORTED_MCS_SET;i++)
4336 {
4337 wdiStaParams->wdiSupportedRates.aSupportedMCSSet[i] =
4338 wdaStaParams->supportedRates.supportedMCSSet[i];
4339 }
4340 wdiStaParams->wdiSupportedRates.aRxHighestDataRate =
4341 wdaStaParams->supportedRates.rxHighestDataRate;
4342
4343 wdiStaParams->ucRMFEnabled = wdaStaParams->rmfEnabled;
4344
4345 wdiStaParams->wdiAction = wdaStaParams->updateSta;
4346
4347 wdiStaParams->ucAPSD = wdaStaParams->uAPSD;
4348 wdiStaParams->ucMaxSPLen = wdaStaParams->maxSPLen;
4349 wdiStaParams->ucGreenFieldCapable = wdaStaParams->greenFieldCapable;
4350
4351 wdiStaParams->ucDelayedBASupport = wdaStaParams->delBASupport;
4352 wdiStaParams->us32MaxAmpduDuratio = wdaStaParams->us32MaxAmpduDuration;
4353 wdiStaParams->ucDsssCckMode40Mhz = wdaStaParams->fDsssCckMode40Mhz;
4354 wdiStaParams->ucEncryptType = wdaStaParams->encryptType;
Jeff Johnson295189b2012-06-20 16:38:30 -07004355 wdiStaParams->ucP2pCapableSta = wdaStaParams->p2pCapableSta;
Jeff Johnsone7245742012-09-05 17:12:55 -07004356#ifdef WLAN_FEATURE_11AC
4357 wdiStaParams->ucVhtCapableSta = wdaStaParams->vhtCapable;
4358 wdiStaParams->ucVhtTxChannelWidthSet = wdaStaParams->vhtTxChannelWidthSet;
Shailender Karmuchi08f87c22013-01-17 12:51:24 -08004359 wdiStaParams->ucVhtTxBFEnabled = wdaStaParams->vhtTxBFCapable;
Jeff Johnsone7245742012-09-05 17:12:55 -07004360#endif
Gopichand Nakkalab2d2c312013-01-04 11:41:02 -08004361 wdiStaParams->ucHtLdpcEnabled= wdaStaParams->htLdpcCapable;
4362 wdiStaParams->ucVhtLdpcEnabled = wdaStaParams->vhtLdpcCapable;
Jeff Johnson295189b2012-06-20 16:38:30 -07004363 return ;
4364}
Jeff Johnson295189b2012-06-20 16:38:30 -07004365/*
4366 * -------------------------------------------------------------------------
4367 * CFG update to WDI
4368 * -------------------------------------------------------------------------
4369 */
4370
4371 /*
4372 * FUNCTION: WDA_ConvertWniCfgIdToHALCfgId
4373 * Convert the WNI CFG ID to HAL CFG ID
4374 */
Jeff Johnsone7245742012-09-05 17:12:55 -07004375static inline v_U8_t WDA_ConvertWniCfgIdToHALCfgId(v_U32_t wniCfgId)
Jeff Johnson295189b2012-06-20 16:38:30 -07004376{
4377 switch(wniCfgId)
4378 {
4379 case WNI_CFG_STA_ID:
4380 return QWLAN_HAL_CFG_STA_ID;
4381 case WNI_CFG_CURRENT_TX_ANTENNA:
4382 return QWLAN_HAL_CFG_CURRENT_TX_ANTENNA;
4383 case WNI_CFG_CURRENT_RX_ANTENNA:
4384 return QWLAN_HAL_CFG_CURRENT_RX_ANTENNA;
4385 case WNI_CFG_LOW_GAIN_OVERRIDE:
4386 return QWLAN_HAL_CFG_LOW_GAIN_OVERRIDE;
4387 case WNI_CFG_POWER_STATE_PER_CHAIN:
4388 return QWLAN_HAL_CFG_POWER_STATE_PER_CHAIN;
4389 case WNI_CFG_CAL_PERIOD:
4390 return QWLAN_HAL_CFG_CAL_PERIOD;
4391 case WNI_CFG_CAL_CONTROL:
4392 return QWLAN_HAL_CFG_CAL_CONTROL;
4393 case WNI_CFG_PROXIMITY:
4394 return QWLAN_HAL_CFG_PROXIMITY;
4395 case WNI_CFG_NETWORK_DENSITY:
4396 return QWLAN_HAL_CFG_NETWORK_DENSITY;
4397 case WNI_CFG_MAX_MEDIUM_TIME:
4398 return QWLAN_HAL_CFG_MAX_MEDIUM_TIME;
4399 case WNI_CFG_MAX_MPDUS_IN_AMPDU:
4400 return QWLAN_HAL_CFG_MAX_MPDUS_IN_AMPDU;
4401 case WNI_CFG_RTS_THRESHOLD:
4402 return QWLAN_HAL_CFG_RTS_THRESHOLD;
4403 case WNI_CFG_SHORT_RETRY_LIMIT:
4404 return QWLAN_HAL_CFG_SHORT_RETRY_LIMIT;
4405 case WNI_CFG_LONG_RETRY_LIMIT:
4406 return QWLAN_HAL_CFG_LONG_RETRY_LIMIT;
4407 case WNI_CFG_FRAGMENTATION_THRESHOLD:
4408 return QWLAN_HAL_CFG_FRAGMENTATION_THRESHOLD;
4409 case WNI_CFG_DYNAMIC_THRESHOLD_ZERO:
4410 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ZERO;
4411 case WNI_CFG_DYNAMIC_THRESHOLD_ONE:
4412 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_ONE;
4413 case WNI_CFG_DYNAMIC_THRESHOLD_TWO:
4414 return QWLAN_HAL_CFG_DYNAMIC_THRESHOLD_TWO;
4415 case WNI_CFG_FIXED_RATE:
4416 return QWLAN_HAL_CFG_FIXED_RATE;
4417 case WNI_CFG_RETRYRATE_POLICY:
4418 return QWLAN_HAL_CFG_RETRYRATE_POLICY;
4419 case WNI_CFG_RETRYRATE_SECONDARY:
4420 return QWLAN_HAL_CFG_RETRYRATE_SECONDARY;
4421 case WNI_CFG_RETRYRATE_TERTIARY:
4422 return QWLAN_HAL_CFG_RETRYRATE_TERTIARY;
4423 case WNI_CFG_FORCE_POLICY_PROTECTION:
4424 return QWLAN_HAL_CFG_FORCE_POLICY_PROTECTION;
4425 case WNI_CFG_FIXED_RATE_MULTICAST_24GHZ:
4426 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ;
4427 case WNI_CFG_FIXED_RATE_MULTICAST_5GHZ:
4428 return QWLAN_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ;
4429 case WNI_CFG_DEFAULT_RATE_INDEX_24GHZ:
4430 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ;
4431 case WNI_CFG_DEFAULT_RATE_INDEX_5GHZ:
4432 return QWLAN_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ;
4433 case WNI_CFG_MAX_BA_SESSIONS:
4434 return QWLAN_HAL_CFG_MAX_BA_SESSIONS;
4435 case WNI_CFG_PS_DATA_INACTIVITY_TIMEOUT:
4436 return QWLAN_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT;
4437 case WNI_CFG_PS_ENABLE_BCN_FILTER:
4438 return QWLAN_HAL_CFG_PS_ENABLE_BCN_FILTER;
4439 case WNI_CFG_PS_ENABLE_RSSI_MONITOR:
4440 return QWLAN_HAL_CFG_PS_ENABLE_RSSI_MONITOR;
4441 case WNI_CFG_NUM_BEACON_PER_RSSI_AVERAGE:
4442 return QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
4443 case WNI_CFG_STATS_PERIOD:
4444 return QWLAN_HAL_CFG_STATS_PERIOD;
4445 case WNI_CFG_CFP_MAX_DURATION:
4446 return QWLAN_HAL_CFG_CFP_MAX_DURATION;
4447#if 0 /*This is not part of CFG*/
4448 case WNI_CFG_FRAME_TRANS_ENABLED:
4449 return QWLAN_HAL_CFG_FRAME_TRANS_ENABLED;
4450#endif
4451 case WNI_CFG_DTIM_PERIOD:
4452 return QWLAN_HAL_CFG_DTIM_PERIOD;
4453 case WNI_CFG_EDCA_WME_ACBK:
4454 return QWLAN_HAL_CFG_EDCA_WMM_ACBK;
4455 case WNI_CFG_EDCA_WME_ACBE:
4456 return QWLAN_HAL_CFG_EDCA_WMM_ACBE;
4457 case WNI_CFG_EDCA_WME_ACVI:
4458 return QWLAN_HAL_CFG_EDCA_WMM_ACVI;
4459 case WNI_CFG_EDCA_WME_ACVO:
4460 return QWLAN_HAL_CFG_EDCA_WMM_ACVO;
4461#if 0
4462 case WNI_CFG_TELE_BCN_WAKEUP_EN:
4463 return QWLAN_HAL_CFG_TELE_BCN_WAKEUP_EN;
4464 case WNI_CFG_TELE_BCN_TRANS_LI:
4465 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI;
4466 case WNI_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS:
4467 return QWLAN_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS;
4468 case WNI_CFG_TELE_BCN_MAX_LI:
4469 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI;
4470 case WNI_CFG_TELE_BCN_MAX_LI_IDLE_BCNS:
4471 return QWLAN_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS;
4472#endif
4473 case WNI_CFG_ENABLE_CLOSE_LOOP:
4474 return QWLAN_HAL_CFG_ENABLE_CLOSE_LOOP;
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -08004475 case WNI_CFG_ENABLE_LPWR_IMG_TRANSITION:
4476 return QWLAN_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION;
Jeff Johnson295189b2012-06-20 16:38:30 -07004477 default:
4478 {
4479 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004480 "There is no HAL CFG Id corresponding to WNI CFG Id: %d",
Jeff Johnson295189b2012-06-20 16:38:30 -07004481 wniCfgId);
4482 return VOS_STATUS_E_INVAL;
4483 }
4484 }
4485}
Jeff Johnson295189b2012-06-20 16:38:30 -07004486/*
4487 * FUNCTION: WDA_UpdateCfgCallback
4488 *
4489 */
4490void WDA_UpdateCfgCallback(WDI_Status wdiStatus, void* pUserData)
4491{
4492 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
4493 WDI_UpdateCfgReqParamsType *wdiCfgParam =
4494 (WDI_UpdateCfgReqParamsType *)pWDA->wdaWdiCfgApiMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004496 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004497 /*
4498 * currently there is no response message is expected between PE and
4499 * WDA, Failure return from WDI is a ASSERT condition
4500 */
4501 if(WDI_STATUS_SUCCESS != wdiStatus)
4502 {
4503 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004504 "%s: CFG (%d) config failure", __func__,
Jeff Johnson295189b2012-06-20 16:38:30 -07004505 ((tHalCfg *)(wdiCfgParam->pConfigBuffer))->type);
4506 }
4507
4508 vos_mem_free(wdiCfgParam->pConfigBuffer) ;
4509 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4510 pWDA->wdaWdiCfgApiMsgParam = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07004511 return ;
4512}
Jeff Johnson295189b2012-06-20 16:38:30 -07004513/*
4514 * FUNCTION: WDA_UpdateCfg
4515 *
4516 */
4517VOS_STATUS WDA_UpdateCfg(tWDA_CbContext *pWDA, tSirMsgQ *cfgParam)
4518{
4519
4520 WDI_Status status = WDI_STATUS_SUCCESS ;
4521 tANI_U32 val =0;
4522 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
4523 tHalCfg *configData;
4524 WDI_UpdateCfgReqParamsType *wdiCfgReqParam = NULL ;
4525 tANI_U8 *configDataValue;
Jeff Johnson295189b2012-06-20 16:38:30 -07004526 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004527 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004528 if (NULL == pMac )
4529 {
4530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004531 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004532 return VOS_STATUS_E_FAILURE;
4533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004534 if(WDA_START_STATE != pWDA->wdaState)
4535 {
4536 return VOS_STATUS_E_FAILURE;
4537 }
4538
4539 if(NULL != pWDA->wdaWdiCfgApiMsgParam)
4540 {
4541 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004542 "%s:wdaWdiCfgApiMsgParam is not NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004543 VOS_ASSERT(0);
4544 return VOS_STATUS_E_FAILURE;
4545 }
4546
4547 wdiCfgReqParam = (WDI_UpdateCfgReqParamsType *)vos_mem_malloc(
4548 sizeof(WDI_UpdateCfgReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004549 if(NULL == wdiCfgReqParam)
4550 {
4551 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004552 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004553 VOS_ASSERT(0);
4554 return VOS_STATUS_E_NOMEM;
4555 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004556 wdiCfgReqParam->pConfigBuffer = vos_mem_malloc(sizeof(tHalCfg) +
4557 sizeof(tANI_U32)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004558 if(NULL == wdiCfgReqParam->pConfigBuffer)
4559 {
4560 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004561 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004562 vos_mem_free(wdiCfgReqParam);
4563 VOS_ASSERT(0);
4564 return VOS_STATUS_E_NOMEM;
4565 }
4566
4567 /*convert the WNI CFG Id to HAL CFG Id*/
4568 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->type =
4569 WDA_ConvertWniCfgIdToHALCfgId(cfgParam->bodyval);
4570
4571 /*TODO: revisit this for handling string parameters */
4572 if (wlan_cfgGetInt(pMac, (tANI_U16) cfgParam->bodyval,
4573 &val) != eSIR_SUCCESS)
4574 {
4575 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004576 "Failed to cfg get id %d", cfgParam->bodyval);
Jeff Johnson295189b2012-06-20 16:38:30 -07004577 vos_mem_free(wdiCfgReqParam->pConfigBuffer);
4578 vos_mem_free(wdiCfgReqParam);
4579 return eSIR_FAILURE;
4580 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004581 ((tHalCfg *)wdiCfgReqParam->pConfigBuffer)->length = sizeof(tANI_U32);
4582 configData =((tHalCfg *)wdiCfgReqParam->pConfigBuffer) ;
4583 configDataValue = ((tANI_U8 *)configData + sizeof(tHalCfg));
4584 vos_mem_copy( configDataValue, &val, sizeof(tANI_U32));
4585 wdiCfgReqParam->wdiReqStatusCB = NULL ;
4586
4587 /* store Params pass it to WDI */
4588 pWDA->wdaWdiCfgApiMsgParam = (void *)wdiCfgReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004589#ifdef FEATURE_HAL_SUPPORT_DYNAMIC_UPDATE_CFG
4590 status = WDI_UpdateCfgReq(wdiCfgReqParam,
4591 (WDI_UpdateCfgRspCb )WDA_UpdateCfgCallback, pWDA) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004592 if(IS_WDI_STATUS_FAILURE(status))
4593 {
4594 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4595 "Failure in Update CFG WDI API, free all the memory " );
4596 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4597 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4598 pWDA->wdaWdiCfgApiMsgParam = NULL;
4599 /* Failure is not expected */
4600 VOS_ASSERT(0) ;
4601 }
4602#else
4603 vos_mem_free(wdiCfgReqParam->pConfigBuffer) ;
4604 vos_mem_free(pWDA->wdaWdiCfgApiMsgParam) ;
4605 pWDA->wdaWdiCfgApiMsgParam = NULL;
4606#endif
4607 return CONVERT_WDI2VOS_STATUS(status) ;
4608}
4609
Jeff Johnson295189b2012-06-20 16:38:30 -07004610VOS_STATUS WDA_GetWepKeysFromCfg( tWDA_CbContext *pWDA,
4611 v_U8_t *pDefaultKeyId,
4612 v_U8_t *pNumKeys,
4613 WDI_KeysType *pWdiKeys )
4614{
4615 v_U32_t i, j, defKeyId = 0;
4616 v_U32_t val = SIR_MAC_KEY_LENGTH;
4617 VOS_STATUS status = WDI_STATUS_SUCCESS;
4618 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004619 if (NULL == pMac )
4620 {
4621 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004622 "%s: Invoked with invalid MAC context ", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07004623 return VOS_STATUS_E_FAILURE;
4624 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004625 if( eSIR_SUCCESS != wlan_cfgGetInt( pMac, WNI_CFG_WEP_DEFAULT_KEYID,
4626 &defKeyId ))
4627 {
4628 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4629 "Unable to retrieve defaultKeyId from CFG. Defaulting to 0...");
4630 }
4631
4632 *pDefaultKeyId = (v_U8_t)defKeyId;
Jeff Johnson295189b2012-06-20 16:38:30 -07004633 /* Need to extract ALL of the configured WEP Keys */
4634 for( i = 0, j = 0; i < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS; i++ )
4635 {
4636 val = SIR_MAC_KEY_LENGTH;
4637 if( eSIR_SUCCESS != wlan_cfgGetStr( pMac,
4638 (v_U16_t) (WNI_CFG_WEP_DEFAULT_KEY_1 + i),
4639 pWdiKeys[j].key,
4640 &val ))
4641 {
4642 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08004643 "WEP Key index [%d] may not configured in CFG",i);
Jeff Johnson295189b2012-06-20 16:38:30 -07004644 }
4645 else
4646 {
4647 pWdiKeys[j].keyId = (tANI_U8) i;
4648 /*
4649 * Actually, a DC (Don't Care) because
4650 * this is determined (and set) by PE/MLME
4651 */
4652 pWdiKeys[j].unicast = 0;
4653 /*
4654 * Another DC (Don't Care)
4655 */
4656 pWdiKeys[j].keyDirection = eSIR_TX_RX;
4657 /* Another DC (Don't Care). Unused for WEP */
4658 pWdiKeys[j].paeRole = 0;
4659 /* Determined from wlan_cfgGetStr() above.*/
4660 pWdiKeys[j].keyLength = (tANI_U16) val;
Jeff Johnson295189b2012-06-20 16:38:30 -07004661 j++;
4662 *pNumKeys = (tANI_U8) j;
4663 }
4664 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004665 return status;
4666}
Jeff Johnson295189b2012-06-20 16:38:30 -07004667/*
4668 * FUNCTION: WDA_SetBssKeyReqCallback
4669 * send SET BSS key RSP back to PE
4670 */
4671void WDA_SetBssKeyReqCallback(WDI_Status status, void* pUserData)
4672{
4673 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4674 tWDA_CbContext *pWDA;
4675 tSetBssKeyParams *setBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004677 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004678 if(NULL == pWdaParams)
4679 {
4680 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004681 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004682 VOS_ASSERT(0) ;
4683 return ;
4684 }
4685 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4686 setBssKeyParams = (tSetBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004687 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4688 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004689 setBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004690 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004691 return ;
4692}
Jeff Johnson295189b2012-06-20 16:38:30 -07004693/*
4694 * FUNCTION: WDA_ProcessSetBssKeyReq
4695 * Request to WDI for programming the BSS key( key for
4696 * broadcast/multicast frames Encryption)
4697 */
4698VOS_STATUS WDA_ProcessSetBssKeyReq(tWDA_CbContext *pWDA,
4699 tSetBssKeyParams *setBssKeyParams )
4700{
4701 WDI_Status status = WDI_STATUS_SUCCESS ;
4702 WDI_SetBSSKeyReqParamsType *wdiSetBssKeyParam =
4703 (WDI_SetBSSKeyReqParamsType *)vos_mem_malloc(
4704 sizeof(WDI_SetBSSKeyReqParamsType)) ;
4705 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004706 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004707 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004708 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004709 if(NULL == wdiSetBssKeyParam)
4710 {
4711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004712 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004713 VOS_ASSERT(0);
4714 return VOS_STATUS_E_NOMEM;
4715 }
4716 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4717 if(NULL == pWdaParams)
4718 {
4719 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004720 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004721 VOS_ASSERT(0);
4722 vos_mem_free(wdiSetBssKeyParam);
4723 return VOS_STATUS_E_NOMEM;
4724 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004725 vos_mem_zero(wdiSetBssKeyParam, sizeof(WDI_SetBSSKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004726 /* copy set BSS params to WDI structure */
4727 wdiSetBssKeyParam->wdiBSSKeyInfo.ucBssIdx = setBssKeyParams->bssIdx;
4728 wdiSetBssKeyParam->wdiBSSKeyInfo.wdiEncType = setBssKeyParams->encType;
4729 wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys = setBssKeyParams->numKeys;
Jeff Johnson295189b2012-06-20 16:38:30 -07004730 if(setBssKeyParams->encType != eSIR_ED_NONE)
4731 {
4732 if( setBssKeyParams->numKeys == 0 &&
4733 (( setBssKeyParams->encType == eSIR_ED_WEP40)||
4734 setBssKeyParams->encType == eSIR_ED_WEP104))
4735 {
4736 tANI_U8 defaultKeyId = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07004737 WDA_GetWepKeysFromCfg( pWDA, &defaultKeyId,
4738 &wdiSetBssKeyParam->wdiBSSKeyInfo.ucNumKeys,
4739 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys );
4740 }
4741 else
4742 {
4743 for( keyIndex=0; keyIndex < setBssKeyParams->numKeys; keyIndex++)
4744 {
4745 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyId =
4746 setBssKeyParams->key[keyIndex].keyId;
4747 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].unicast =
4748 setBssKeyParams->key[keyIndex].unicast;
4749 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyDirection =
4750 setBssKeyParams->key[keyIndex].keyDirection;
4751 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyRsc,
4752 setBssKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4753 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].paeRole =
4754 setBssKeyParams->key[keyIndex].paeRole;
4755 wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].keyLength =
4756 setBssKeyParams->key[keyIndex].keyLength;
4757 vos_mem_copy(wdiSetBssKeyParam->wdiBSSKeyInfo.aKeys[keyIndex].key,
4758 setBssKeyParams->key[keyIndex].key,
4759 SIR_MAC_MAX_KEY_LENGTH);
4760 }
4761 }
4762 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004763 wdiSetBssKeyParam->wdiBSSKeyInfo.ucSingleTidRc =
4764 setBssKeyParams->singleTidRc;
4765 wdiSetBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004766 /* Store set key pointer, as this will be used for response */
4767 /* store Params pass it to WDI */
4768 pWdaParams->pWdaContext = pWDA;
4769 pWdaParams->wdaMsgParam = setBssKeyParams;
4770 pWdaParams->wdaWdiApiMsgParam = wdiSetBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004771 status = WDI_SetBSSKeyReq(wdiSetBssKeyParam,
4772 (WDI_SetBSSKeyRspCb)WDA_SetBssKeyReqCallback ,pWdaParams);
4773
4774 if(IS_WDI_STATUS_FAILURE(status))
4775 {
4776 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4777 "Failure in Set BSS Key Req WDI API, free all the memory " );
4778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4779 vos_mem_free(pWdaParams) ;
4780 setBssKeyParams->status = eSIR_FAILURE ;
4781 WDA_SendMsg(pWDA, WDA_SET_BSSKEY_RSP, (void *)setBssKeyParams, 0) ;
4782 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004783 return CONVERT_WDI2VOS_STATUS(status) ;
4784}
Jeff Johnson295189b2012-06-20 16:38:30 -07004785/*
4786 * FUNCTION: WDA_RemoveBssKeyReqCallback
4787 * send SET BSS key RSP back to PE
4788 */
4789void WDA_RemoveBssKeyReqCallback(WDI_Status status, void* pUserData)
4790{
4791 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4792 tWDA_CbContext *pWDA;
4793 tRemoveBssKeyParams *removeBssKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004795 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004796 if(NULL == pWdaParams)
4797 {
4798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004799 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004800 VOS_ASSERT(0) ;
4801 return ;
4802 }
4803 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4804 removeBssKeyParams = (tRemoveBssKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004805 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4806 vos_mem_free(pWdaParams) ;
4807
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004808 removeBssKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004809 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004810 return ;
4811}
Jeff Johnson295189b2012-06-20 16:38:30 -07004812/*
4813 * FUNCTION: WDA_ProcessRemoveBssKeyReq
4814 * Request to WDI to remove the BSS key( key for broadcast/multicast
4815 * frames Encryption)
4816 */
4817VOS_STATUS WDA_ProcessRemoveBssKeyReq(tWDA_CbContext *pWDA,
4818 tRemoveBssKeyParams *removeBssKeyParams )
4819{
4820 WDI_Status status = WDI_STATUS_SUCCESS ;
4821 WDI_RemoveBSSKeyReqParamsType *wdiRemoveBssKeyParam =
4822 (WDI_RemoveBSSKeyReqParamsType *)vos_mem_malloc(
4823 sizeof(WDI_RemoveBSSKeyReqParamsType)) ;
4824 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004827 if(NULL == wdiRemoveBssKeyParam)
4828 {
4829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004830 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004831 VOS_ASSERT(0);
4832 return VOS_STATUS_E_NOMEM;
4833 }
4834 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4835 if(NULL == pWdaParams)
4836 {
4837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004839 VOS_ASSERT(0);
4840 vos_mem_free(wdiRemoveBssKeyParam);
4841 return VOS_STATUS_E_NOMEM;
4842 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004843 /* copy Remove BSS key params to WDI structure*/
4844 wdiRemoveBssKeyParam->wdiKeyInfo.ucBssIdx = removeBssKeyParams->bssIdx;
4845 wdiRemoveBssKeyParam->wdiKeyInfo.wdiEncType = removeBssKeyParams->encType;
4846 wdiRemoveBssKeyParam->wdiKeyInfo.ucKeyId = removeBssKeyParams->keyId;
4847 wdiRemoveBssKeyParam->wdiKeyInfo.wdiWEPType = removeBssKeyParams->wepType;
4848 wdiRemoveBssKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004849 /* Store remove key pointer, as this will be used for response */
4850 /* store Params pass it to WDI */
4851 pWdaParams->pWdaContext = pWDA;
4852 pWdaParams->wdaMsgParam = removeBssKeyParams;
4853 pWdaParams->wdaWdiApiMsgParam = wdiRemoveBssKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004854 status = WDI_RemoveBSSKeyReq(wdiRemoveBssKeyParam,
4855 (WDI_RemoveBSSKeyRspCb)WDA_RemoveBssKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004856 if(IS_WDI_STATUS_FAILURE(status))
4857 {
4858 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4859 "Failure in Remove BSS Key Req WDI API, free all the memory " );
4860 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4861 vos_mem_free(pWdaParams) ;
4862 removeBssKeyParams->status = eSIR_FAILURE ;
4863 WDA_SendMsg(pWDA, WDA_REMOVE_BSSKEY_RSP, (void *)removeBssKeyParams, 0) ;
4864 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004865 return CONVERT_WDI2VOS_STATUS(status) ;
4866}
Jeff Johnson295189b2012-06-20 16:38:30 -07004867/*
4868 * FUNCTION: WDA_SetBssKeyReqCallback
4869 * send SET BSS key RSP back to PE
4870 */
4871void WDA_SetStaKeyReqCallback(WDI_Status status, void* pUserData)
4872{
4873 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4874 tWDA_CbContext *pWDA;
4875 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07004876 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004877 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004878 if(NULL == pWdaParams)
4879 {
4880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004881 ,"%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004882 VOS_ASSERT(0) ;
4883 return ;
4884 }
4885 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
4886 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004887 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4888 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07004889 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004890 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004891 return ;
4892}
Jeff Johnson295189b2012-06-20 16:38:30 -07004893/*
4894 * FUNCTION: WDA_ProcessSetStaKeyReq
4895 * Request to WDI for programming the STA key( key for Unicast frames
4896 * Encryption)
4897 */
4898VOS_STATUS WDA_ProcessSetStaKeyReq(tWDA_CbContext *pWDA,
4899 tSetStaKeyParams *setStaKeyParams )
4900{
4901 WDI_Status status = WDI_STATUS_SUCCESS ;
4902 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
4903 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
4904 sizeof(WDI_SetSTAKeyReqParamsType)) ;
4905 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004906 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07004907 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004908 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004909 if(NULL == wdiSetStaKeyParam)
4910 {
4911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004912 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004913 VOS_ASSERT(0);
4914 return VOS_STATUS_E_NOMEM;
4915 }
4916 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
4917 if(NULL == pWdaParams)
4918 {
4919 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07004920 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07004921 VOS_ASSERT(0);
4922 vos_mem_free(wdiSetStaKeyParam);
4923 return VOS_STATUS_E_NOMEM;
4924 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004925 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07004926 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07004927 /* copy set STA key params to WDI structure */
4928 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
4929 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
4930 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
4931 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07004932 if(setStaKeyParams->encType != eSIR_ED_NONE)
4933 {
Jeff Johnson43971f52012-07-17 12:26:56 -07004934 if( (wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType == WDI_WEP_STATIC) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07004935 (WDA_INVALID_KEY_INDEX == setStaKeyParams->defWEPIdx) &&
4936 (eSYSTEM_AP_ROLE != pWDA->wdaGlobalSystemRole))
4937 {
4938 WDA_GetWepKeysFromCfg( pWDA,
4939 &wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx,
4940 &wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys,
4941 wdiSetStaKeyParam->wdiKeyInfo.wdiKey );
4942 }
4943 else
4944 {
Jeff Johnson295189b2012-06-20 16:38:30 -07004945 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
4946 keyIndex++)
4947 {
4948 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
4949 setStaKeyParams->key[keyIndex].keyId;
4950 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
4951 setStaKeyParams->key[keyIndex].unicast;
4952 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
4953 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07004954 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
4955 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
4956 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
4957 setStaKeyParams->key[keyIndex].paeRole;
4958 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
4959 setStaKeyParams->key[keyIndex].keyLength;
4960 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
4961 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
4962 /* set default index to index which have key direction as WDI_TX_DEFAULT */
4963 if (WDI_TX_DEFAULT == wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection)
4964 {
4965 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = keyIndex;
4966 }
4967 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004968 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
4969 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07004970 }
4971 }
4972 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
4973 wdiSetStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07004974 /* Store set key pointer, as this will be used for response */
4975 /* store Params pass it to WDI */
4976 pWdaParams->pWdaContext = pWDA;
4977 pWdaParams->wdaMsgParam = setStaKeyParams;
4978 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07004979 status = WDI_SetSTAKeyReq(wdiSetStaKeyParam,
4980 (WDI_SetSTAKeyRspCb)WDA_SetStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07004981 if(IS_WDI_STATUS_FAILURE(status))
4982 {
4983 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
4984 "Failure in set STA Key Req WDI API, free all the memory " );
4985 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
4986 vos_mem_free(pWdaParams) ;
4987 setStaKeyParams->status = eSIR_FAILURE ;
4988 WDA_SendMsg(pWDA, WDA_SET_STAKEY_RSP, (void *)setStaKeyParams, 0) ;
4989 }
Jeff Johnson295189b2012-06-20 16:38:30 -07004990 return CONVERT_WDI2VOS_STATUS(status) ;
4991}
Jeff Johnson295189b2012-06-20 16:38:30 -07004992/*
4993 * FUNCTION: WDA_SetBcastStaKeyReqCallback
4994 * send SET Bcast STA key RSP back to PE
4995 */
4996void WDA_SetBcastStaKeyReqCallback(WDI_Status status, void* pUserData)
4997{
4998 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
4999 tWDA_CbContext *pWDA;
5000 tSetStaKeyParams *setStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005001 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005002 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005003 if(NULL == pWdaParams)
5004 {
5005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005006 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005007 VOS_ASSERT(0) ;
5008 return ;
5009 }
5010 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5011 setStaKeyParams = (tSetStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5013 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005014 setStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005015 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005016 return ;
5017}
5018
Jeff Johnson295189b2012-06-20 16:38:30 -07005019/*
5020 * FUNCTION: WDA_ProcessSetBcastStaKeyReq
5021 * Request to WDI for programming the Bcast STA key( key for Broadcast frames
5022 * Encryption)
5023 */
5024VOS_STATUS WDA_ProcessSetBcastStaKeyReq(tWDA_CbContext *pWDA,
5025 tSetStaKeyParams *setStaKeyParams )
5026{
5027 WDI_Status status = WDI_STATUS_SUCCESS ;
5028 WDI_SetSTAKeyReqParamsType *wdiSetStaKeyParam =
5029 (WDI_SetSTAKeyReqParamsType *)vos_mem_malloc(
5030 sizeof(WDI_SetSTAKeyReqParamsType)) ;
5031 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005032 v_U8_t keyIndex;
Jeff Johnson295189b2012-06-20 16:38:30 -07005033 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005034 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005035 if(NULL == wdiSetStaKeyParam)
5036 {
5037 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005038 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005039 VOS_ASSERT(0);
5040 return VOS_STATUS_E_NOMEM;
5041 }
5042 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5043 if(NULL == pWdaParams)
5044 {
5045 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005046 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005047 VOS_ASSERT(0);
5048 vos_mem_free(wdiSetStaKeyParam);
5049 return VOS_STATUS_E_NOMEM;
5050 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005051 vos_mem_set(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType), 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005052 vos_mem_zero(wdiSetStaKeyParam, sizeof(WDI_SetSTAKeyReqParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005053 /* copy set STA key params to WDI structure */
5054 wdiSetStaKeyParam->wdiKeyInfo.ucSTAIdx = setStaKeyParams->staIdx;
5055 wdiSetStaKeyParam->wdiKeyInfo.wdiEncType = setStaKeyParams->encType;
5056 wdiSetStaKeyParam->wdiKeyInfo.wdiWEPType = setStaKeyParams->wepType;
5057 wdiSetStaKeyParam->wdiKeyInfo.ucDefWEPIdx = setStaKeyParams->defWEPIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07005058 if(setStaKeyParams->encType != eSIR_ED_NONE)
5059 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005060 for( keyIndex=0; keyIndex < SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
5061 keyIndex++)
5062 {
5063 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyId =
5064 setStaKeyParams->key[keyIndex].keyId;
5065 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].unicast =
5066 setStaKeyParams->key[keyIndex].unicast;
5067 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyDirection =
5068 setStaKeyParams->key[keyIndex].keyDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005069 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyRsc,
5070 setStaKeyParams->key[keyIndex].keyRsc, WLAN_MAX_KEY_RSC_LEN);
5071 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].paeRole =
5072 setStaKeyParams->key[keyIndex].paeRole;
5073 wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].keyLength =
5074 setStaKeyParams->key[keyIndex].keyLength;
5075 vos_mem_copy(wdiSetStaKeyParam->wdiKeyInfo.wdiKey[keyIndex].key,
5076 setStaKeyParams->key[keyIndex].key, SIR_MAC_MAX_KEY_LENGTH);
5077 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005078 wdiSetStaKeyParam->wdiKeyInfo.ucNumKeys =
5079 SIR_MAC_MAX_NUM_OF_DEFAULT_KEYS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005080 }
5081 wdiSetStaKeyParam->wdiKeyInfo.ucSingleTidRc = setStaKeyParams->singleTidRc;
Jeff Johnson295189b2012-06-20 16:38:30 -07005082 /* Store set key pointer, as this will be used for response */
5083 /* store Params pass it to WDI */
5084 pWdaParams->pWdaContext = pWDA;
5085 pWdaParams->wdaMsgParam = setStaKeyParams;
5086 pWdaParams->wdaWdiApiMsgParam = wdiSetStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005087 status = WDI_SetSTABcastKeyReq(wdiSetStaKeyParam,
5088 (WDI_SetSTAKeyRspCb)WDA_SetBcastStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005089 if(IS_WDI_STATUS_FAILURE(status))
5090 {
5091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5092 "Failure in set BCAST STA Key Req WDI API, free all the memory " );
5093 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5094 vos_mem_free(pWdaParams) ;
5095 setStaKeyParams->status = eSIR_FAILURE ;
5096 WDA_SendMsg(pWDA, WDA_SET_STA_BCASTKEY_RSP, (void *)setStaKeyParams, 0) ;
5097 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005098 return CONVERT_WDI2VOS_STATUS(status) ;
5099}
Jeff Johnson295189b2012-06-20 16:38:30 -07005100/*
5101 * FUNCTION: WDA_RemoveStaKeyReqCallback
5102 * send SET BSS key RSP back to PE
5103 */
5104void WDA_RemoveStaKeyReqCallback(WDI_Status status, void* pUserData)
5105{
5106 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5107 tWDA_CbContext *pWDA;
5108 tRemoveStaKeyParams *removeStaKeyParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005110 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005111 if(NULL == pWdaParams)
5112 {
5113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005114 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005115 VOS_ASSERT(0) ;
5116 return ;
5117 }
5118 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5119 removeStaKeyParams = (tRemoveStaKeyParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005120 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5121 vos_mem_free(pWdaParams) ;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005122 removeStaKeyParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005123 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005124 return ;
5125}
5126
Jeff Johnson295189b2012-06-20 16:38:30 -07005127/*
5128 * FUNCTION: WDA_ProcessRemoveStaKeyReq
5129 * Request to WDI to remove the STA key( key for Unicast frames Encryption)
5130 */
5131VOS_STATUS WDA_ProcessRemoveStaKeyReq(tWDA_CbContext *pWDA,
5132 tRemoveStaKeyParams *removeStaKeyParams )
5133{
5134 WDI_Status status = WDI_STATUS_SUCCESS ;
5135 WDI_RemoveSTAKeyReqParamsType *wdiRemoveStaKeyParam =
5136 (WDI_RemoveSTAKeyReqParamsType *)vos_mem_malloc(
5137 sizeof(WDI_RemoveSTAKeyReqParamsType)) ;
5138 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005140 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005141 if(NULL == wdiRemoveStaKeyParam)
5142 {
5143 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005144 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005145 VOS_ASSERT(0);
5146 return VOS_STATUS_E_NOMEM;
5147 }
5148 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5149 if(NULL == pWdaParams)
5150 {
5151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005152 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005153 VOS_ASSERT(0);
5154 vos_mem_free(wdiRemoveStaKeyParam);
5155 return VOS_STATUS_E_NOMEM;
5156 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005157 /* copy remove STA key params to WDI structure*/
5158 wdiRemoveStaKeyParam->wdiKeyInfo.ucSTAIdx = removeStaKeyParams->staIdx;
5159 wdiRemoveStaKeyParam->wdiKeyInfo.wdiEncType = removeStaKeyParams->encType;
5160 wdiRemoveStaKeyParam->wdiKeyInfo.ucKeyId = removeStaKeyParams->keyId;
5161 wdiRemoveStaKeyParam->wdiKeyInfo.ucUnicast = removeStaKeyParams->unicast;
5162 wdiRemoveStaKeyParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005163 /* Store remove key pointer, as this will be used for response */
5164 /* store Params pass it to WDI */
5165 pWdaParams->pWdaContext = pWDA;
5166 pWdaParams->wdaMsgParam = removeStaKeyParams;
5167 pWdaParams->wdaWdiApiMsgParam = wdiRemoveStaKeyParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005168 status = WDI_RemoveSTAKeyReq(wdiRemoveStaKeyParam,
5169 (WDI_RemoveSTAKeyRspCb)WDA_RemoveStaKeyReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005170 if(IS_WDI_STATUS_FAILURE(status))
5171 {
5172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5173 "Failure in remove STA Key Req WDI API, free all the memory " );
5174 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5175 vos_mem_free(pWdaParams) ;
5176 removeStaKeyParams->status = eSIR_FAILURE ;
5177 WDA_SendMsg(pWDA, WDA_REMOVE_STAKEY_RSP, (void *)removeStaKeyParams, 0) ;
5178 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005179 return CONVERT_WDI2VOS_STATUS(status) ;
5180}
Jeff Johnson295189b2012-06-20 16:38:30 -07005181/*
5182 * FUNCTION: WDA_IsHandleSetLinkStateReq
5183 * Update the WDA state and return the status to handle this message or not
5184 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005185WDA_processSetLinkStateStatus WDA_IsHandleSetLinkStateReq(
5186 tWDA_CbContext *pWDA,
5187 tLinkStateParams *linkStateParams)
5188{
5189 WDA_processSetLinkStateStatus status = WDA_PROCESS_SET_LINK_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005190 switch(linkStateParams->state)
5191 {
5192 case eSIR_LINK_PREASSOC_STATE:
5193 case eSIR_LINK_BTAMP_PREASSOC_STATE:
5194 /*
5195 * set the WDA state to PRE ASSOC
5196 * copy the BSSID into pWDA to use it in join request and return,
5197 * No need to handle these messages.
5198 */
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005199 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->bssid) )
5200 {
5201 vos_mem_copy(pWDA->macBSSID,linkStateParams->bssid,
Jeff Johnson295189b2012-06-20 16:38:30 -07005202 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005203 }
5204 else
5205 {
5206 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005207 "%s: BSSID in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005208 VOS_ASSERT(0);
5209 }
5210
5211 if( !WDA_IS_NULL_MAC_ADDRESS(linkStateParams->selfMacAddr) )
5212 {
5213 vos_mem_copy(pWDA->macSTASelf,linkStateParams->selfMacAddr,
Jeff Johnson295189b2012-06-20 16:38:30 -07005214 sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005215 }
5216 else
5217 {
5218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005219 "%s: self mac address in set link state is NULL ", __func__);
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005220 VOS_ASSERT(0);
5221 }
5222
Jeff Johnson295189b2012-06-20 16:38:30 -07005223 /* UMAC is issuing the setlink state with PREASSOC twice (before set
5224 *channel and after ) so reset the WDA state to ready when the second
5225 * time UMAC issue the link state with PREASSOC
5226 */
5227 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
5228 {
5229 /* RESET WDA state back to WDA_READY_STATE */
5230 pWDA->wdaState = WDA_READY_STATE;
5231 }
5232 else
5233 {
5234 pWDA->wdaState = WDA_PRE_ASSOC_STATE;
5235 }
5236 //populate linkState info in WDACbCtxt
5237 pWDA->linkState = linkStateParams->state;
Jeff Johnson295189b2012-06-20 16:38:30 -07005238 break;
Jeff Johnson295189b2012-06-20 16:38:30 -07005239 default:
5240 if(pWDA->wdaState != WDA_READY_STATE)
5241 {
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005242 /*If WDA_SET_LINK_STATE is recieved with any other link state apart
5243 *from eSIR_LINK_PREASSOC_STATE and eSIR_LINK_BTAMP_PREASSOC_STATE when
5244 *pWDA->wdaState is in WDA_PRE_ASSOC_STATE(This can happen only in
5245 *error cases) so reset the WDA state to WDA_READY_STATE to avoid
5246 *the ASSERT in WDA_Stop during module unload.*/
5247 if (pWDA->wdaState == WDA_PRE_ASSOC_STATE)
5248 {
5249 pWDA->wdaState = WDA_READY_STATE;
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005250 /* Don't ignore the set link in this case*/
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005251 }
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005252 else
5253 {
5254 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005255 "Set link state called when WDA is not in READY STATE " );
Madan Mohan Koyyalamudi35287862012-10-22 14:52:46 -07005256 status = WDA_IGNORE_SET_LINK_STATE;
5257 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005258 }
5259 break;
5260 }
5261
5262 return status;
5263}
Jeff Johnson295189b2012-06-20 16:38:30 -07005264/*
5265 * FUNCTION: WDA_SetLinkStateCallback
5266 * call back function for set link state from WDI
5267 */
5268void WDA_SetLinkStateCallback(WDI_Status status, void* pUserData)
5269{
5270 tWDA_CbContext *pWDA;
5271 tLinkStateParams *linkStateParams;
5272 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07005273 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005274 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005275 if(NULL == pWdaParams)
5276 {
5277 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005278 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005279 VOS_ASSERT(0) ;
5280 return ;
5281 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005282 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -07005283 linkStateParams = (tLinkStateParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005284 /*
5285 * In STA mode start the BA activity check timer after association
5286 * and in AP mode start BA activity check timer after BSS start */
5287 if( ((linkStateParams->state == eSIR_LINK_POSTASSOC_STATE) &&
5288 status == WDI_STATUS_SUCCESS) || ((status == WDI_STATUS_SUCCESS) &&
Shailender Karmuchia734f332013-04-19 14:02:48 -07005289 (linkStateParams->state == eSIR_LINK_AP_STATE)) ||
5290 ((status == WDI_STATUS_SUCCESS) &&
5291 (linkStateParams->state == eSIR_LINK_IBSS_STATE)))
Jeff Johnson295189b2012-06-20 16:38:30 -07005292 {
5293 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5294 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005295 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005296 /*
5297 * No respone required for WDA_SET_LINK_STATE so free the request
5298 * param here
5299 */
5300 if( pWdaParams != NULL )
5301 {
5302 if( pWdaParams->wdaWdiApiMsgParam != NULL )
5303 {
5304 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5305 }
5306 vos_mem_free(pWdaParams);
5307 }
5308 return ;
5309}
Jeff Johnson295189b2012-06-20 16:38:30 -07005310/*
5311 * FUNCTION: WDA_ProcessSetLinkState
5312 * Request to WDI to set the link status.
5313 */
5314VOS_STATUS WDA_ProcessSetLinkState(tWDA_CbContext *pWDA,
5315 tLinkStateParams *linkStateParams)
5316{
5317 WDI_Status status = WDI_STATUS_SUCCESS ;
5318 WDI_SetLinkReqParamsType *wdiSetLinkStateParam =
5319 (WDI_SetLinkReqParamsType *)vos_mem_malloc(
5320 sizeof(WDI_SetLinkReqParamsType)) ;
5321 tWDA_ReqParams *pWdaParams ;
5322 tpAniSirGlobal pMac;
5323 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
5324
5325 if(NULL == pMac)
5326 {
5327 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005328 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005329 VOS_ASSERT(0);
Madan Mohan Koyyalamudi68f53542012-09-24 14:19:32 -07005330 vos_mem_free(wdiSetLinkStateParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005331 return VOS_STATUS_E_FAILURE;
5332 }
5333
5334 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005335 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005336 if(NULL == wdiSetLinkStateParam)
5337 {
5338 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005339 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005340 VOS_ASSERT(0);
5341 return VOS_STATUS_E_NOMEM;
5342 }
5343 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5344 if(NULL == pWdaParams)
5345 {
5346 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005347 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005348 VOS_ASSERT(0);
5349 vos_mem_free(wdiSetLinkStateParam);
5350 return VOS_STATUS_E_NOMEM;
5351 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005352 if(WDA_IGNORE_SET_LINK_STATE ==
5353 WDA_IsHandleSetLinkStateReq(pWDA,linkStateParams))
5354 {
5355 status = WDI_STATUS_E_FAILURE;
5356 }
5357 else
5358 {
5359 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macBSSID,
5360 linkStateParams->bssid, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005361 vos_mem_copy(wdiSetLinkStateParam->wdiLinkInfo.macSelfStaMacAddr,
5362 linkStateParams->selfMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005363 wdiSetLinkStateParam->wdiLinkInfo.wdiLinkState = linkStateParams->state;
5364 wdiSetLinkStateParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005365 pWdaParams->pWdaContext = pWDA;
5366 /* Store remove key pointer, as this will be used for response */
5367 pWdaParams->wdaMsgParam = (void *)linkStateParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005368 /* store Params pass it to WDI */
5369 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetLinkStateParam ;
5370 /* Stop Timer only other than GO role and concurrent session */
5371 if( (linkStateParams->state == eSIR_LINK_IDLE_STATE)
Hoonki Lee9af07cf2013-04-24 01:21:58 -07005372 && (0 == WDI_GetActiveSessionsCount(pWDA->pWdiContext, linkStateParams->bssid, TRUE)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -07005373 (wdaGetGlobalSystemRole(pMac) != eSYSTEM_AP_ROLE) )
5374 {
5375 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
5376 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005377 status = WDI_SetLinkStateReq(wdiSetLinkStateParam,
5378 (WDI_SetLinkStateRspCb)WDA_SetLinkStateCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005379 if(IS_WDI_STATUS_FAILURE(status))
5380 {
5381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5382 "Failure in set link state Req WDI API, free all the memory " );
5383 }
5384 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005385 if(IS_WDI_STATUS_FAILURE(status))
5386 {
5387 vos_mem_free(wdiSetLinkStateParam) ;
Jeff Johnsone7245742012-09-05 17:12:55 -07005388 WDA_SendMsg(pWDA, WDA_SET_LINK_STATE_RSP, (void *)linkStateParams, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -07005389 vos_mem_free(pWdaParams);
5390 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005391 return CONVERT_WDI2VOS_STATUS(status) ;
5392}
Jeff Johnson295189b2012-06-20 16:38:30 -07005393/*
5394 * FUNCTION: WDA_GetStatsReqParamsCallback
5395 * send the response to PE with Stats received from WDI
5396 */
5397void WDA_GetStatsReqParamsCallback(
5398 WDI_GetStatsRspParamsType *wdiGetStatsRsp,
5399 void* pUserData)
5400{
5401 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
5402 tAniGetPEStatsRsp *pGetPEStatsRspParams;
5403
5404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005405 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005406 pGetPEStatsRspParams =
5407 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp) +
5408 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType)));
5409
5410 if(NULL == pGetPEStatsRspParams)
5411 {
5412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005413 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005414 VOS_ASSERT(0);
5415 return;
5416 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005417 vos_mem_set(pGetPEStatsRspParams, wdiGetStatsRsp->usMsgLen, 0);
5418 pGetPEStatsRspParams->msgType = wdiGetStatsRsp->usMsgType;
5419 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp) +
5420 (wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005421
5422 //Fill the Session Id Properly in PE
5423 pGetPEStatsRspParams->sessionId = 0;
5424 pGetPEStatsRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005425 wdiGetStatsRsp->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005426 pGetPEStatsRspParams->staId = wdiGetStatsRsp->ucSTAIdx;
5427 pGetPEStatsRspParams->statsMask = wdiGetStatsRsp->uStatsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005428 vos_mem_copy( pGetPEStatsRspParams + 1,
5429 wdiGetStatsRsp + 1,
5430 wdiGetStatsRsp->usMsgLen - sizeof(WDI_GetStatsRspParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07005431 /* send response to UMAC*/
5432 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP, pGetPEStatsRspParams , 0) ;
5433
5434 return;
5435}
5436
Jeff Johnson295189b2012-06-20 16:38:30 -07005437/*
5438 * FUNCTION: WDA_ProcessGetStatsReq
5439 * Request to WDI to get the statistics
5440 */
5441VOS_STATUS WDA_ProcessGetStatsReq(tWDA_CbContext *pWDA,
5442 tAniGetPEStatsReq *pGetStatsParams)
5443{
5444 WDI_Status status = WDI_STATUS_SUCCESS ;
5445 WDI_GetStatsReqParamsType wdiGetStatsParam;
5446 tAniGetPEStatsRsp *pGetPEStatsRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005447 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005448 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005449 wdiGetStatsParam.wdiGetStatsParamsInfo.ucSTAIdx =
5450 pGetStatsParams->staId;
5451 wdiGetStatsParam.wdiGetStatsParamsInfo.uStatsMask =
5452 pGetStatsParams->statsMask;
Jeff Johnson295189b2012-06-20 16:38:30 -07005453 wdiGetStatsParam.wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005454 status = WDI_GetStatsReq(&wdiGetStatsParam,
5455 (WDI_GetStatsRspCb)WDA_GetStatsReqParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07005456 if(IS_WDI_STATUS_FAILURE(status))
5457 {
5458 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5459 "Failure in Get Stats Req WDI API, free all the memory " );
5460 pGetPEStatsRspParams =
5461 (tAniGetPEStatsRsp *)vos_mem_malloc(sizeof(tAniGetPEStatsRsp));
5462 if(NULL == pGetPEStatsRspParams)
5463 {
5464 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005465 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005466 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005467 vos_mem_free(pGetStatsParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005468 return VOS_STATUS_E_NOMEM;
5469 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005470 pGetPEStatsRspParams->msgType = WDA_GET_STATISTICS_RSP;
5471 pGetPEStatsRspParams->msgLen = sizeof(tAniGetPEStatsRsp);
5472 pGetPEStatsRspParams->staId = pGetStatsParams->staId;
5473 pGetPEStatsRspParams->rc = eSIR_FAILURE;
5474 WDA_SendMsg(pWDA, WDA_GET_STATISTICS_RSP,
5475 (void *)pGetPEStatsRspParams, 0) ;
5476 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005477 /* Free the request message */
5478 vos_mem_free(pGetStatsParams);
5479 return CONVERT_WDI2VOS_STATUS(status);
5480}
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005481
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08005482#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005483/*
5484 * FUNCTION: WDA_GetGetRssiReqRoamRssiReqParamsCallback
5485 * send the response to PE with roam Rssi received from WDI
5486 */
5487void WDA_GetRoamRssiReqParamsCallback(
5488 WDI_GetRoamRssiRspParamsType *wdiGetRoamRssiRsp,
5489 void* pUserData)
5490{
5491 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5492 tWDA_CbContext *pWDA = NULL;
5493 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5494 tpAniGetRssiReq pGetRoamRssiReqParams = NULL;
5495 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5496 "<------ %s " ,__func__);
5497 if(NULL == pWdaParams)
5498 {
5499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5500 "%s: pWdaParams received NULL", __func__);
5501 VOS_ASSERT(0) ;
5502 return ;
5503 }
5504 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5505 pGetRoamRssiReqParams = (tAniGetRssiReq *)pWdaParams->wdaMsgParam;
5506
5507 if(NULL == pGetRoamRssiReqParams)
5508 {
5509 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5510 "%s: pGetRoamRssiReqParams received NULL", __func__);
5511 VOS_ASSERT(0);
5512 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5513 vos_mem_free(pWdaParams);
5514 return ;
5515 }
5516 pGetRoamRssiRspParams =
5517 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5518
5519 if(NULL == pGetRoamRssiRspParams)
5520 {
5521 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5522 "%s: VOS MEM Alloc Failure", __func__);
5523 VOS_ASSERT(0);
5524 return;
5525 }
5526 vos_mem_set(pGetRoamRssiRspParams, sizeof(tAniGetRoamRssiRsp), 0);
5527 pGetRoamRssiRspParams->rc =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005528 wdiGetRoamRssiRsp->wdiStatus;
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005529 pGetRoamRssiRspParams->staId = wdiGetRoamRssiRsp->ucSTAIdx;
5530 pGetRoamRssiRspParams->rssi = wdiGetRoamRssiRsp->rssi;
5531
5532 /* Assign get roam rssi req (backup) in to the response */
5533 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiReqParams;
5534
5535 /* free WDI command buffer */
5536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
5537 vos_mem_free(pWdaParams) ;
5538
5539 /* send response to UMAC*/
5540 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP, pGetRoamRssiRspParams , 0) ;
5541
5542 return;
5543}
5544
5545
5546
5547/*
5548 * FUNCTION: WDA_ProcessGetRoamRssiReq
5549 * Request to WDI to get the statistics
5550 */
5551VOS_STATUS WDA_ProcessGetRoamRssiReq(tWDA_CbContext *pWDA,
5552 tAniGetRssiReq *pGetRoamRssiParams)
5553{
5554 WDI_Status status = WDI_STATUS_SUCCESS ;
5555 WDI_GetRoamRssiReqParamsType wdiGetRoamRssiParam;
5556 tAniGetRoamRssiRsp *pGetRoamRssiRspParams = NULL;
5557 tWDA_ReqParams *pWdaParams = NULL;
5558
5559 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
5560 "------> %s " ,__func__);
5561 wdiGetRoamRssiParam.wdiGetRoamRssiParamsInfo.ucSTAIdx =
5562 pGetRoamRssiParams->staId;
5563 wdiGetRoamRssiParam.wdiReqStatusCB = NULL ;
5564
5565 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5566 if(NULL == pWdaParams)
5567 {
5568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5569 "%s: VOS MEM Alloc Failure", __func__);
5570 VOS_ASSERT(0);
5571 return VOS_STATUS_E_NOMEM;
5572 }
5573
5574 /* Store Init Req pointer, as this will be used for response */
5575 pWdaParams->pWdaContext = pWDA;
5576
5577 /* Take Get roam Rssi req backup as it stores the callback to be called after
5578 receiving the response */
5579 pWdaParams->wdaMsgParam = pGetRoamRssiParams;
5580 pWdaParams->wdaWdiApiMsgParam = NULL;
5581
5582 status = WDI_GetRoamRssiReq(&wdiGetRoamRssiParam,
5583 (WDI_GetRoamRssiRspCb)WDA_GetRoamRssiReqParamsCallback, pWdaParams);
5584 if(IS_WDI_STATUS_FAILURE(status))
5585 {
5586 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5587 "Failure in Get RoamRssi Req WDI API, free all the memory status=%d", status );
5588 pGetRoamRssiRspParams =
5589 (tAniGetRoamRssiRsp *)vos_mem_malloc(sizeof(tAniGetRoamRssiRsp));
5590 if(NULL == pGetRoamRssiRspParams)
5591 {
5592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5593 "%s: VOS MEM Alloc Failure", __func__);
5594 VOS_ASSERT(0);
Abhishek Singh1e2bfa32014-01-02 15:44:15 +05305595 vos_mem_free(pGetRoamRssiParams);
5596 vos_mem_free(pWdaParams);
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -08005597 return VOS_STATUS_E_NOMEM;
5598 }
5599 pGetRoamRssiRspParams->staId = pGetRoamRssiParams->staId;
5600 pGetRoamRssiRspParams->rc = eSIR_FAILURE;
5601 pGetRoamRssiRspParams->rssi = 0;
5602 pGetRoamRssiRspParams->rssiReq = pGetRoamRssiParams;
5603 WDA_SendMsg(pWDA, WDA_GET_ROAM_RSSI_RSP,
5604 (void *)pGetRoamRssiRspParams, 0) ;
5605 }
5606 return CONVERT_WDI2VOS_STATUS(status);
5607}
5608#endif
5609
5610
Jeff Johnson295189b2012-06-20 16:38:30 -07005611/*
5612 * FUNCTION: WDA_UpdateEDCAParamCallback
5613 * call back function for Update EDCA params from WDI
5614 */
5615void WDA_UpdateEDCAParamCallback(WDI_Status status, void* pUserData)
5616{
5617 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5618 tEdcaParams *pEdcaParams;
5619
5620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005621 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005622 if(NULL == pWdaParams)
5623 {
5624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005625 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005626 VOS_ASSERT(0) ;
5627 return ;
5628 }
5629 pEdcaParams = (tEdcaParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005630 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5631 vos_mem_free(pWdaParams);
5632 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005633 return ;
5634}
Jeff Johnson295189b2012-06-20 16:38:30 -07005635/*
5636 * FUNCTION: WDA_ProcessUpdateEDCAParamReq
5637 * Request to WDI to Update the EDCA params.
5638 */
5639VOS_STATUS WDA_ProcessUpdateEDCAParamReq(tWDA_CbContext *pWDA,
5640 tEdcaParams *pEdcaParams)
5641{
5642 WDI_Status status = WDI_STATUS_SUCCESS ;
5643 WDI_UpdateEDCAParamsType *wdiEdcaParam =
5644 (WDI_UpdateEDCAParamsType *)vos_mem_malloc(
5645 sizeof(WDI_UpdateEDCAParamsType)) ;
5646 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005647 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005648 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005649 if(NULL == wdiEdcaParam)
5650 {
5651 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005652 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005653 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005654 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005655 return VOS_STATUS_E_NOMEM;
5656 }
5657 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5658 if(NULL == pWdaParams)
5659 {
5660 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005661 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005662 VOS_ASSERT(0);
5663 vos_mem_free(wdiEdcaParam);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005664 vos_mem_free(pEdcaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005665 return VOS_STATUS_E_NOMEM;
5666 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005667 wdiEdcaParam->wdiEDCAInfo.ucBssIdx = pEdcaParams->bssIdx;
Bansidhar Gopalachari5dcf9e02013-07-29 19:53:58 -07005668 /*
5669 Since firmware is not using highperformance flag, we have removed
5670 this flag from wdiEDCAInfo structure to match sizeof the structure
5671 between host and firmware.In future if we are planning to use
5672 highperformance flag then Please define this flag in wdiEDCAInfo
5673 structure, update it here and send it to firmware. i.e.
5674 Following is the original line which we removed as part of the fix
5675 wdiEdcaParam->wdiEDCAInfo.ucEDCAParamsValid =
5676 pEdcaParams->highPerformance;
5677 */
Jeff Johnson295189b2012-06-20 16:38:30 -07005678 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBEInfo,
5679 &pEdcaParams->acbe);
5680 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaBKInfo,
5681 &pEdcaParams->acbk);
5682 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVIInfo,
5683 &pEdcaParams->acvi);
5684 WDA_UpdateEdcaParamsForAC(pWDA, &wdiEdcaParam->wdiEDCAInfo.wdiEdcaVOInfo,
5685 &pEdcaParams->acvo);
5686 wdiEdcaParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005687 pWdaParams->pWdaContext = pWDA;
5688 /* Store remove key pointer, as this will be used for response */
5689 pWdaParams->wdaMsgParam = (void *)pEdcaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005690 /* store Params pass it to WDI */
5691 pWdaParams->wdaWdiApiMsgParam = (void *)wdiEdcaParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005692 status = WDI_UpdateEDCAParams(wdiEdcaParam,
5693 (WDI_UpdateEDCAParamsRspCb)WDA_UpdateEDCAParamCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005694 if(IS_WDI_STATUS_FAILURE(status))
5695 {
5696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
5697 "Failure in Update EDCA Params WDI API, free all the memory " );
5698 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5699 vos_mem_free(pWdaParams);
5700 vos_mem_free(pEdcaParams);
5701 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005702 return CONVERT_WDI2VOS_STATUS(status) ;
5703}
Jeff Johnson295189b2012-06-20 16:38:30 -07005704/*
5705 * FUNCTION: WDA_AddBAReqCallback
5706 * send ADD BA RSP back to PE
5707 */
5708void WDA_AddBAReqCallback(WDI_AddBARspinfoType *pAddBARspParams,
5709 void* pUserData)
5710{
5711 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5712 tWDA_CbContext *pWDA;
5713 tAddBAParams *pAddBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07005714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005716 if(NULL == pWdaParams)
5717 {
5718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005720 VOS_ASSERT(0) ;
5721 return ;
5722 }
5723 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5724 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005725 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5726 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07005727 pAddBAReqParams->status = pAddBARspParams->wdiStatus ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005728 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005729 return ;
5730}
5731
Jeff Johnson295189b2012-06-20 16:38:30 -07005732/*
5733 * FUNCTION: WDA_ProcessAddBAReq
5734 * Request to WDI to Update the ADDBA REQ params.
5735 */
5736VOS_STATUS WDA_ProcessAddBAReq(tWDA_CbContext *pWDA, VOS_STATUS status,
5737 tANI_U16 baSessionID, tANI_U8 staIdx, tAddBAParams *pAddBAReqParams)
5738{
Jeff Johnson43971f52012-07-17 12:26:56 -07005739 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07005740 WDI_AddBAReqParamsType *wdiAddBAReqParam =
5741 (WDI_AddBAReqParamsType *)vos_mem_malloc(
5742 sizeof(WDI_AddBAReqParamsType)) ;
5743 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005745 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005746 if(NULL == wdiAddBAReqParam)
5747 {
5748 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005749 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005750 VOS_ASSERT(0);
5751 return VOS_STATUS_E_NOMEM;
5752 }
5753 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5754 if(NULL == pWdaParams)
5755 {
5756 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005757 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005758 VOS_ASSERT(0);
5759 vos_mem_free(wdiAddBAReqParam);
5760 return VOS_STATUS_E_NOMEM;
5761 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005762 do
5763 {
5764 WDI_AddBAReqinfoType *wdiAddBaInfo = &wdiAddBAReqParam->wdiBAInfoType ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005765 wdiAddBaInfo->ucSTAIdx = staIdx ;
5766 wdiAddBaInfo->ucBaSessionID = baSessionID ;
5767 wdiAddBaInfo->ucWinSize = WDA_BA_MAX_WINSIZE ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005768 } while(0) ;
5769 wdiAddBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005770 pWdaParams->pWdaContext = pWDA;
5771 /* store Params pass it to WDI */
5772 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBAReqParam ;
5773 pWdaParams->wdaMsgParam = pAddBAReqParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07005774 wstatus = WDI_AddBAReq(wdiAddBAReqParam,
5775 (WDI_AddBARspCb)WDA_AddBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005776
Jeff Johnson43971f52012-07-17 12:26:56 -07005777 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07005778 {
5779 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson43971f52012-07-17 12:26:56 -07005780 "Failure in ADD BA REQ Params WDI API, free all the memory" );
5781 status = CONVERT_WDI2VOS_STATUS(wstatus);
5782 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07005783 vos_mem_free(pWdaParams);
5784 pAddBAReqParams->status = eSIR_FAILURE;
5785 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5786 }
Jeff Johnson43971f52012-07-17 12:26:56 -07005787 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07005788}
Jeff Johnson295189b2012-06-20 16:38:30 -07005789/*
5790 * FUNCTION: WDA_AddBASessionReqCallback
5791 * send ADD BA SESSION RSP back to PE/(or TL)
5792 */
5793void WDA_AddBASessionReqCallback(
5794 WDI_AddBASessionRspParamsType *wdiAddBaSession, void* pUserData)
5795{
5796 VOS_STATUS status = VOS_STATUS_SUCCESS ;
5797 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
5798 tWDA_CbContext *pWDA;
5799 tAddBAParams *pAddBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005800 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005801 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005802 if(NULL == pWdaParams)
5803 {
5804 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005805 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005806 VOS_ASSERT(0) ;
5807 return ;
5808 }
5809 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
5810 pAddBAReqParams = (tAddBAParams *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07005811 if( NULL == pAddBAReqParams )
5812 {
Jeff Johnson295189b2012-06-20 16:38:30 -07005813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005814 "%s: pAddBAReqParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005815 VOS_ASSERT( 0 );
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07005816 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5817 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005818 return ;
5819 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005820 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5821 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005822 /*
5823 * if WDA in update TL state, update TL with BA session parama and send
5824 * another request to HAL(/WDI) (ADD_BA_REQ)
5825 */
5826
5827 if((VOS_STATUS_SUCCESS ==
5828 CONVERT_WDI2VOS_STATUS(wdiAddBaSession->wdiStatus)) &&
5829 (WDA_BA_UPDATE_TL_STATE == pWDA->wdaState))
5830 {
5831 /* Update TL with BA info received from HAL/WDI */
5832 status = WDA_TL_BA_SESSION_ADD(pWDA->pVosContext,
5833 wdiAddBaSession->usBaSessionID,
5834 wdiAddBaSession->ucSTAIdx,
5835 wdiAddBaSession->ucBaTID,
5836 wdiAddBaSession->ucBaBufferSize,
5837 wdiAddBaSession->ucWinSize,
5838 wdiAddBaSession->usBaSSN );
Jeff Johnson295189b2012-06-20 16:38:30 -07005839 WDA_ProcessAddBAReq(pWDA, status, wdiAddBaSession->usBaSessionID,
5840 wdiAddBaSession->ucSTAIdx, pAddBAReqParams) ;
5841 }
5842 else
5843 {
5844 pAddBAReqParams->status =
5845 CONVERT_WDI2SIR_STATUS(wdiAddBaSession->wdiStatus) ;
5846
5847 /* Setting Flag to indicate that Set BA is success */
5848 if(WDI_STATUS_SUCCESS == wdiAddBaSession->wdiStatus)
5849 {
5850 tANI_U16 curSta = wdiAddBaSession->ucSTAIdx;
5851 tANI_U8 tid = wdiAddBaSession->ucBaTID;
5852 WDA_SET_BA_TXFLAG(pWDA, curSta, tid) ;
5853 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005854 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5855 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005856 /*Reset the WDA state to READY */
5857 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005858 return ;
5859}
5860
Jeff Johnson295189b2012-06-20 16:38:30 -07005861/*
5862 * FUNCTION: WDA_ProcessAddBASessionReq
5863 * Request to WDI to Update the ADDBA REQ params.
5864 */
5865VOS_STATUS WDA_ProcessAddBASessionReq(tWDA_CbContext *pWDA,
5866 tAddBAParams *pAddBAReqParams)
5867{
5868 WDI_Status status = WDI_STATUS_SUCCESS ;
5869 WDI_AddBASessionReqParamsType *wdiAddBASessionReqParam =
5870 (WDI_AddBASessionReqParamsType *)vos_mem_malloc(
5871 sizeof(WDI_AddBASessionReqParamsType)) ;
5872 tWDA_ReqParams *pWdaParams ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005873 WLANTL_STAStateType tlSTAState = 0;
5874
Jeff Johnson295189b2012-06-20 16:38:30 -07005875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005876 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005877 if(NULL == wdiAddBASessionReqParam)
5878 {
5879 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005880 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005881 VOS_ASSERT(0);
5882 return VOS_STATUS_E_NOMEM;
5883 }
5884 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
5885 if(NULL == pWdaParams)
5886 {
5887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005888 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005889 VOS_ASSERT(0);
5890 vos_mem_free(wdiAddBASessionReqParam);
5891 return VOS_STATUS_E_NOMEM;
5892 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005893 /*
5894 * Populate ADD BA parameters and pass these paarmeters to WDI.
5895 * ADD BA SESSION REQ will update HAL with BA params, WDA, will changes
5896 * the state to track if these is BA recipient case or BA initiator
5897 * case.
5898 */
5899 do
5900 {
5901 WDI_AddBASessionReqinfoType *wdiBAInfoType =
5902 &wdiAddBASessionReqParam->wdiBASessionInfoType ;
5903 /* vos_mem_copy(wdiBAInfoType->macBSSID,
5904 pAddBAReqParams->bssId, sizeof(tSirMacAddr));*/
5905 wdiBAInfoType->ucSTAIdx = pAddBAReqParams->staIdx;
5906 vos_mem_copy(wdiBAInfoType->macPeerAddr,
5907 pAddBAReqParams->peerMacAddr, sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07005908 wdiBAInfoType->ucBaTID = pAddBAReqParams->baTID;
Jeff Johnson295189b2012-06-20 16:38:30 -07005909 wdiBAInfoType->ucBaPolicy = pAddBAReqParams->baPolicy;
5910 wdiBAInfoType->usBaBufferSize = pAddBAReqParams->baBufferSize;
5911 wdiBAInfoType->usBaTimeout = pAddBAReqParams->baTimeout;
5912 wdiBAInfoType->usBaSSN = pAddBAReqParams->baSSN;
5913 wdiBAInfoType->ucBaDirection = pAddBAReqParams->baDirection;
Jeff Johnson295189b2012-06-20 16:38:30 -07005914 /* check the BA direction and update state accordingly */
5915 (eBA_RECIPIENT == wdiBAInfoType->ucBaDirection)
5916 ? (pWDA->wdaState = WDA_BA_UPDATE_TL_STATE)
5917 : (pWDA->wdaState = WDA_BA_UPDATE_LIM_STATE);
5918
5919 }while(0) ;
5920 wdiAddBASessionReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005921 pWdaParams->pWdaContext = pWDA;
5922 /* Store ADD BA pointer, as this will be used for response */
5923 pWdaParams->wdaMsgParam = (void *)pAddBAReqParams ;
5924 /* store Params pass it to WDI */
5925 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddBASessionReqParam ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005926
5927 /* In TDLS case, there is a possibility that TL hasn't registered peer yet, but
5928 the peer thinks that we already setup TDLS link, and send us ADDBA request packet
5929 */
5930 if((VOS_STATUS_SUCCESS != WDA_TL_GET_STA_STATE(pWDA->pVosContext, pAddBAReqParams->staIdx, &tlSTAState)) ||
5931 ((WLANTL_STA_CONNECTED != tlSTAState) && (WLANTL_STA_AUTHENTICATED != tlSTAState)))
5932 {
5933 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005934 "Peer staIdx %d hasn't established yet(%d). Send ADD BA failure to PE.", pAddBAReqParams->staIdx, tlSTAState );
Hoonki Leea0631ce2013-04-15 16:59:08 -07005935 status = WDI_STATUS_E_NOT_ALLOWED;
5936 pAddBAReqParams->status =
5937 CONVERT_WDI2SIR_STATUS(status) ;
5938 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
5939 /*Reset the WDA state to READY */
5940 pWDA->wdaState = WDA_READY_STATE;
5941 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
5942 vos_mem_free(pWdaParams);
5943
5944 return CONVERT_WDI2VOS_STATUS(status) ;
5945 }
5946
Jeff Johnson295189b2012-06-20 16:38:30 -07005947 status = WDI_AddBASessionReq(wdiAddBASessionReqParam,
5948 (WDI_AddBASessionRspCb)WDA_AddBASessionReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07005949 if(IS_WDI_STATUS_FAILURE(status))
5950 {
5951 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005952 "Failure in ADD BA Session REQ Params WDI API, free all the memory =%d", status);
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08005954 "Send ADD BA failure response to PE");
Shailender Karmuchi2a74d4c2013-03-24 23:25:27 -07005955 pAddBAReqParams->status =
5956 CONVERT_WDI2SIR_STATUS(status) ;
5957 WDA_SendMsg(pWDA, WDA_ADDBA_RSP, (void *)pAddBAReqParams , 0) ;
Hoonki Leea0631ce2013-04-15 16:59:08 -07005958 /*Reset the WDA state to READY */
5959 pWDA->wdaState = WDA_READY_STATE;
Jeff Johnson295189b2012-06-20 16:38:30 -07005960 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005961 vos_mem_free(pWdaParams);
5962 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005963 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07005964}
Jeff Johnson295189b2012-06-20 16:38:30 -07005965/*
5966 * FUNCTION: WDA_DelBANotifyTL
5967 * send DEL BA IND to TL
5968 */
5969void WDA_DelBANotifyTL(tWDA_CbContext *pWDA,
5970 tDelBAParams *pDelBAReqParams)
5971{
5972 tpDelBAInd pDelBAInd = (tpDelBAInd)vos_mem_malloc(sizeof( tDelBAInd ));
5973 //tSirMsgQ msg;
5974 vos_msg_t vosMsg;
5975 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
Jeff Johnson295189b2012-06-20 16:38:30 -07005976 if(NULL == pDelBAInd)
5977 {
5978 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07005979 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07005980 VOS_ASSERT(0) ;
5981 return;
5982 }
Jeff Johnson295189b2012-06-20 16:38:30 -07005983 pDelBAInd->mesgType = WDA_DELETEBA_IND;
5984 pDelBAInd->staIdx = (tANI_U8) pDelBAReqParams->staIdx;
5985 pDelBAInd->baTID = (tANI_U8) pDelBAReqParams->baTID;
5986 pDelBAInd->mesgLen = sizeof( tDelBAInd );
Jeff Johnsone7245742012-09-05 17:12:55 -07005987
Jeff Johnson295189b2012-06-20 16:38:30 -07005988
5989 vosMsg.type = WDA_DELETEBA_IND;
5990 vosMsg.bodyptr = pDelBAInd;
5991 vosStatus = vos_mq_post_message(VOS_MQ_ID_TL, &vosMsg);
5992 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
5993 {
5994 vosStatus = VOS_STATUS_E_BADMSG;
5995 }
5996}
Jeff Johnson295189b2012-06-20 16:38:30 -07005997/*
5998 * FUNCTION: WDA_DelBAReqCallback
5999 * send DEL BA RSP back to PE
6000 */
6001void WDA_DelBAReqCallback(WDI_Status status, void* pUserData)
6002{
6003 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6004 tWDA_CbContext *pWDA;
6005 tDelBAParams *pDelBAReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07006006 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006007 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006008 if(NULL == pWdaParams)
6009 {
6010 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006011 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006012 VOS_ASSERT(0) ;
6013 return ;
6014 }
6015 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
6016 pDelBAReqParams = (tDelBAParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006017 /* Notify TL about DEL BA in case of recipinet */
6018 if((VOS_STATUS_SUCCESS == CONVERT_WDI2VOS_STATUS(status)) &&
6019 (eBA_RECIPIENT == pDelBAReqParams->baDirection))
6020 {
6021 WDA_DelBANotifyTL(pWDA, pDelBAReqParams);
6022 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006023 /*
6024 * No respone required for WDA_DELBA_IND so just free the request
6025 * param here
6026 */
6027 vos_mem_free(pDelBAReqParams);
6028 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6029 vos_mem_free(pWdaParams);
6030 return ;
6031}
6032
Jeff Johnson295189b2012-06-20 16:38:30 -07006033/*
6034 * FUNCTION: WDA_ProcessDelBAReq
6035 * Request to WDI to Update the DELBA REQ params.
6036 */
6037VOS_STATUS WDA_ProcessDelBAReq(tWDA_CbContext *pWDA,
6038 tDelBAParams *pDelBAReqParams)
6039{
6040 WDI_Status status = WDI_STATUS_SUCCESS ;
6041 WDI_DelBAReqParamsType *wdiDelBAReqParam =
6042 (WDI_DelBAReqParamsType *)vos_mem_malloc(
6043 sizeof(WDI_DelBAReqParamsType)) ;
6044 tWDA_ReqParams *pWdaParams ;
6045 tANI_U16 staIdx = 0;
6046 tANI_U8 tid = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -07006047 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006048 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006049 if(NULL == wdiDelBAReqParam)
6050 {
6051 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006052 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006053 VOS_ASSERT(0);
6054 return VOS_STATUS_E_NOMEM;
6055 }
6056 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6057 if(NULL == pWdaParams)
6058 {
6059 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006060 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006061 VOS_ASSERT(0);
6062 vos_mem_free(wdiDelBAReqParam);
6063 return VOS_STATUS_E_NOMEM;
6064 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006065 wdiDelBAReqParam->wdiBAInfo.ucSTAIdx = pDelBAReqParams->staIdx;
6066 wdiDelBAReqParam->wdiBAInfo.ucBaTID = pDelBAReqParams->baTID;
6067 wdiDelBAReqParam->wdiBAInfo.ucBaDirection = pDelBAReqParams->baDirection;
6068 wdiDelBAReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006069 pWdaParams->pWdaContext = pWDA;
6070 /* Store DEL BA pointer, as this will be used for response */
6071 pWdaParams->wdaMsgParam = (void *)pDelBAReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006072 /* store Params pass it to WDI */
6073 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelBAReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006074 /* if BA exchange over the air is failed, clear this tid in BaBitmap
6075 * maintained in WDA, so that WDA can retry for another BA session
6076 */
6077 staIdx = pDelBAReqParams->staIdx;
6078 tid = pDelBAReqParams->baTID;
6079 WDA_CLEAR_BA_TXFLAG(pWDA, staIdx, tid);
Jeff Johnson295189b2012-06-20 16:38:30 -07006080 status = WDI_DelBAReq(wdiDelBAReqParam,
6081 (WDI_DelBARspCb)WDA_DelBAReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006082 if(IS_WDI_STATUS_FAILURE(status))
6083 {
6084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6085 "Failure in DEL BA REQ Params WDI API, free all the memory " );
6086 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6087 vos_mem_free(pWdaParams->wdaMsgParam);
6088 vos_mem_free(pWdaParams);
6089 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006090 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006091}
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -08006092
6093/*
6094 * FUNCTION: WDA_UpdateChReqCallback
6095 *
6096 */
6097void WDA_UpdateChReqCallback(WDI_Status status, void* pUserData)
6098{
6099 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6100 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam =
6101 (WDI_UpdateChReqParamsType *)pWdaParams->wdaWdiApiMsgParam;
6102 WDI_UpdateChannelReqType *pwdiUpdateChanReqType =
6103 &pwdiUpdateChReqParam->wdiUpdateChanParams;
6104 WDI_UpdateChannelReqinfoType *pChanInfoType =
6105 pwdiUpdateChanReqType->pchanParam;
6106 tSirUpdateChanList *pChanList =
6107 (tSirUpdateChanList *)pWdaParams->wdaMsgParam;
6108
6109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6110 "<------ %s " ,__func__);
6111 if(NULL == pWdaParams)
6112 {
6113 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6114 "%s: pWdaParams received NULL", __func__);
6115 VOS_ASSERT(0);
6116 return;
6117 }
6118
6119 /*
6120 * currently there is no response message is expected between PE and
6121 * WDA, Failure return from WDI is a ASSERT condition
6122 */
6123 vos_mem_free(pChanInfoType);
6124 vos_mem_free(pChanList);
6125 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6126 vos_mem_free(pWdaParams);
6127
6128 return;
6129}
6130
6131/*
6132 * FUNCTION: WDA_ProcessUpdateChannelList
6133 * Request to WDI to Update the ChannelList params.
6134 */
6135VOS_STATUS WDA_ProcessUpdateChannelList(tWDA_CbContext *pWDA,
6136 tSirUpdateChanList *pChanList)
6137{
6138 WDI_Status status = WDI_STATUS_SUCCESS;
6139 WDI_UpdateChReqParamsType *pwdiUpdateChReqParam;
6140 WDI_UpdateChannelReqType *pwdiUpdateChanReqType;
6141 WDI_UpdateChannelReqinfoType *pChanInfoType;
6142 tWDA_ReqParams *pWdaParams;
6143 wpt_uint8 i;
6144
6145 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6146 "------> %s " ,__func__);
6147 if(NULL == pChanList)
6148 {
6149 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6150 "%s: NULL pChanList", __func__);
6151 VOS_ASSERT(0);
6152 return VOS_STATUS_E_INVAL;
6153 }
6154
6155 if(!WDA_getFwWlanFeatCaps(UPDATE_CHANNEL_LIST))
6156 {
6157 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6158 "Update channel list capability Not Supported");
6159 vos_mem_free(pChanList);
6160 return VOS_STATUS_E_INVAL;
6161 }
6162
6163 pwdiUpdateChReqParam = (WDI_UpdateChReqParamsType *)vos_mem_malloc(
6164 sizeof(WDI_UpdateChReqParamsType));
6165 if(NULL == pwdiUpdateChReqParam)
6166 {
6167 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6168 "%s: VOS MEM Alloc Failed for WDI_UpdateChReqParamsType",
6169 __func__);
6170 VOS_ASSERT(0);
6171 vos_mem_free(pChanList);
6172 return VOS_STATUS_E_NOMEM;
6173 }
6174 pwdiUpdateChanReqType = &pwdiUpdateChReqParam->wdiUpdateChanParams;
6175 pChanInfoType = (WDI_UpdateChannelReqinfoType *)
6176 vos_mem_malloc(sizeof(WDI_UpdateChannelReqinfoType) *
6177 pChanList->numChan);
6178 if(NULL == pChanInfoType)
6179 {
6180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6181 "%s: VOS MEM Alloc Failure", __func__);
6182 VOS_ASSERT(0);
6183 vos_mem_free(pChanList);
6184 vos_mem_free(pwdiUpdateChReqParam);
6185 return VOS_STATUS_E_NOMEM;
6186 }
6187 vos_mem_zero(pChanInfoType, sizeof(WDI_UpdateChannelReqinfoType)
6188 * pChanList->numChan);
6189 pwdiUpdateChanReqType->pchanParam = pChanInfoType;
6190
6191 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
6192 if(NULL == pWdaParams)
6193 {
6194 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6195 "%s: VOS MEM Alloc Failure", __func__);
6196 VOS_ASSERT(0);
6197 vos_mem_free(pChanList);
6198 vos_mem_free(pChanInfoType);
6199 vos_mem_free(pwdiUpdateChReqParam);
6200 return VOS_STATUS_E_NOMEM;
6201 }
6202 pwdiUpdateChanReqType->numchan = pChanList->numChan;
6203
6204 for(i = 0; i < pwdiUpdateChanReqType->numchan; i++)
6205 {
6206 pChanInfoType->mhz =
6207 vos_chan_to_freq(pChanList->chanParam[i].chanId);
6208
6209 pChanInfoType->band_center_freq1 = pChanInfoType->mhz;
6210 pChanInfoType->band_center_freq2 = 0;
6211
6212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6213 "chan[%d] = %u", i, pChanInfoType->mhz);
6214 if (pChanList->chanParam[i].dfsSet)
6215 {
6216 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_PASSIVE);
6217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6218 "chan[%d] DFS[%d]", pChanList->chanParam[i].chanId,
6219 pChanList->chanParam[i].dfsSet);
6220 }
6221
6222 if (pChanInfoType->mhz < WDA_2_4_GHZ_MAX_FREQ)
6223 {
6224 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11G);
6225 }
6226 else
6227 {
6228 WDA_SET_CHANNEL_MODE(pChanInfoType, MODE_11A);
6229 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_HT);
6230 WDA_SET_CHANNEL_FLAG(pChanInfoType, WLAN_HAL_CHAN_FLAG_ALLOW_VHT);
6231 }
6232
6233 WDA_SET_CHANNEL_MAX_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6234 WDA_SET_CHANNEL_REG_POWER(pChanInfoType, pChanList->chanParam[i].pwr);
6235
6236 pChanInfoType++;
6237 }
6238
6239 pwdiUpdateChReqParam->wdiReqStatusCB = NULL;
6240 pWdaParams->pWdaContext = pWDA;
6241 pWdaParams->wdaMsgParam = (void *)pChanList;
6242 /* store Params pass it to WDI */
6243 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiUpdateChReqParam;
6244 status = WDI_UpdateChannelReq(pwdiUpdateChReqParam,
6245 (WDI_UpdateChannelRspCb)WDA_UpdateChReqCallback, pWdaParams);
6246 if(IS_WDI_STATUS_FAILURE(status))
6247 {
6248 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6249 "Failure in Update Channel REQ Params WDI API, free all the memory");
6250 vos_mem_free(pwdiUpdateChanReqType->pchanParam);
6251 vos_mem_free(pwdiUpdateChReqParam);
6252 vos_mem_free(pWdaParams->wdaMsgParam);
6253 vos_mem_free(pWdaParams);
6254 }
6255 return CONVERT_WDI2VOS_STATUS(status);
6256}
6257
Jeff Johnson295189b2012-06-20 16:38:30 -07006258/*
6259 * FUNCTION: WDA_AddTSReqCallback
6260 * send ADD TS RSP back to PE
6261 */
6262void WDA_AddTSReqCallback(WDI_Status status, void* pUserData)
6263{
6264 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6265 tWDA_CbContext *pWDA;
6266 tAddTsParams *pAddTsReqParams;
6267
6268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006269 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006270 if(NULL == pWdaParams)
6271 {
6272 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006273 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006274 VOS_ASSERT(0) ;
6275 return ;
6276 }
6277 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6278 pAddTsReqParams = (tAddTsParams *)pWdaParams->wdaMsgParam ;
6279 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6280 vos_mem_free(pWdaParams);
6281
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07006282 pAddTsReqParams->status = status ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006283 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006284 return ;
6285}
6286
Jeff Johnson295189b2012-06-20 16:38:30 -07006287/*
6288 * FUNCTION: WDA_ProcessAddTSReq
6289 * Request to WDI to Update the ADD TS REQ params.
6290 */
6291VOS_STATUS WDA_ProcessAddTSReq(tWDA_CbContext *pWDA,
6292 tAddTsParams *pAddTsReqParams)
6293{
6294 WDI_Status status = WDI_STATUS_SUCCESS ;
6295 WDI_AddTSReqParamsType *wdiAddTSReqParam =
6296 (WDI_AddTSReqParamsType *)vos_mem_malloc(
6297 sizeof(WDI_AddTSReqParamsType)) ;
6298 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006300 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006301 if(NULL == wdiAddTSReqParam)
6302 {
6303 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006304 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006305 VOS_ASSERT(0);
6306 return VOS_STATUS_E_NOMEM;
6307 }
6308 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6309 if(NULL == pWdaParams)
6310 {
6311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006312 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006313 VOS_ASSERT(0);
6314 vos_mem_free(wdiAddTSReqParam);
6315 return VOS_STATUS_E_NOMEM;
6316 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006317 wdiAddTSReqParam->wdiTsInfo.ucSTAIdx = pAddTsReqParams->staIdx;
6318 wdiAddTSReqParam->wdiTsInfo.ucTspecIdx = pAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07006319 //TS IE
6320 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucType = pAddTsReqParams->tspec.type;
6321 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.ucLength =
6322 pAddTsReqParams->tspec.length;
6323
6324 //TS IE : TS INFO : TRAFFIC
6325 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.ackPolicy =
6326 pAddTsReqParams->tspec.tsinfo.traffic.ackPolicy;
6327 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.userPrio =
6328 pAddTsReqParams->tspec.tsinfo.traffic.userPrio;
6329 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.psb =
6330 pAddTsReqParams->tspec.tsinfo.traffic.psb;
6331 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.aggregation =
6332 pAddTsReqParams->tspec.tsinfo.traffic.aggregation;
6333 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.accessPolicy =
6334 pAddTsReqParams->tspec.tsinfo.traffic.accessPolicy;
6335 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.direction =
6336 pAddTsReqParams->tspec.tsinfo.traffic.direction;
6337 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.tsid =
6338 pAddTsReqParams->tspec.tsinfo.traffic.tsid;
6339 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiTraffic.trafficType =
6340 pAddTsReqParams->tspec.tsinfo.traffic.trafficType;
6341
6342 //TS IE : TS INFO : SCHEDULE
6343 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.schedule =
6344 pAddTsReqParams->tspec.tsinfo.schedule.schedule;
6345 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.wdiTSinfo.wdiSchedule.rsvd =
6346 pAddTsReqParams->tspec.tsinfo.schedule.rsvd;
Jeff Johnson295189b2012-06-20 16:38:30 -07006347 //TS IE
6348 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usNomMsduSz =
6349 pAddTsReqParams->tspec.nomMsduSz;
6350 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMaxMsduSz =
6351 pAddTsReqParams->tspec.maxMsduSz;
6352 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinSvcInterval =
6353 pAddTsReqParams->tspec.minSvcInterval;
6354 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxSvcInterval =
6355 pAddTsReqParams->tspec.maxSvcInterval;
6356 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uInactInterval =
6357 pAddTsReqParams->tspec.inactInterval;
6358 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSuspendInterval =
6359 pAddTsReqParams->tspec.suspendInterval;
6360 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uSvcStartTime =
6361 pAddTsReqParams->tspec.svcStartTime;
6362 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinDataRate =
6363 pAddTsReqParams->tspec.minDataRate;
6364 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMeanDataRate =
6365 pAddTsReqParams->tspec.meanDataRate;
6366 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uPeakDataRate =
6367 pAddTsReqParams->tspec.peakDataRate;
6368 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMaxBurstSz =
6369 pAddTsReqParams->tspec.maxBurstSz;
6370 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uDelayBound =
6371 pAddTsReqParams->tspec.delayBound;
6372 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.uMinPhyRate =
6373 pAddTsReqParams->tspec.minPhyRate;
6374 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usSurplusBw =
6375 pAddTsReqParams->tspec.surplusBw;
6376 wdiAddTSReqParam->wdiTsInfo.wdiTspecIE.usMediumTime =
6377 pAddTsReqParams->tspec.mediumTime;
Jeff Johnson295189b2012-06-20 16:38:30 -07006378 /* TODO: tAddTsParams doesn't have the following fields */
6379#if 0
6380 wdiAddTSReqParam->wdiTsInfo.ucUapsdFlags =
6381 wdiAddTSReqParam->wdiTsInfo.ucServiceInterval =
6382 wdiAddTSReqParam->wdiTsInfo.ucSuspendInterval =
6383 wdiAddTSReqParam->wdiTsInfo.ucDelayedInterval =
6384#endif
6385 wdiAddTSReqParam->wdiReqStatusCB = NULL ;
6386
6387 pWdaParams->pWdaContext = pWDA;
6388 /* Store ADD TS pointer, as this will be used for response */
6389 pWdaParams->wdaMsgParam = (void *)pAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006390 /* store Params pass it to WDI */
6391 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAddTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006392 status = WDI_AddTSReq(wdiAddTSReqParam,
6393 (WDI_AddTsRspCb)WDA_AddTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006394 if(IS_WDI_STATUS_FAILURE(status))
6395 {
6396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6397 "Failure in ADD TS REQ Params WDI API, free all the memory " );
6398 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6399 vos_mem_free(pWdaParams);
6400 pAddTsReqParams->status = eSIR_FAILURE ;
6401 WDA_SendMsg(pWDA, WDA_ADD_TS_RSP, (void *)pAddTsReqParams , 0) ;
6402 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006403 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006404}
6405
Jeff Johnson295189b2012-06-20 16:38:30 -07006406/*
6407 * FUNCTION: WDA_DelTSReqCallback
6408 * send DEL TS RSP back to PE
6409 */
6410void WDA_DelTSReqCallback(WDI_Status status, void* pUserData)
6411{
6412 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006413 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006414 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006415 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6416 vos_mem_free(pWdaParams->wdaMsgParam) ;
6417 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006418 /*
6419 * No respone required for WDA_DEL_TS_REQ so just free the request
6420 * param here
6421 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006422 return ;
6423}
6424
Jeff Johnson295189b2012-06-20 16:38:30 -07006425/*
6426 * FUNCTION: WDA_ProcessDelTSReq
6427 * Request to WDI to Update the DELTS REQ params.
6428 */
6429VOS_STATUS WDA_ProcessDelTSReq(tWDA_CbContext *pWDA,
6430 tDelTsParams *pDelTSReqParams)
6431{
6432 WDI_Status status = WDI_STATUS_SUCCESS ;
6433 WDI_DelTSReqParamsType *wdiDelTSReqParam =
6434 (WDI_DelTSReqParamsType *)vos_mem_malloc(
6435 sizeof(WDI_DelTSReqParamsType)) ;
6436 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006437 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006438 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006439 if(NULL == wdiDelTSReqParam)
6440 {
6441 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006442 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006443 VOS_ASSERT(0);
6444 return VOS_STATUS_E_NOMEM;
6445 }
6446 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6447 if(NULL == pWdaParams)
6448 {
6449 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006450 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006451 VOS_ASSERT(0);
6452 vos_mem_free(wdiDelTSReqParam);
6453 return VOS_STATUS_E_NOMEM;
6454 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006455 vos_mem_copy(wdiDelTSReqParam->wdiDelTSInfo.macBSSID,
6456 pDelTSReqParams->bssId, sizeof(tSirMacAddr));
6457 wdiDelTSReqParam->wdiDelTSInfo.ucSTAIdx = pDelTSReqParams->staIdx;
6458 wdiDelTSReqParam->wdiDelTSInfo.ucTspecIdx = pDelTSReqParams->tspecIdx;
6459 wdiDelTSReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006460 pWdaParams->pWdaContext = pWDA;
6461 /* Store DEL TS pointer, as this will be used for response */
6462 pWdaParams->wdaMsgParam = (void *)pDelTSReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006463 /* store Params pass it to WDI */
6464 pWdaParams->wdaWdiApiMsgParam = (void *)wdiDelTSReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006465 status = WDI_DelTSReq(wdiDelTSReqParam,
6466 (WDI_DelTsRspCb)WDA_DelTSReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006467 if(IS_WDI_STATUS_FAILURE(status))
6468 {
6469 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6470 "Failure in DEL TS REQ Params WDI API, free all the memory " );
6471 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6472 vos_mem_free(pWdaParams->wdaMsgParam);
6473 vos_mem_free(pWdaParams);
6474 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006475 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006476}
Jeff Johnson295189b2012-06-20 16:38:30 -07006477/*
6478 * FUNCTION: WDA_UpdateBeaconParamsCallback
6479 * Free the memory. No need to send any response to PE in this case
6480 */
6481void WDA_UpdateBeaconParamsCallback(WDI_Status status, void* pUserData)
6482{
6483 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07006484 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006485 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006486 if(NULL == pWdaParams)
6487 {
6488 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006489 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006490 VOS_ASSERT(0) ;
6491 return ;
6492 }
6493 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6494 vos_mem_free(pWdaParams->wdaMsgParam) ;
6495 vos_mem_free(pWdaParams);
6496 /*
6497 * No respone required for WDA_UPDATE_BEACON_IND so just free the request
6498 * param here
6499 */
Jeff Johnson295189b2012-06-20 16:38:30 -07006500 return ;
6501}
Jeff Johnson295189b2012-06-20 16:38:30 -07006502/*
6503 * FUNCTION: WDA_ProcessUpdateBeaconParams
6504 * Request to WDI to send the beacon parameters to HAL to update the Hardware
6505 */
6506VOS_STATUS WDA_ProcessUpdateBeaconParams(tWDA_CbContext *pWDA,
6507 tUpdateBeaconParams *pUpdateBeaconParams)
6508{
6509 WDI_Status status = WDI_STATUS_SUCCESS ;
6510 WDI_UpdateBeaconParamsType *wdiUpdateBeaconParams =
6511 (WDI_UpdateBeaconParamsType *)vos_mem_malloc(
6512 sizeof(WDI_UpdateBeaconParamsType)) ;
6513 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006515 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006516 if(NULL == wdiUpdateBeaconParams)
6517 {
6518 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006519 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006520 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,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006527 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006528 VOS_ASSERT(0);
6529 vos_mem_free(wdiUpdateBeaconParams);
6530 return VOS_STATUS_E_NOMEM;
6531 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006532 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucBssIdx =
6533 pUpdateBeaconParams->bssIdx;
6534 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortPreamble =
6535 pUpdateBeaconParams->fShortPreamble;
6536 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfShortSlotTime =
6537 pUpdateBeaconParams->fShortSlotTime;
6538 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usBeaconInterval =
6539 pUpdateBeaconParams->beaconInterval;
6540 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllaCoexist =
6541 pUpdateBeaconParams->llaCoexist;
6542 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllbCoexist =
6543 pUpdateBeaconParams->llbCoexist;
6544 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllgCoexist =
6545 pUpdateBeaconParams->llgCoexist;
6546 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucHt20MhzCoexist=
6547 pUpdateBeaconParams->ht20MhzCoexist;
6548 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucllnNonGFCoexist =
6549 pUpdateBeaconParams->llnNonGFCoexist;
6550 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfLsigTXOPProtectionFullSupport =
6551 pUpdateBeaconParams->fLsigTXOPProtectionFullSupport;
6552 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.ucfRIFSMode =
6553 pUpdateBeaconParams->fRIFSMode;
6554 wdiUpdateBeaconParams->wdiUpdateBeaconParamsInfo.usChangeBitmap =
6555 pUpdateBeaconParams->paramChangeBitmap;
6556 wdiUpdateBeaconParams->wdiReqStatusCB = NULL ;
6557
6558 pWdaParams->pWdaContext = pWDA;
6559 /* Store UpdateBeacon Req pointer, as this will be used for response */
6560 pWdaParams->wdaMsgParam = (void *)pUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006561 /* store Params pass it to WDI */
6562 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateBeaconParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006563 status = WDI_UpdateBeaconParamsReq(wdiUpdateBeaconParams,
6564 (WDI_UpdateBeaconParamsRspCb)WDA_UpdateBeaconParamsCallback,
6565 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006566 if(IS_WDI_STATUS_FAILURE(status))
6567 {
6568 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6569 "Failure in UPDATE BEACON REQ Params WDI API, free all the memory " );
6570 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6571 vos_mem_free(pWdaParams->wdaMsgParam);
6572 vos_mem_free(pWdaParams);
6573 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006574 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006575}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006576#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -07006577/*
6578 * FUNCTION: WDA_TSMStatsReqCallback
6579 * send TSM Stats RSP back to PE
6580 */
6581void WDA_TSMStatsReqCallback(WDI_TSMStatsRspParamsType *pwdiTSMStatsRspParams, void* pUserData)
6582{
6583 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6584 tWDA_CbContext *pWDA = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006585 tpAniGetTsmStatsRsp pTsmRspParams = NULL;
6586 tpAniGetTsmStatsReq pGetTsmStatsReqParams = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07006587
6588 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006589 "<------ Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006590 if(NULL == pWdaParams)
6591 {
6592 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006593 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006594 VOS_ASSERT(0) ;
6595 return ;
6596 }
6597 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006598 pGetTsmStatsReqParams = (tAniGetTsmStatsReq *)pWdaParams->wdaMsgParam;
6599
6600 if(NULL == pGetTsmStatsReqParams)
6601 {
6602 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6603 "%s: pGetTsmStatsReqParams received NULL", __func__);
6604 VOS_ASSERT(0);
6605 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6606 vos_mem_free(pWdaParams);
6607 return;
6608 }
6609
6610 pTsmRspParams =
6611 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
Jeff Johnson295189b2012-06-20 16:38:30 -07006612 if( NULL == pTsmRspParams )
6613 {
6614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006615 "%s: pTsmRspParams received NULL " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006616 VOS_ASSERT( 0 );
6617 return ;
6618 }
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006619 vos_mem_set(pTsmRspParams, sizeof(tAniGetTsmStatsRsp), 0);
6620 pTsmRspParams->rc = pwdiTSMStatsRspParams->wdiStatus;
6621 pTsmRspParams->staId = pGetTsmStatsReqParams->staId;
6622
Jeff Johnson295189b2012-06-20 16:38:30 -07006623 pTsmRspParams->tsmMetrics.UplinkPktQueueDly = pwdiTSMStatsRspParams->UplinkPktQueueDly;
6624 vos_mem_copy(pTsmRspParams->tsmMetrics.UplinkPktQueueDlyHist,
6625 pwdiTSMStatsRspParams->UplinkPktQueueDlyHist,
6626 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist)/
6627 sizeof(pwdiTSMStatsRspParams->UplinkPktQueueDlyHist[0]));
6628 pTsmRspParams->tsmMetrics.UplinkPktTxDly = pwdiTSMStatsRspParams->UplinkPktTxDly;
6629 pTsmRspParams->tsmMetrics.UplinkPktLoss = pwdiTSMStatsRspParams->UplinkPktLoss;
6630 pTsmRspParams->tsmMetrics.UplinkPktCount = pwdiTSMStatsRspParams->UplinkPktCount;
6631 pTsmRspParams->tsmMetrics.RoamingCount = pwdiTSMStatsRspParams->RoamingCount;
6632 pTsmRspParams->tsmMetrics.RoamingDly = pwdiTSMStatsRspParams->RoamingDly;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006633
6634 /* Assign get tsm stats req req (backup) in to the response */
6635 pTsmRspParams->tsmStatsReq = pGetTsmStatsReqParams;
6636
6637 /* free WDI command buffer */
6638 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6639 vos_mem_free(pWdaParams);
6640
Jeff Johnson295189b2012-06-20 16:38:30 -07006641 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006642 return ;
6643}
6644
6645
Jeff Johnson295189b2012-06-20 16:38:30 -07006646/*
6647 * FUNCTION: WDA_ProcessTsmStatsReq
6648 * Request to WDI to get the TSM Stats params.
6649 */
6650VOS_STATUS WDA_ProcessTsmStatsReq(tWDA_CbContext *pWDA,
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006651 tpAniGetTsmStatsReq pTsmStats)
Jeff Johnson295189b2012-06-20 16:38:30 -07006652{
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006653 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006654 WDI_TSMStatsReqParamsType *wdiTSMReqParam = NULL;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006655 tWDA_ReqParams *pWdaParams = NULL;
6656 tAniGetTsmStatsRsp *pGetTsmStatsRspParams = NULL;
6657
Jeff Johnson295189b2012-06-20 16:38:30 -07006658 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006659 "------> Entering: %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006660 wdiTSMReqParam = (WDI_TSMStatsReqParamsType *)vos_mem_malloc(
6661 sizeof(WDI_TSMStatsReqParamsType));
6662 if(NULL == wdiTSMReqParam)
6663 {
6664 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006665 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006666 VOS_ASSERT(0);
6667 return VOS_STATUS_E_NOMEM;
6668 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006669 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6670 if(NULL == pWdaParams)
6671 {
6672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006673 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006674 VOS_ASSERT(0);
6675 vos_mem_free(wdiTSMReqParam);
6676 return VOS_STATUS_E_NOMEM;
6677 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006678 wdiTSMReqParam->wdiTsmStatsParamsInfo.ucTid = pTsmStats->tid;
6679 vos_mem_copy(wdiTSMReqParam->wdiTsmStatsParamsInfo.bssid,
6680 pTsmStats->bssId,
6681 sizeof(wpt_macAddr));
6682 wdiTSMReqParam->wdiReqStatusCB = NULL ;
6683
6684 pWdaParams->pWdaContext = pWDA;
6685 /* Store TSM Stats pointer, as this will be used for response */
6686 pWdaParams->wdaMsgParam = (void *)pTsmStats ;
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006687 pWdaParams->wdaWdiApiMsgParam = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006688 status = WDI_TSMStatsReq(wdiTSMReqParam,
6689 (WDI_TsmRspCb)WDA_TSMStatsReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006690 if(IS_WDI_STATUS_FAILURE(status))
6691 {
6692 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6693 "Failure in TSM STATS REQ Params WDI API, free all the memory " );
Srinivas Girigowda5cecb202013-10-08 09:13:25 -07006694 vos_mem_free(pWdaParams);
6695
6696 pGetTsmStatsRspParams =
6697 (tAniGetTsmStatsRsp *)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp));
6698 if(NULL == pGetTsmStatsRspParams)
6699 {
6700 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6701 "%s: VOS MEM Alloc Failure", __func__);
6702 VOS_ASSERT(0);
6703 vos_mem_free(pTsmStats);
6704 return VOS_STATUS_E_NOMEM;
6705 }
6706 pGetTsmStatsRspParams->staId = pTsmStats->staId;
6707 pGetTsmStatsRspParams->rc = eSIR_FAILURE;
6708 pGetTsmStatsRspParams->tsmStatsReq = pTsmStats;
6709
6710 WDA_SendMsg(pWDA, WDA_TSM_STATS_RSP, (void *)pGetTsmStatsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006711 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006712 return CONVERT_WDI2VOS_STATUS(status) ;
6713}
6714#endif
6715/*
6716 * FUNCTION: WDA_SendBeaconParamsCallback
6717 * No need to send any response to PE in this case
6718 */
6719void WDA_SendBeaconParamsCallback(WDI_Status status, void* pUserData)
6720{
6721
Jeff Johnson295189b2012-06-20 16:38:30 -07006722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006723 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006724 return ;
6725}
Jeff Johnson295189b2012-06-20 16:38:30 -07006726/*
6727 * FUNCTION: WDA_ProcessSendBeacon
6728 * Request to WDI to send the beacon template to HAL to update the TPE memory and
6729 * start beacon trasmission
6730 */
6731VOS_STATUS WDA_ProcessSendBeacon(tWDA_CbContext *pWDA,
6732 tSendbeaconParams *pSendbeaconParams)
6733{
6734 WDI_Status status = WDI_STATUS_SUCCESS ;
6735 WDI_SendBeaconParamsType wdiSendBeaconReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07006736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006737 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006738 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.macBSSID,
6739 pSendbeaconParams->bssId, sizeof(tSirMacAddr));
6740 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beaconLength =
6741 pSendbeaconParams->beaconLength;
Jeff Johnson295189b2012-06-20 16:38:30 -07006742 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.timIeOffset =
6743 pSendbeaconParams->timIeOffset;
Gopichand Nakkala81aef732013-03-22 11:15:19 +05306744 /* p2pIeOffset should be atleast greater than timIeOffset */
6745 if ((pSendbeaconParams->p2pIeOffset != 0) &&
6746 (pSendbeaconParams->p2pIeOffset <
6747 pSendbeaconParams->timIeOffset))
6748 {
6749 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6750 "Invalid p2pIeOffset = %hu ", pSendbeaconParams->p2pIeOffset);
6751 VOS_ASSERT( 0 );
6752 return WDI_STATUS_E_FAILURE;
6753 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006754 wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.usP2PIeOffset =
6755 pSendbeaconParams->p2pIeOffset;
Jeff Johnson295189b2012-06-20 16:38:30 -07006756 /* Copy the beacon template to local buffer */
6757 vos_mem_copy(wdiSendBeaconReqParam.wdiSendBeaconParamsInfo.beacon,
6758 pSendbeaconParams->beacon, pSendbeaconParams->beaconLength);
6759 wdiSendBeaconReqParam.wdiReqStatusCB = NULL ;
6760
Jeff Johnson295189b2012-06-20 16:38:30 -07006761 status = WDI_SendBeaconParamsReq(&wdiSendBeaconReqParam,
6762 (WDI_SendBeaconParamsRspCb)WDA_SendBeaconParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006763 if(IS_WDI_STATUS_FAILURE(status))
6764 {
6765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6766 "Failure in SEND BEACON REQ Params WDI API" );
6767 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006768 vos_mem_free(pSendbeaconParams);
6769 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006770}
Jeff Johnson295189b2012-06-20 16:38:30 -07006771/*
6772 * FUNCTION: WDA_UpdateProbeRspParamsCallback
6773 * No need to send any response to PE in this case
6774 */
6775void WDA_UpdateProbeRspParamsCallback(WDI_Status status, void* pUserData)
6776{
Jeff Johnson295189b2012-06-20 16:38:30 -07006777 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006778 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006779 return ;
6780}
6781
Jeff Johnson295189b2012-06-20 16:38:30 -07006782/*
6783 * FUNCTION: WDA_ProcessUpdateProbeRspTemplate
6784 * Request to WDI to send the probe response template to HAL to update the TPE memory and
6785 * send probe response
6786 */
6787VOS_STATUS WDA_ProcessUpdateProbeRspTemplate(tWDA_CbContext *pWDA,
6788 tSendProbeRespParams *pSendProbeRspParams)
6789{
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006790 WDI_Status status = WDI_STATUS_SUCCESS;
6791 WDI_UpdateProbeRspTemplateParamsType *wdiSendProbeRspParam =
6792 vos_mem_malloc(sizeof(WDI_UpdateProbeRspTemplateParamsType));
Jeff Johnson295189b2012-06-20 16:38:30 -07006793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006794 "------> %s " ,__func__);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006795
6796 if (!wdiSendProbeRspParam)
6797 return CONVERT_WDI2VOS_STATUS(WDI_STATUS_MEM_FAILURE);
6798
Jeff Johnson295189b2012-06-20 16:38:30 -07006799 /*Copy update probe response parameters*/
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006800 vos_mem_copy(wdiSendProbeRspParam->wdiProbeRspTemplateInfo.macBSSID,
Jeff Johnson295189b2012-06-20 16:38:30 -07006801 pSendProbeRspParams->bssId, sizeof(tSirMacAddr));
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006802 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uProbeRespTemplateLen =
Jeff Johnson295189b2012-06-20 16:38:30 -07006803 pSendProbeRspParams->probeRespTemplateLen;
Jeff Johnson295189b2012-06-20 16:38:30 -07006804 /* Copy the Probe Response template to local buffer */
6805 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006806 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.pProbeRespTemplate,
Jeff Johnson295189b2012-06-20 16:38:30 -07006807 pSendProbeRspParams->pProbeRespTemplate,
6808 pSendProbeRspParams->probeRespTemplateLen);
6809 vos_mem_copy(
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006810 wdiSendProbeRspParam->wdiProbeRspTemplateInfo.uaProxyProbeReqValidIEBmap,
Jeff Johnson295189b2012-06-20 16:38:30 -07006811 pSendProbeRspParams->ucProxyProbeReqValidIEBmap,
6812 WDI_PROBE_REQ_BITMAP_IE_LEN);
6813
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006814 wdiSendProbeRspParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006815
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006816 status = WDI_UpdateProbeRspTemplateReq(wdiSendProbeRspParam,
Jeff Johnson295189b2012-06-20 16:38:30 -07006817 (WDI_UpdateProbeRspTemplateRspCb)WDA_UpdateProbeRspParamsCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07006818 if(IS_WDI_STATUS_FAILURE(status))
6819 {
6820 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6821 "Failure in SEND Probe RSP Params WDI API" );
6822 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006823 vos_mem_free(pSendProbeRspParams);
Madan Mohan Koyyalamudi8f207c12012-10-30 18:18:38 -07006824 vos_mem_free(wdiSendProbeRspParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07006825 return CONVERT_WDI2VOS_STATUS(status);
Jeff Johnson295189b2012-06-20 16:38:30 -07006826}
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08006827#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -07006828/*
6829 * FUNCTION: WDA_SetMaxTxPowerCallBack
6830 * send the response to PE with power value received from WDI
6831 */
6832void WDA_SetMaxTxPowerCallBack(WDI_SetMaxTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
6833 void* pUserData)
6834{
6835 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6836 tWDA_CbContext *pWDA = NULL;
6837 tMaxTxPowerParams *pMaxTxPowerParams = NULL;
6838
6839 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006840 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006841 if(NULL == pWdaParams)
6842 {
6843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006844 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006845 VOS_ASSERT(0) ;
6846 return ;
6847 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006848 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6849 pMaxTxPowerParams = (tMaxTxPowerParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006850 if( NULL == pMaxTxPowerParams )
6851 {
6852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006853 "%s: pMaxTxPowerParams received NULL " ,__func__);
Jeff Johnsone7245742012-09-05 17:12:55 -07006854 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07006855 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6856 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006857 return ;
6858 }
Jeff Johnsone7245742012-09-05 17:12:55 -07006859
Jeff Johnson295189b2012-06-20 16:38:30 -07006860
6861 /*need to free memory for the pointers used in the
6862 WDA Process.Set Max Tx Power Req function*/
Jeff Johnson295189b2012-06-20 16:38:30 -07006863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6864 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006865 pMaxTxPowerParams->power = pwdiSetMaxTxPowerRsp->ucPower;
Jeff Johnsone7245742012-09-05 17:12:55 -07006866
Jeff Johnson295189b2012-06-20 16:38:30 -07006867
6868 /* send response to UMAC*/
6869 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, pMaxTxPowerParams , 0) ;
6870
6871 return;
6872}
Jeff Johnson295189b2012-06-20 16:38:30 -07006873/*
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006874 * FUNCTION: WDA_ProcessSetMaxTxPowerReq
Jeff Johnson295189b2012-06-20 16:38:30 -07006875 * Request to WDI to send set Max Tx Power Request
6876 */
6877 VOS_STATUS WDA_ProcessSetMaxTxPowerReq(tWDA_CbContext *pWDA,
6878 tMaxTxPowerParams *MaxTxPowerParams)
6879{
6880 WDI_Status status = WDI_STATUS_SUCCESS;
6881 WDI_SetMaxTxPowerParamsType *wdiSetMaxTxPowerParams = NULL;
6882 tWDA_ReqParams *pWdaParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006883
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
Jeff Johnson295189b2012-06-20 16:38:30 -07006887 wdiSetMaxTxPowerParams = (WDI_SetMaxTxPowerParamsType *)vos_mem_malloc(
6888 sizeof(WDI_SetMaxTxPowerParamsType));
6889 if(NULL == wdiSetMaxTxPowerParams)
6890 {
6891 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006892 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006893 VOS_ASSERT(0);
6894 return VOS_STATUS_E_NOMEM;
6895 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006896 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
6897 if(NULL == pWdaParams)
6898 {
6899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07006900 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07006901 vos_mem_free(wdiSetMaxTxPowerParams);
6902 VOS_ASSERT(0);
6903 return VOS_STATUS_E_NOMEM;
6904 }
Jeff Johnson295189b2012-06-20 16:38:30 -07006905 /* Copy.Max.Tx.Power Params to WDI structure */
6906 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macBSSId,
6907 MaxTxPowerParams->bssId,
6908 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006909 vos_mem_copy(wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.macSelfStaMacAddr,
6910 MaxTxPowerParams->selfStaMacAddr,
6911 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07006912 wdiSetMaxTxPowerParams->wdiMaxTxPowerInfo.ucPower =
6913 MaxTxPowerParams->power;
Jeff Johnson295189b2012-06-20 16:38:30 -07006914 wdiSetMaxTxPowerParams->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006915 pWdaParams->pWdaContext = pWDA;
6916 pWdaParams->wdaMsgParam = (void *)MaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006917 /* store Params pass it to WDI */
6918 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMaxTxPowerParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006919 status = WDI_SetMaxTxPowerReq(wdiSetMaxTxPowerParams,
6920 (WDA_SetMaxTxPowerRspCb)WDA_SetMaxTxPowerCallBack, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07006921 if(IS_WDI_STATUS_FAILURE(status))
6922 {
6923 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6924 "Failure in SET MAX TX Power REQ Params WDI API, free all the memory " );
6925 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
6926 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07006927 /* send response to UMAC*/
6928 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_RSP, MaxTxPowerParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07006929 }
6930 return CONVERT_WDI2VOS_STATUS(status);
6931
6932}
Jeff Johnson295189b2012-06-20 16:38:30 -07006933#endif
schang86c22c42013-03-13 18:41:24 -07006934
6935/*
Arif Hussaina5ebce02013-08-09 15:09:58 -07006936 * FUNCTION: WDA_SetMaxTxPowerPerBandCallBack
6937 * send the response to PE with power value received from WDI
6938 */
6939void WDA_SetMaxTxPowerPerBandCallBack(WDI_SetMaxTxPowerPerBandRspMsg
6940 *pwdiSetMaxTxPowerPerBandRsp,
6941 void* pUserData)
6942{
6943 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
6944 tWDA_CbContext *pWDA = NULL;
6945 tMaxTxPowerPerBandParams *pMxTxPwrPerBandParams = NULL;
6946
6947 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6948 "<------ %s ", __func__);
6949 if (NULL == pWdaParams)
6950 {
6951 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6952 "%s: pWdaParams received NULL", __func__);
6953 VOS_ASSERT(0);
6954 return ;
6955 }
6956 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
6957 pMxTxPwrPerBandParams = (tMaxTxPowerPerBandParams*)pWdaParams->wdaMsgParam;
6958 if ( NULL == pMxTxPwrPerBandParams )
6959 {
6960 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
6961 "%s: pMxTxPwrPerBandParams received NULL ", __func__);
6962 VOS_ASSERT(0);
6963 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6964 vos_mem_free(pWdaParams);
6965 return;
6966 }
6967
6968 /*need to free memory for the pointers used in the
6969 WDA Process.Set Max Tx Power Req function*/
6970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
6971 vos_mem_free(pWdaParams);
6972 pMxTxPwrPerBandParams->power = pwdiSetMaxTxPowerPerBandRsp->ucPower;
6973
6974 /* send response to UMAC*/
6975 WDA_SendMsg(pWDA, WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
6976 pMxTxPwrPerBandParams, 0);
6977
6978 return;
6979}
6980
6981/*
6982 * FUNCTION: WDA_ProcessSetMaxTxPowerPerBandReq
6983 * Request to WDI to send set Max Tx Power Per band Request
6984 */
6985 VOS_STATUS WDA_ProcessSetMaxTxPowerPerBandReq(tWDA_CbContext *pWDA,
6986 tMaxTxPowerPerBandParams
6987 *MaxTxPowerPerBandParams)
6988{
6989 WDI_Status status = WDI_STATUS_SUCCESS;
6990 WDI_SetMaxTxPowerPerBandParamsType *wdiSetMxTxPwrPerBandParams = NULL;
6991 tWDA_ReqParams *pWdaParams = NULL;
6992
6993 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
6994 "------> %s ", __func__);
6995
6996 wdiSetMxTxPwrPerBandParams = vos_mem_malloc(
6997 sizeof(WDI_SetMaxTxPowerPerBandParamsType));
6998
6999 if (NULL == wdiSetMxTxPwrPerBandParams)
7000 {
7001 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7002 "%s: VOS MEM Alloc Failure", __func__);
7003 VOS_ASSERT(0);
7004 return VOS_STATUS_E_NOMEM;
7005 }
7006 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7007 if (NULL == pWdaParams)
7008 {
7009 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7010 "%s: VOS MEM Alloc Failure", __func__);
7011 vos_mem_free(wdiSetMxTxPwrPerBandParams);
7012 VOS_ASSERT(0);
7013 return VOS_STATUS_E_NOMEM;
7014 }
7015 /* Copy.Max.Tx.Power.Per.Band Params to WDI structure */
7016 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.bandInfo = \
7017 MaxTxPowerPerBandParams->bandInfo;
7018 wdiSetMxTxPwrPerBandParams->wdiMaxTxPowerPerBandInfo.ucPower = \
7019 MaxTxPowerPerBandParams->power;
7020 wdiSetMxTxPwrPerBandParams->wdiReqStatusCB = NULL;
7021 pWdaParams->pWdaContext = pWDA;
7022 pWdaParams->wdaMsgParam = (void *)MaxTxPowerPerBandParams;
7023 /* store Params pass it to WDI */
7024 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetMxTxPwrPerBandParams;
7025 status = WDI_SetMaxTxPowerPerBandReq(wdiSetMxTxPwrPerBandParams,
7026 WDA_SetMaxTxPowerPerBandCallBack,
7027 pWdaParams);
7028 if (IS_WDI_STATUS_FAILURE(status))
7029 {
7030 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7031 "Failure in SET MAX TX Power REQ Params WDI API,"
7032 " free all the memory");
7033 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7034 vos_mem_free(pWdaParams);
7035 /* send response to UMAC*/
7036 WDA_SendMsg(pWDA,
7037 WDA_SET_MAX_TX_POWER_PER_BAND_RSP,
7038 MaxTxPowerPerBandParams, 0);
7039 }
7040 return CONVERT_WDI2VOS_STATUS(status);
7041}
7042
7043/*
schang86c22c42013-03-13 18:41:24 -07007044 * FUNCTION: WDA_SetTxPowerCallBack
7045 * send the response to PE with power value received from WDI
7046 */
7047void WDA_SetTxPowerCallBack(WDI_SetTxPowerRspMsg * pwdiSetMaxTxPowerRsp,
7048 void* pUserData)
7049{
7050 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7051 tWDA_CbContext *pWDA = NULL;
7052 tSirSetTxPowerReq *pTxPowerParams = NULL;
7053
7054 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7055 "<------ %s ", __func__);
7056 if(NULL == pWdaParams)
7057 {
7058 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7059 "%s: pWdaParams received NULL", __func__);
7060 VOS_ASSERT(0) ;
7061 return ;
7062 }
7063 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7064 pTxPowerParams = (tSirSetTxPowerReq *)pWdaParams->wdaMsgParam;
7065 if(NULL == pTxPowerParams)
7066 {
7067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7068 "%s: pTxPowerParams received NULL " ,__func__);
7069 VOS_ASSERT(0);
7070 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7071 vos_mem_free(pWdaParams);
7072 return ;
7073 }
7074
7075 /*need to free memory for the pointers used in the
7076 WDA Process.Set Max Tx Power Req function*/
7077 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7078 vos_mem_free(pWdaParams);
7079
7080 /* send response to UMAC*/
7081 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, pTxPowerParams , 0) ;
7082 return;
7083}
7084
7085/*
7086 * FUNCTION: WDA_ProcessSetTxPowerReq
7087 * Request to WDI to send set Tx Power Request
7088 */
7089 VOS_STATUS WDA_ProcessSetTxPowerReq(tWDA_CbContext *pWDA,
7090 tSirSetTxPowerReq *txPowerParams)
7091{
7092 WDI_Status status = WDI_STATUS_SUCCESS;
7093 WDI_SetTxPowerParamsType *wdiSetTxPowerParams = NULL;
7094 tWDA_ReqParams *pWdaParams = NULL;
7095
7096 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7097 "------> %s ", __func__);
7098
7099 wdiSetTxPowerParams = (WDI_SetTxPowerParamsType *)vos_mem_malloc(
7100 sizeof(WDI_SetTxPowerParamsType));
7101 if(NULL == wdiSetTxPowerParams)
7102 {
7103 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7104 "%s: VOS MEM Alloc Failure", __func__);
7105 VOS_ASSERT(0);
7106 return VOS_STATUS_E_NOMEM;
7107 }
7108 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7109 if(NULL == pWdaParams)
7110 {
7111 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7112 "%s: VOS MEM Alloc Failure", __func__);
7113 vos_mem_free(wdiSetTxPowerParams);
7114 VOS_ASSERT(0);
7115 return VOS_STATUS_E_NOMEM;
7116 }
7117 wdiSetTxPowerParams->wdiTxPowerInfo.bssIdx =
7118 txPowerParams->bssIdx;
7119 wdiSetTxPowerParams->wdiTxPowerInfo.ucPower =
7120 txPowerParams->mwPower;
7121 wdiSetTxPowerParams->wdiReqStatusCB = NULL ;
7122 pWdaParams->pWdaContext = pWDA;
7123 pWdaParams->wdaMsgParam = (void *)txPowerParams ;
7124 /* store Params pass it to WDI */
7125 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTxPowerParams ;
7126 status = WDI_SetTxPowerReq(wdiSetTxPowerParams,
7127 (WDA_SetTxPowerRspCb)WDA_SetTxPowerCallBack, pWdaParams);
7128 if(IS_WDI_STATUS_FAILURE(status))
7129 {
7130 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7131 "Failure in SET TX Power REQ Params WDI API, free all the memory ");
7132 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7133 vos_mem_free(pWdaParams);
7134 /* send response to UMAC*/
7135 WDA_SendMsg(pWDA, WDA_SET_TX_POWER_RSP, txPowerParams , 0) ;
7136 }
7137 return CONVERT_WDI2VOS_STATUS(status);
7138}
7139
Jeff Johnson295189b2012-06-20 16:38:30 -07007140/*
7141 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7142 * Free the memory. No need to send any response to PE in this case
7143 */
7144void WDA_SetP2PGONOAReqParamsCallback(WDI_Status status, void* pUserData)
7145{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007146 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7147
Jeff Johnson295189b2012-06-20 16:38:30 -07007148 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007149 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007150
7151 if(NULL == pWdaParams)
7152 {
7153 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007154 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007155 VOS_ASSERT(0) ;
7156 return ;
7157 }
7158
7159 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7160 vos_mem_free(pWdaParams->wdaMsgParam) ;
7161 vos_mem_free(pWdaParams);
7162
Jeff Johnson295189b2012-06-20 16:38:30 -07007163 /*
7164 * No respone required for SIR_HAL_SET_P2P_GO_NOA_REQ
7165 * so just free the request param here
7166 */
Jeff Johnson295189b2012-06-20 16:38:30 -07007167 return ;
7168}
7169
Jeff Johnson295189b2012-06-20 16:38:30 -07007170/*
7171 * FUNCTION: WDA_ProcessSetP2PGONOAReq
7172 * Request to WDI to set the P2P Group Owner Notice of Absence Req
7173 */
7174VOS_STATUS WDA_ProcessSetP2PGONOAReq(tWDA_CbContext *pWDA,
7175 tP2pPsParams *pP2pPsConfigParams)
7176{
7177 WDI_Status status = WDI_STATUS_SUCCESS ;
7178 WDI_SetP2PGONOAReqParamsType *wdiSetP2PGONOAReqParam =
7179 (WDI_SetP2PGONOAReqParamsType *)vos_mem_malloc(
7180 sizeof(WDI_SetP2PGONOAReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007181 tWDA_ReqParams *pWdaParams = NULL;
7182
Jeff Johnson295189b2012-06-20 16:38:30 -07007183 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007184 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007185 if(NULL == wdiSetP2PGONOAReqParam)
7186 {
7187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007189 VOS_ASSERT(0);
7190 return VOS_STATUS_E_NOMEM;
7191 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007192
7193 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7194 if(NULL == pWdaParams)
7195 {
7196 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007197 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007198 vos_mem_free(pP2pPsConfigParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007199 vos_mem_free(wdiSetP2PGONOAReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007200 VOS_ASSERT(0);
7201 return VOS_STATUS_E_NOMEM;
7202 }
7203
Jeff Johnson295189b2012-06-20 16:38:30 -07007204 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucOpp_ps =
7205 pP2pPsConfigParams->opp_ps;
7206 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uCtWindow =
7207 pP2pPsConfigParams->ctWindow;
7208 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucCount =
7209 pP2pPsConfigParams->count;
7210 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uDuration =
7211 pP2pPsConfigParams->duration;
7212 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uInterval =
7213 pP2pPsConfigParams->interval;
7214 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.uSingle_noa_duration =
7215 pP2pPsConfigParams->single_noa_duration;
7216 wdiSetP2PGONOAReqParam->wdiP2PGONOAInfo.ucPsSelection =
7217 pP2pPsConfigParams->psSelection;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007218
Jeff Johnson295189b2012-06-20 16:38:30 -07007219 wdiSetP2PGONOAReqParam->wdiReqStatusCB = NULL ;
7220 /* Store msg pointer from PE, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007221 pWdaParams->wdaMsgParam = (void *)pP2pPsConfigParams ;
7222
Jeff Johnson295189b2012-06-20 16:38:30 -07007223 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007224 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetP2PGONOAReqParam ;
7225 pWdaParams->pWdaContext = pWDA;
7226
Jeff Johnson295189b2012-06-20 16:38:30 -07007227 status = WDI_SetP2PGONOAReq(wdiSetP2PGONOAReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007228 (WDI_SetP2PGONOAReqParamsRspCb)WDA_SetP2PGONOAReqParamsCallback, pWdaParams);
7229
Jeff Johnson295189b2012-06-20 16:38:30 -07007230 if(IS_WDI_STATUS_FAILURE(status))
7231 {
7232 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7233 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007234 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7235 vos_mem_free(pWdaParams->wdaMsgParam);
7236 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007237 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007238 return CONVERT_WDI2VOS_STATUS(status);
7239
Jeff Johnson295189b2012-06-20 16:38:30 -07007240}
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307241
7242#ifdef FEATURE_WLAN_TDLS
7243/*
7244 * FUNCTION: WDA_SetP2PGONOAReqParamsCallback
7245 * Free the memory. No need to send any response to PE in this case
7246 */
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307247void WDA_SetTDLSLinkEstablishReqParamsCallback(WDI_SetTdlsLinkEstablishReqResp *wdiSetTdlsLinkEstablishReqRsp,
7248 void* pUserData)
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307249{
7250 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7251 tWDA_CbContext *pWDA = NULL;
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307252 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307253
7254
7255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7256 "<------ %s " ,__func__);
7257 if(NULL == pWdaParams)
7258 {
7259 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7260 "%s: pWdaParams received NULL", __func__);
7261 VOS_ASSERT(0) ;
7262 return ;
7263 }
7264 pWDA = (tWDA_CbContext *) pWdaParams->pWdaContext;
7265
7266 if(NULL == pWdaParams)
7267 {
7268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7269 "%s: pWdaParams received NULL", __func__);
7270 VOS_ASSERT(0) ;
7271 return ;
7272 }
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307273 pTdlsLinkEstablishParams = (tTdlsLinkEstablishParams *)pWdaParams->wdaMsgParam ;
7274 if( NULL == pTdlsLinkEstablishParams )
7275 {
7276 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7277 "%s: pTdlsLinkEstablishParams "
7278 "received NULL " ,__func__);
7279 VOS_ASSERT(0);
7280 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7281 vos_mem_free(pWdaParams);
7282 return ;
7283 }
7284 pTdlsLinkEstablishParams->status = CONVERT_WDI2SIR_STATUS(
7285 wdiSetTdlsLinkEstablishReqRsp->wdiStatus);
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307286 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307287 vos_mem_free(pWdaParams);
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307288 /* send response to UMAC*/
7289 WDA_SendMsg(pWDA, WDA_SET_TDLS_LINK_ESTABLISH_REQ_RSP, pTdlsLinkEstablishParams, 0) ;
7290
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307291 return ;
7292}
7293
7294VOS_STATUS WDA_ProcessSetTdlsLinkEstablishReq(tWDA_CbContext *pWDA,
7295 tTdlsLinkEstablishParams *pTdlsLinkEstablishParams)
7296{
7297 WDI_Status status = WDI_STATUS_SUCCESS ;
7298 WDI_SetTDLSLinkEstablishReqParamsType *wdiSetTDLSLinkEstablishReqParam =
7299 (WDI_SetTDLSLinkEstablishReqParamsType *)vos_mem_malloc(
7300 sizeof(WDI_SetTDLSLinkEstablishReqParamsType)) ;
7301 tWDA_ReqParams *pWdaParams = NULL;
7302 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7303 "------> %s " ,__func__);
7304 if(NULL == wdiSetTDLSLinkEstablishReqParam)
7305 {
7306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7307 "%s: VOS MEM Alloc Failure", __func__);
7308 VOS_ASSERT(0);
7309 return VOS_STATUS_E_NOMEM;
7310 }
7311 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7312 if(NULL == pWdaParams)
7313 {
7314 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7315 "%s: VOS MEM Alloc Failure", __func__);
7316 vos_mem_free(pTdlsLinkEstablishParams);
7317 vos_mem_free(wdiSetTDLSLinkEstablishReqParam);
7318 VOS_ASSERT(0);
7319 return VOS_STATUS_E_NOMEM;
7320 }
7321 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uStaIdx =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307322 pTdlsLinkEstablishParams->staIdx;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307323 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsResponder =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307324 pTdlsLinkEstablishParams->isResponder;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307325 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uUapsdQueues =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307326 pTdlsLinkEstablishParams->uapsdQueues;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307327 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uMaxSp =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307328 pTdlsLinkEstablishParams->maxSp;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307329 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsBufSta =
Gopichand Nakkala574f6d12013-06-27 19:38:43 +05307330 pTdlsLinkEstablishParams->isBufsta;
Naresh Jayaramc7cbd782014-02-04 17:38:23 +05307331 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.uIsOffChannelSupported =
7332 pTdlsLinkEstablishParams->isOffChannelSupported;
7333
7334 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannels,
7335 pTdlsLinkEstablishParams->validChannels,
7336 pTdlsLinkEstablishParams->validChannelsLen);
7337
7338 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validChannelsLen =
7339 pTdlsLinkEstablishParams->validChannelsLen;
7340
7341 vos_mem_copy(wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClasses,
7342 pTdlsLinkEstablishParams->validOperClasses,
7343 pTdlsLinkEstablishParams->validOperClassesLen);
7344 wdiSetTDLSLinkEstablishReqParam->wdiTDLSLinkEstablishInfo.validOperClassesLen =
7345 pTdlsLinkEstablishParams->validOperClassesLen;
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +05307346
7347 wdiSetTDLSLinkEstablishReqParam->wdiReqStatusCB = NULL ;
7348 /* Store msg pointer from PE, as this will be used for response */
7349 pWdaParams->wdaMsgParam = (void *)pTdlsLinkEstablishParams ;
7350 /* store Params pass it to WDI */
7351 pWdaParams->wdaWdiApiMsgParam = (void *)wdiSetTDLSLinkEstablishReqParam ;
7352 pWdaParams->pWdaContext = pWDA;
7353
7354 status = WDI_SetTDLSLinkEstablishReq(wdiSetTDLSLinkEstablishReqParam,
7355 (WDI_SetTDLSLinkEstablishReqParamsRspCb)
7356 WDA_SetTDLSLinkEstablishReqParamsCallback,
7357 pWdaParams);
7358 if(IS_WDI_STATUS_FAILURE(status))
7359 {
7360 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7361 "Failure in Set P2P GO NOA Req WDI API, free all the memory " );
7362 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7363 vos_mem_free(pWdaParams->wdaMsgParam);
7364 vos_mem_free(pWdaParams);
7365 }
7366 return CONVERT_WDI2VOS_STATUS(status);
7367}
7368#endif
7369
7370
Jeff Johnson295189b2012-06-20 16:38:30 -07007371#ifdef WLAN_FEATURE_VOWIFI_11R
7372/*
7373 * FUNCTION: WDA_AggrAddTSReqCallback
7374 * send ADD AGGREGATED TS RSP back to PE
7375 */
7376void WDA_AggrAddTSReqCallback(WDI_Status status, void* pUserData)
7377{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007378 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
7379 tWDA_CbContext *pWDA;
7380 tAggrAddTsParams *pAggrAddTsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007381 int i;
Jeff Johnson295189b2012-06-20 16:38:30 -07007382 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007383 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007384 if(NULL == pWdaParams)
7385 {
7386 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007387 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007388 VOS_ASSERT(0) ;
7389 return ;
7390 }
7391
7392 pWDA = pWdaParams->pWdaContext;
7393 pAggrAddTsReqParams = (tAggrAddTsParams *)pWdaParams->wdaMsgParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007394
7395 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7396 {
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007397 pAggrAddTsReqParams->status[i] = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007398 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007399 WDA_SendMsg(pWDA, WDA_AGGR_QOS_RSP, (void *)pAggrAddTsReqParams , 0) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007400
7401 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7402 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007403 return ;
7404}/* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -07007405/*
7406 * FUNCTION: WDA_ProcessAddTSReq
7407 * Request to WDI to send an update with AGGREGATED ADD TS REQ params.
7408 */
7409VOS_STATUS WDA_ProcessAggrAddTSReq(tWDA_CbContext *pWDA,
7410 tAggrAddTsParams *pAggrAddTsReqParams)
7411{
7412 WDI_Status status = WDI_STATUS_SUCCESS ;
7413 int i;
7414 WDI_AggrAddTSReqParamsType *wdiAggrAddTSReqParam;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007415 tWDA_ReqParams *pWdaParams = NULL;
7416
7417
Jeff Johnson295189b2012-06-20 16:38:30 -07007418 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007419 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007420 wdiAggrAddTSReqParam = (WDI_AggrAddTSReqParamsType *)vos_mem_malloc(
7421 sizeof(WDI_AggrAddTSReqParamsType)) ;
7422 if(NULL == wdiAggrAddTSReqParam)
7423 {
7424 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007425 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007426 VOS_ASSERT(0);
7427 return VOS_STATUS_E_NOMEM;
7428 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007429
7430
7431 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7432 if(NULL == pWdaParams)
7433 {
7434 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007435 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007436 vos_mem_free(pAggrAddTsReqParams);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07007437 vos_mem_free(wdiAggrAddTSReqParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007438 VOS_ASSERT(0);
7439 return VOS_STATUS_E_NOMEM;
7440 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007441 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucSTAIdx = pAggrAddTsReqParams->staIdx;
7442 wdiAggrAddTSReqParam->wdiAggrTsInfo.ucTspecIdx =
7443 pAggrAddTsReqParams->tspecIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07007444 for( i = 0; i < WDI_MAX_NO_AC; i++ )
7445 {
7446 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucType = pAggrAddTsReqParams->tspec[i].type;
7447 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].ucLength =
7448 pAggrAddTsReqParams->tspec[i].length;
Jeff Johnson295189b2012-06-20 16:38:30 -07007449 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.ackPolicy =
7450 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.ackPolicy;
7451 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.userPrio =
7452 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.userPrio;
7453 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.psb =
7454 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.psb;
7455 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.aggregation =
7456 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.aggregation;
7457 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.accessPolicy =
7458 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.accessPolicy;
7459 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.direction =
7460 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.direction;
7461 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.tsid =
7462 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.tsid;
7463 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiTraffic.trafficType =
7464 pAggrAddTsReqParams->tspec[i].tsinfo.traffic.trafficType;
Jeff Johnson295189b2012-06-20 16:38:30 -07007465 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].wdiTSinfo.wdiSchedule.schedule =
7466 pAggrAddTsReqParams->tspec[i].tsinfo.schedule.schedule;
Jeff Johnson295189b2012-06-20 16:38:30 -07007467 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usNomMsduSz =
7468 pAggrAddTsReqParams->tspec[i].nomMsduSz;
7469 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMaxMsduSz =
7470 pAggrAddTsReqParams->tspec[i].maxMsduSz;
7471 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinSvcInterval =
7472 pAggrAddTsReqParams->tspec[i].minSvcInterval;
7473 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxSvcInterval =
7474 pAggrAddTsReqParams->tspec[i].maxSvcInterval;
7475 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uInactInterval =
7476 pAggrAddTsReqParams->tspec[i].inactInterval;
7477 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSuspendInterval =
7478 pAggrAddTsReqParams->tspec[i].suspendInterval;
7479 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uSvcStartTime =
7480 pAggrAddTsReqParams->tspec[i].svcStartTime;
7481 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinDataRate =
7482 pAggrAddTsReqParams->tspec[i].minDataRate;
7483 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMeanDataRate =
7484 pAggrAddTsReqParams->tspec[i].meanDataRate;
7485 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uPeakDataRate =
7486 pAggrAddTsReqParams->tspec[i].peakDataRate;
7487 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMaxBurstSz =
7488 pAggrAddTsReqParams->tspec[i].maxBurstSz;
7489 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uDelayBound =
7490 pAggrAddTsReqParams->tspec[i].delayBound;
7491 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].uMinPhyRate =
7492 pAggrAddTsReqParams->tspec[i].minPhyRate;
7493 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usSurplusBw =
7494 pAggrAddTsReqParams->tspec[i].surplusBw;
7495 wdiAggrAddTSReqParam->wdiAggrTsInfo.wdiTspecIE[i].usMediumTime =
7496 pAggrAddTsReqParams->tspec[i].mediumTime;
7497 }
7498
7499 /* TODO: tAggrAddTsParams doesn't have the following fields */
7500#if 0
7501 wdiAggrAddTSReqParam->wdiTsInfo.ucUapsdFlags =
7502 wdiAggrAddTSReqParam->wdiTsInfo.ucServiceInterval =
7503 wdiAggrAddTSReqParam->wdiTsInfo.ucSuspendInterval =
7504 wdiAggrAddTSReqParam->wdiTsInfo.ucDelayedInterval =
7505#endif
7506 wdiAggrAddTSReqParam->wdiReqStatusCB = NULL ;
7507
7508 /* Store ADD TS pointer, as this will be used for response */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007509 pWdaParams->wdaMsgParam = (void *)pAggrAddTsReqParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007510 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007511 pWdaParams->wdaWdiApiMsgParam = (void *)wdiAggrAddTSReqParam ;
7512
7513 pWdaParams->pWdaContext = pWDA;
7514
Jeff Johnson295189b2012-06-20 16:38:30 -07007515 status = WDI_AggrAddTSReq(wdiAggrAddTSReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007516 (WDI_AggrAddTsRspCb)WDA_AggrAddTSReqCallback, pWdaParams);
7517
Jeff Johnson295189b2012-06-20 16:38:30 -07007518 if(IS_WDI_STATUS_FAILURE(status))
7519 {
7520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7521 "Failure in ADD TS REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007522 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
7523 vos_mem_free(pWdaParams);
7524
7525 /* send the failure response back to PE*/
7526 for( i = 0; i < HAL_QOS_NUM_AC_MAX; i++ )
7527 {
7528 pAggrAddTsReqParams->status[i] = eHAL_STATUS_FAILURE ;
7529 }
7530
7531 WDA_SendMsg(pWdaParams->pWdaContext, WDA_AGGR_QOS_RSP,
7532 (void *)pAggrAddTsReqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007533 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007534 return CONVERT_WDI2VOS_STATUS(status) ;
7535}
7536#endif
Jeff Johnson295189b2012-06-20 16:38:30 -07007537/*
Mihir Shetea4306052014-03-25 00:02:54 +05307538 * FUNCTION: WDA_EnterImpsRspCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007539 * send Enter IMPS RSP back to PE
7540 */
Mihir Shetea4306052014-03-25 00:02:54 +05307541void WDA_EnterImpsRspCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007542{
Mihir Shetea4306052014-03-25 00:02:54 +05307543 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7544 tWDA_CbContext *pWDA;
7545
Jeff Johnson295189b2012-06-20 16:38:30 -07007546 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Mihir Shetea4306052014-03-25 00:02:54 +05307547 "<------ %s status=%d" ,__func__,status);
7548 if(NULL == pWdaParams)
7549 {
7550 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7551 "%s: pWdaParams received NULL", __func__);
7552 VOS_ASSERT(0);
7553 return;
7554 }
7555
7556 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7557
7558 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7559 vos_mem_free(pWdaParams);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007560 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007561 return ;
7562}
Mihir Shetea4306052014-03-25 00:02:54 +05307563
7564
7565/*
7566 * FUNCTION: WDA_EnterImpsReqCallback
7567 * Free memory and send Enter IMPS RSP back to PE.
7568 * Invoked when Enter IMPS REQ failed in WDI and no RSP callback is generated.
7569 */
7570void WDA_EnterImpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7571{
7572 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7573 tWDA_CbContext *pWDA;
7574
7575 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7576 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7577
7578 if(NULL == pWdaParams)
7579 {
7580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7581 "%s: pWdaParams received NULL", __func__);
7582 VOS_ASSERT(0);
7583 return;
7584 }
7585
7586 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7587
7588 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7589 {
7590 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7591 vos_mem_free(pWdaParams);
7592 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7593 CONVERT_WDI2SIR_STATUS(wdiStatus));
7594 }
7595
7596 return;
7597}
Jeff Johnson295189b2012-06-20 16:38:30 -07007598/*
7599 * FUNCTION: WDA_ProcessEnterImpsReq
7600 * Request to WDI to Enter IMPS power state.
7601 */
7602VOS_STATUS WDA_ProcessEnterImpsReq(tWDA_CbContext *pWDA)
7603{
7604 WDI_Status status = WDI_STATUS_SUCCESS ;
Mihir Shetea4306052014-03-25 00:02:54 +05307605 WDI_EnterImpsReqParamsType *wdiEnterImpsReqParams;
7606 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007607 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007608 "------> %s " ,__func__);
Mihir Shetea4306052014-03-25 00:02:54 +05307609
7610
7611 wdiEnterImpsReqParams = vos_mem_malloc(sizeof(WDI_EnterImpsReqParamsType));
7612 if (NULL == wdiEnterImpsReqParams)
7613 {
7614 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7615 "%s: VOS MEM Alloc Failure", __func__);
7616 VOS_ASSERT(0);
7617 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL,
7618 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7619 return VOS_STATUS_E_NOMEM;
7620 }
7621
7622 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7623 if (NULL == pWdaParams)
7624 {
7625 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7626 "%s: VOS MEM Alloc Failure", __func__);
7627 VOS_ASSERT(0);
7628 vos_mem_free(wdiEnterImpsReqParams);
7629 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL ,
7630 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
7631 return VOS_STATUS_E_NOMEM;
7632 }
7633
7634 wdiEnterImpsReqParams->wdiReqStatusCB = WDA_EnterImpsReqCallback;
7635 wdiEnterImpsReqParams->pUserData = pWdaParams;
7636
7637 pWdaParams->wdaWdiApiMsgParam = wdiEnterImpsReqParams;
7638 pWdaParams->wdaMsgParam = NULL;
7639 pWdaParams->pWdaContext = pWDA;
7640
7641 status = WDI_EnterImpsReq(wdiEnterImpsReqParams,
7642 (WDI_EnterImpsRspCb)WDA_EnterImpsRspCallback,
7643 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007644 if(IS_WDI_STATUS_FAILURE(status))
7645 {
7646 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7647 "Failure in Enter IMPS REQ WDI API, free all the memory " );
Mihir Shetea4306052014-03-25 00:02:54 +05307648 vos_mem_free(wdiEnterImpsReqParams);
7649 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007650 WDA_SendMsg(pWDA, WDA_ENTER_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007651 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007652 return CONVERT_WDI2VOS_STATUS(status) ;
7653}
Jeff Johnson295189b2012-06-20 16:38:30 -07007654/*
7655 * FUNCTION: WDA_ExitImpsReqCallback
7656 * send Exit IMPS RSP back to PE
7657 */
7658void WDA_ExitImpsReqCallback(WDI_Status status, void* pUserData)
7659{
7660 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007662 "<------ %s " ,__func__);
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007663 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , (status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007664 return ;
7665}
Jeff Johnson295189b2012-06-20 16:38:30 -07007666/*
7667 * FUNCTION: WDA_ProcessExitImpsReq
7668 * Request to WDI to Exit IMPS power state.
7669 */
7670VOS_STATUS WDA_ProcessExitImpsReq(tWDA_CbContext *pWDA)
7671{
7672 WDI_Status status = WDI_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007673 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007674 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007675 status = WDI_ExitImpsReq((WDI_ExitImpsRspCb)WDA_ExitImpsReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -07007676 if(IS_WDI_STATUS_FAILURE(status))
7677 {
7678 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7679 "Failure in Exit IMPS REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007680 WDA_SendMsg(pWDA, WDA_EXIT_IMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007681 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007682 return CONVERT_WDI2VOS_STATUS(status) ;
7683}
Jeff Johnson295189b2012-06-20 16:38:30 -07007684/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007685 * FUNCTION: WDA_EnterBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007686 * send Enter BMPS RSP back to PE
7687 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007688void WDA_EnterBmpsRespCallback(WDI_EnterBmpsRspParamsType *pwdiEnterBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007689{
7690 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7691 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007692 tEnterBmpsParams *pEnterBmpsRspParams;
7693
Jeff Johnson295189b2012-06-20 16:38:30 -07007694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007695 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007696 if(NULL == pWdaParams)
7697 {
7698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007699 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007700 VOS_ASSERT(0) ;
7701 return ;
7702 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007703
7704 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7705 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7706
7707 pEnterBmpsRspParams->bssIdx = pwdiEnterBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007708 pEnterBmpsRspParams->status = (pwdiEnterBmpsRsp->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007709
7710 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007711 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007712 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams , 0);
7713
Jeff Johnson295189b2012-06-20 16:38:30 -07007714 return ;
7715}
Jeff Johnson295189b2012-06-20 16:38:30 -07007716/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007717 * FUNCTION: WDA_EnterBmpsReqCallback
7718 * Free memory and send Enter BMPS RSP back to PE.
7719 * Invoked when Enter BMPS REQ failed in WDI and no RSP callback is generated.
7720 */
7721void WDA_EnterBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7722{
7723 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7724 tWDA_CbContext *pWDA;
7725 tEnterBmpsParams *pEnterBmpsRspParams;
7726
7727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7728 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7729
7730 if(NULL == pWdaParams)
7731 {
7732 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7733 "%s: pWdaParams received NULL", __func__);
7734 VOS_ASSERT(0);
7735 return;
7736 }
7737
7738 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7739 pEnterBmpsRspParams = (tEnterBmpsParams *)pWdaParams->wdaMsgParam;
7740 pEnterBmpsRspParams->status = wdiStatus;
7741
7742 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7743 {
7744 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7745 vos_mem_free(pWdaParams);
7746 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, (void *)pEnterBmpsRspParams, 0);
7747 }
7748
7749 return;
7750}
7751/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007752 * FUNCTION: WDA_ProcessEnterBmpsReq
7753 * Request to WDI to Enter BMPS power state.
7754 */
7755VOS_STATUS WDA_ProcessEnterBmpsReq(tWDA_CbContext *pWDA,
7756 tEnterBmpsParams *pEnterBmpsReqParams)
7757{
7758 WDI_Status status = WDI_STATUS_SUCCESS;
7759 WDI_EnterBmpsReqParamsType *wdiEnterBmpsReqParams;
7760 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007761 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007762 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007763 if ((NULL == pWDA) || (NULL == pEnterBmpsReqParams))
7764 {
7765 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007766 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007767 VOS_ASSERT(0);
7768 return VOS_STATUS_E_FAILURE;
7769 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007770 wdiEnterBmpsReqParams = vos_mem_malloc(sizeof(WDI_EnterBmpsReqParamsType));
7771 if (NULL == wdiEnterBmpsReqParams)
7772 {
7773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007774 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007775 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007776 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7777 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007778 return VOS_STATUS_E_NOMEM;
7779 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007780 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
7781 if (NULL == pWdaParams)
7782 {
7783 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007784 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007785 VOS_ASSERT(0);
7786 vos_mem_free(wdiEnterBmpsReqParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007787 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL ,
7788 CONVERT_WDI2SIR_STATUS(WDI_STATUS_MEM_FAILURE)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007789 return VOS_STATUS_E_NOMEM;
7790 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007791 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucBssIdx = pEnterBmpsReqParams->bssIdx;
7792 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimCount = pEnterBmpsReqParams->dtimCount;
7793 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.ucDtimPeriod = pEnterBmpsReqParams->dtimPeriod;
7794 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.uTbtt = pEnterBmpsReqParams->tbtt;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -08007795 // For ESE and 11R Roaming
Jeff Johnson295189b2012-06-20 16:38:30 -07007796 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.rssiFilterPeriod = (wpt_uint32)pEnterBmpsReqParams->rssiFilterPeriod;
7797 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.numBeaconPerRssiAverage = (wpt_uint32)pEnterBmpsReqParams->numBeaconPerRssiAverage;
7798 wdiEnterBmpsReqParams->wdiEnterBmpsInfo.bRssiFilterEnable = (wpt_uint8)pEnterBmpsReqParams->bRssiFilterEnable;
Yue Ma7f44bbe2013-04-12 11:47:39 -07007799 wdiEnterBmpsReqParams->wdiReqStatusCB = WDA_EnterBmpsReqCallback;
7800 wdiEnterBmpsReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007801
Jeff Johnson295189b2012-06-20 16:38:30 -07007802 /* Store param pointer as passed in by caller */
7803 /* store Params pass it to WDI */
7804 pWdaParams->wdaWdiApiMsgParam = wdiEnterBmpsReqParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007805 pWdaParams->wdaMsgParam = pEnterBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007806 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07007807 status = WDI_EnterBmpsReq(wdiEnterBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007808 (WDI_EnterBmpsRspCb)WDA_EnterBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007809 if (IS_WDI_STATUS_FAILURE(status))
7810 {
7811 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7812 "Failure in Enter BMPS REQ WDI API, free all the memory" );
7813 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07007814 vos_mem_free(pWdaParams->wdaMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07007815 vos_mem_free(pWdaParams);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007816 WDA_SendMsg(pWDA, WDA_ENTER_BMPS_RSP, NULL , CONVERT_WDI2SIR_STATUS(status)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007817 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007818 return CONVERT_WDI2VOS_STATUS(status);
7819}
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007820
7821
7822static void WDA_SendExitBmpsRsp(tWDA_CbContext *pWDA,
7823 WDI_Status wdiStatus,
7824 tExitBmpsParams *pExitBmpsReqParams)
7825{
7826 pExitBmpsReqParams->status = CONVERT_WDI2SIR_STATUS(wdiStatus) ;
7827
7828 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsReqParams , 0) ;
7829}
7830
7831
Jeff Johnson295189b2012-06-20 16:38:30 -07007832/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007833 * FUNCTION: WDA_ExitBmpsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007834 * send Exit BMPS RSP back to PE
7835 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007836void WDA_ExitBmpsRespCallback(WDI_ExitBmpsRspParamsType *pwdiExitBmpsRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007837{
7838 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7839 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007840 tExitBmpsParams *pExitBmpsRspParams;
7841
Jeff Johnson295189b2012-06-20 16:38:30 -07007842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007843 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007844 if(NULL == pWdaParams)
7845 {
7846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007847 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007848 VOS_ASSERT(0) ;
7849 return ;
7850 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007851
7852 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7853 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7854
7855 pExitBmpsRspParams->bssIdx = pwdiExitBmpsRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007856 pExitBmpsRspParams->status = (pwdiExitBmpsRsp->wdiStatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07007857
Jeff Johnson295189b2012-06-20 16:38:30 -07007858 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7859 vos_mem_free(pWdaParams) ;
7860
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007861 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007862 return ;
7863}
Jeff Johnson295189b2012-06-20 16:38:30 -07007864/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007865 * FUNCTION: WDA_ExitBmpsReqCallback
7866 * Free memory and send Exit BMPS RSP back to PE.
7867 * Invoked when Exit BMPS REQ failed in WDI and no RSP callback is generated.
7868 */
7869void WDA_ExitBmpsReqCallback(WDI_Status wdiStatus, void* pUserData)
7870{
7871 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7872 tWDA_CbContext *pWDA;
7873 tExitBmpsParams *pExitBmpsRspParams;
7874
7875 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7876 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7877
7878 if(NULL == pWdaParams)
7879 {
7880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7881 "%s: pWdaParams received NULL", __func__);
7882 VOS_ASSERT(0);
7883 return;
7884 }
7885
7886 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7887 pExitBmpsRspParams = (tExitBmpsParams *)pWdaParams->wdaMsgParam;
7888 pExitBmpsRspParams->status = wdiStatus;
7889
7890 if(IS_WDI_STATUS_FAILURE(wdiStatus))
7891 {
7892 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7893 vos_mem_free(pWdaParams);
7894 WDA_SendMsg(pWDA, WDA_EXIT_BMPS_RSP, (void *)pExitBmpsRspParams, 0);
7895 }
7896
7897 return;
7898}
7899/*
Jeff Johnson295189b2012-06-20 16:38:30 -07007900 * FUNCTION: WDA_ProcessExitBmpsReq
7901 * Request to WDI to Exit BMPS power state.
7902 */
7903VOS_STATUS WDA_ProcessExitBmpsReq(tWDA_CbContext *pWDA,
7904 tExitBmpsParams *pExitBmpsReqParams)
7905{
7906 WDI_Status status = WDI_STATUS_SUCCESS ;
7907 WDI_ExitBmpsReqParamsType *wdiExitBmpsReqParams =
7908 (WDI_ExitBmpsReqParamsType *)vos_mem_malloc(
7909 sizeof(WDI_ExitBmpsReqParamsType)) ;
7910 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007912 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007913 if(NULL == wdiExitBmpsReqParams)
7914 {
7915 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007916 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007917 VOS_ASSERT(0);
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007918 WDA_SendExitBmpsRsp(pWDA, WDI_STATUS_MEM_FAILURE, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007919 return VOS_STATUS_E_NOMEM;
7920 }
7921 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
7922 if(NULL == pWdaParams)
7923 {
7924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007925 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007926 VOS_ASSERT(0);
7927 vos_mem_free(wdiExitBmpsReqParams);
7928 return VOS_STATUS_E_NOMEM;
7929 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007930 wdiExitBmpsReqParams->wdiExitBmpsInfo.ucSendDataNull = pExitBmpsReqParams->sendDataNull;
Jeff Johnsone7245742012-09-05 17:12:55 -07007931
7932 wdiExitBmpsReqParams->wdiExitBmpsInfo.bssIdx = pExitBmpsReqParams->bssIdx;
7933
Yue Ma7f44bbe2013-04-12 11:47:39 -07007934 wdiExitBmpsReqParams->wdiReqStatusCB = WDA_ExitBmpsReqCallback;
7935 wdiExitBmpsReqParams->pUserData = pWdaParams;
7936
Jeff Johnson295189b2012-06-20 16:38:30 -07007937 /* Store param pointer as passed in by caller */
7938 /* store Params pass it to WDI */
7939 pWdaParams->wdaWdiApiMsgParam = wdiExitBmpsReqParams;
7940 pWdaParams->pWdaContext = pWDA;
7941 pWdaParams->wdaMsgParam = pExitBmpsReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007942 status = WDI_ExitBmpsReq(wdiExitBmpsReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07007943 (WDI_ExitBmpsRspCb)WDA_ExitBmpsRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007944 if(IS_WDI_STATUS_FAILURE(status))
7945 {
7946 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
7947 "Failure in Exit BMPS REQ WDI API, free all the memory " );
Jeff Johnson295189b2012-06-20 16:38:30 -07007948 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7949 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -07007950 WDA_SendExitBmpsRsp(pWDA, status, pExitBmpsReqParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07007951 }
Jeff Johnson295189b2012-06-20 16:38:30 -07007952 return CONVERT_WDI2VOS_STATUS(status) ;
7953}
Jeff Johnson295189b2012-06-20 16:38:30 -07007954/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007955 * FUNCTION: WDA_EnterUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07007956 * send Enter UAPSD RSP back to PE
7957 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07007958void WDA_EnterUapsdRespCallback( WDI_EnterUapsdRspParamsType *pwdiEnterUapsdRspParams, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07007959{
7960 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7961 tWDA_CbContext *pWDA;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007962 tUapsdParams *pEnterUapsdRsqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07007963 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007964 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007965 if(NULL == pWdaParams)
7966 {
7967 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07007968 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07007969 VOS_ASSERT(0) ;
7970 return ;
7971 }
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007972
7973 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
7974 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
7975
7976 pEnterUapsdRsqParams->bssIdx = pwdiEnterUapsdRspParams->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07007977 pEnterUapsdRsqParams->status = (pwdiEnterUapsdRspParams->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007978
Jeff Johnson295189b2012-06-20 16:38:30 -07007979 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
7980 vos_mem_free(pWdaParams) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07007981 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07007982 return ;
7983}
Jeff Johnson295189b2012-06-20 16:38:30 -07007984/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07007985 * FUNCTION: WDA_EnterUapsdReqCallback
7986 * Free memory and send Enter UAPSD RSP back to PE.
7987 * Invoked when Enter UAPSD REQ failed in WDI and no RSP callback is generated.
7988 */
7989void WDA_EnterUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
7990{
7991 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
7992 tWDA_CbContext *pWDA;
7993 tUapsdParams *pEnterUapsdRsqParams;
7994
7995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
7996 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
7997
7998 if(NULL == pWdaParams)
7999 {
8000 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8001 "%s: pWdaParams received NULL", __func__);
8002 VOS_ASSERT(0);
8003 return;
8004 }
8005
8006 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8007 pEnterUapsdRsqParams = (tUapsdParams *)pWdaParams->wdaMsgParam;
8008 pEnterUapsdRsqParams->status = wdiStatus;
8009
8010 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8011 {
8012 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8013 vos_mem_free(pWdaParams);
8014 WDA_SendMsg(pWDA, WDA_ENTER_UAPSD_RSP, (void *)pEnterUapsdRsqParams, 0);
8015 }
8016
8017 return;
8018}
8019/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008020 * FUNCTION: WDA_ProcessEnterUapsdReq
8021 * Request to WDI to Enter UAPSD power state.
8022 */
8023VOS_STATUS WDA_ProcessEnterUapsdReq(tWDA_CbContext *pWDA,
8024 tUapsdParams *pEnterUapsdReqParams)
8025{
8026 WDI_Status status = WDI_STATUS_SUCCESS ;
8027 WDI_EnterUapsdReqParamsType *wdiEnterUapsdReqParams =
8028 (WDI_EnterUapsdReqParamsType *)vos_mem_malloc(
8029 sizeof(WDI_EnterUapsdReqParamsType)) ;
8030 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008031 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008032 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008033 if(NULL == wdiEnterUapsdReqParams)
8034 {
8035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008036 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008037 VOS_ASSERT(0);
8038 return VOS_STATUS_E_NOMEM;
8039 }
8040 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8041 if(NULL == pWdaParams)
8042 {
8043 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008044 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008045 VOS_ASSERT(0);
8046 vos_mem_free(wdiEnterUapsdReqParams);
8047 return VOS_STATUS_E_NOMEM;
8048 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008049 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeDeliveryEnabled =
8050 pEnterUapsdReqParams->beDeliveryEnabled;
8051 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBeTriggerEnabled =
8052 pEnterUapsdReqParams->beTriggerEnabled;
8053 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkDeliveryEnabled =
8054 pEnterUapsdReqParams->bkDeliveryEnabled;
8055 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucBkTriggerEnabled =
8056 pEnterUapsdReqParams->bkTriggerEnabled;
8057 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViDeliveryEnabled =
8058 pEnterUapsdReqParams->viDeliveryEnabled;
8059 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucViTriggerEnabled =
8060 pEnterUapsdReqParams->viTriggerEnabled;
8061 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoDeliveryEnabled =
8062 pEnterUapsdReqParams->voDeliveryEnabled;
8063 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.ucVoTriggerEnabled =
8064 pEnterUapsdReqParams->voTriggerEnabled;
Jeff Johnsone7245742012-09-05 17:12:55 -07008065 wdiEnterUapsdReqParams->wdiEnterUapsdInfo.bssIdx = pEnterUapsdReqParams->bssIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07008066
Yue Ma7f44bbe2013-04-12 11:47:39 -07008067 wdiEnterUapsdReqParams->wdiReqStatusCB = WDA_EnterUapsdReqCallback;
8068 wdiEnterUapsdReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008069
Jeff Johnson295189b2012-06-20 16:38:30 -07008070 /* Store param pointer as passed in by caller */
8071 /* store Params pass it to WDI */
8072 pWdaParams->wdaWdiApiMsgParam = wdiEnterUapsdReqParams;
8073 pWdaParams->pWdaContext = pWDA;
8074 pWdaParams->wdaMsgParam = pEnterUapsdReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008075 status = WDI_EnterUapsdReq(wdiEnterUapsdReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008076 (WDI_EnterUapsdRspCb)WDA_EnterUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008077 if(IS_WDI_STATUS_FAILURE(status))
8078 {
8079 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8080 "Failure in Enter UAPSD REQ WDI API, free all the memory " );
8081 vos_mem_free(pWdaParams->wdaMsgParam) ;
8082 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8083 vos_mem_free(pWdaParams) ;
8084 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008085 return CONVERT_WDI2VOS_STATUS(status) ;
8086}
Jeff Johnson295189b2012-06-20 16:38:30 -07008087/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008088 * FUNCTION: WDA_ExitUapsdRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008089 * send Exit UAPSD RSP back to PE
8090 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008091void WDA_ExitUapsdRespCallback(WDI_ExitUapsdRspParamsType *pwdiExitRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008092{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008093
8094 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8095 tWDA_CbContext *pWDA;
8096 tExitUapsdParams *pExitUapsdRspParams;
8097
Jeff Johnson295189b2012-06-20 16:38:30 -07008098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008099 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008100 if(NULL == pWdaParams)
8101 {
8102 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008103 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008104 VOS_ASSERT(0);
8105 return;
8106 }
8107
8108 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8109 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8110
8111 pExitUapsdRspParams->bssIdx = pwdiExitRspParam->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07008112 pExitUapsdRspParams->status = (pwdiExitRspParam->wdiStatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008113
8114 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8115 vos_mem_free(pWdaParams) ;
8116
8117 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008118 return ;
8119}
Jeff Johnson295189b2012-06-20 16:38:30 -07008120/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008121 * FUNCTION: WDA_ExitUapsdReqCallback
8122 * Free memory and send Exit UAPSD RSP back to PE.
8123 * Invoked when Exit UAPSD REQ failed in WDI and no RSP callback is generated.
8124 */
8125void WDA_ExitUapsdReqCallback(WDI_Status wdiStatus, void* pUserData)
8126{
8127 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8128 tWDA_CbContext *pWDA;
8129 tExitUapsdParams *pExitUapsdRspParams;
8130
8131 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8132 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8133
8134 if(NULL == pWdaParams)
8135 {
8136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8137 "%s: pWdaParams received NULL", __func__);
8138 VOS_ASSERT(0);
8139 return;
8140 }
8141
8142 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
8143 pExitUapsdRspParams = (tExitUapsdParams *)pWdaParams->wdaMsgParam;
8144 pExitUapsdRspParams->status = wdiStatus;
8145
8146 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8147 {
8148 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8149 vos_mem_free(pWdaParams);
8150 WDA_SendMsg(pWDA, WDA_EXIT_UAPSD_RSP, (void *)pExitUapsdRspParams, 0);
8151 }
8152
8153 return;
8154}
8155/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008156 * FUNCTION: WDA_ProcessExitUapsdReq
8157 * Request to WDI to Exit UAPSD power state.
8158 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008159VOS_STATUS WDA_ProcessExitUapsdReq(tWDA_CbContext *pWDA,
8160 tExitUapsdParams *pExitUapsdParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008161{
8162 WDI_Status status = WDI_STATUS_SUCCESS ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008163 tWDA_ReqParams *pWdaParams ;
8164 WDI_ExitUapsdReqParamsType *wdiExitUapsdReqParams =
8165 (WDI_ExitUapsdReqParamsType *)vos_mem_malloc(
8166 sizeof(WDI_ExitUapsdReqParamsType)) ;
8167
Jeff Johnson295189b2012-06-20 16:38:30 -07008168 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008169 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008170
8171 if(NULL == wdiExitUapsdReqParams)
8172 {
8173 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008174 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008175 VOS_ASSERT(0);
8176 return VOS_STATUS_E_NOMEM;
8177 }
8178 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8179 if(NULL == pWdaParams)
8180 {
8181 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008182 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008183 VOS_ASSERT(0);
8184 vos_mem_free(wdiExitUapsdReqParams);
8185 return VOS_STATUS_E_NOMEM;
8186 }
8187
8188 wdiExitUapsdReqParams->wdiExitUapsdInfo.bssIdx = pExitUapsdParams->bssIdx;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008189 wdiExitUapsdReqParams->wdiReqStatusCB = WDA_ExitUapsdReqCallback;
8190 wdiExitUapsdReqParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008191
8192 /* Store param pointer as passed in by caller */
8193 /* store Params pass it to WDI */
8194 pWdaParams->wdaWdiApiMsgParam = wdiExitUapsdReqParams;
8195 pWdaParams->pWdaContext = pWDA;
8196 pWdaParams->wdaMsgParam = pExitUapsdParams;
8197
Yue Ma7f44bbe2013-04-12 11:47:39 -07008198 status = WDI_ExitUapsdReq(wdiExitUapsdReqParams, (WDI_ExitUapsdRspCb)WDA_ExitUapsdRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008199 if(IS_WDI_STATUS_FAILURE(status))
8200 {
8201 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8202 "Failure in Exit UAPSD REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07008203 vos_mem_free(pWdaParams->wdaMsgParam) ;
8204 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8205 vos_mem_free(pWdaParams) ;
8206
Jeff Johnson295189b2012-06-20 16:38:30 -07008207 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008208 return CONVERT_WDI2VOS_STATUS(status) ;
8209}
8210
Jeff Johnson295189b2012-06-20 16:38:30 -07008211/*
8212 * FUNCTION: WDA_SetPwrSaveCfgReqCallback
8213 *
8214 */
8215void WDA_SetPwrSaveCfgReqCallback(WDI_Status status, void* pUserData)
8216{
8217 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008218 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008219 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008220 if(NULL == pWdaParams)
8221 {
8222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008223 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008224 VOS_ASSERT(0) ;
8225 return ;
8226 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008227 if( pWdaParams != NULL )
8228 {
8229 if( pWdaParams->wdaWdiApiMsgParam != NULL )
8230 {
8231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8232 }
8233 if( pWdaParams->wdaMsgParam != NULL )
8234 {
8235 vos_mem_free(pWdaParams->wdaMsgParam) ;
8236 }
8237 vos_mem_free(pWdaParams) ;
8238 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008239 return ;
8240}
Jeff Johnson295189b2012-06-20 16:38:30 -07008241/*
8242 * FUNCTION: WDA_ProcessSetPwrSaveCfgReq
8243 * Request to WDI to set the power save params at start.
8244 */
8245VOS_STATUS WDA_ProcessSetPwrSaveCfgReq(tWDA_CbContext *pWDA,
8246 tSirPowerSaveCfg *pPowerSaveCfg)
8247{
8248 WDI_Status status = WDI_STATUS_SUCCESS ;
8249 tHalCfg *tlvStruct = NULL ;
8250 tANI_U8 *tlvStructStart = NULL ;
8251 v_PVOID_t *configParam;
8252 tANI_U32 configParamSize;
8253 tANI_U32 *configDataValue;
8254 WDI_UpdateCfgReqParamsType *wdiPowerSaveCfg;
8255 tWDA_ReqParams *pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008256 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008257 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008258 if ((NULL == pWDA) || (NULL == pPowerSaveCfg))
8259 {
8260 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008261 "%s: invalid param", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008262 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008263 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008264 return VOS_STATUS_E_FAILURE;
8265 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008266 wdiPowerSaveCfg = vos_mem_malloc(sizeof(WDI_UpdateCfgReqParamsType));
8267 if (NULL == wdiPowerSaveCfg)
8268 {
8269 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008270 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008271 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008272 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008273 return VOS_STATUS_E_NOMEM;
8274 }
8275 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8276 if(NULL == pWdaParams)
8277 {
8278 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008279 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008280 VOS_ASSERT(0);
8281 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008282 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008283 return VOS_STATUS_E_NOMEM;
8284 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008285 configParamSize = (sizeof(tHalCfg) + (sizeof(tANI_U32))) * WDA_NUM_PWR_SAVE_CFG;
8286 configParam = vos_mem_malloc(configParamSize);
Jeff Johnson295189b2012-06-20 16:38:30 -07008287 if(NULL == configParam)
8288 {
8289 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008290 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008291 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -07008292 vos_mem_free(pWdaParams);
8293 vos_mem_free(wdiPowerSaveCfg);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -07008294 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008295 return VOS_STATUS_E_NOMEM;
8296 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008297 vos_mem_set(configParam, configParamSize, 0);
8298 wdiPowerSaveCfg->pConfigBuffer = configParam;
8299 tlvStruct = (tHalCfg *)configParam;
8300 tlvStructStart = (tANI_U8 *)configParam;
Jeff Johnson295189b2012-06-20 16:38:30 -07008301 /* QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE */
8302 tlvStruct->type = QWLAN_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE;
8303 tlvStruct->length = sizeof(tANI_U32);
8304 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8305 *configDataValue = (tANI_U32)pPowerSaveCfg->broadcastFrameFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008306 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8307 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008308 /* QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD */
8309 tlvStruct->type = QWLAN_HAL_CFG_PS_HEART_BEAT_THRESHOLD;
8310 tlvStruct->length = sizeof(tANI_U32);
8311 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8312 *configDataValue = (tANI_U32)pPowerSaveCfg->HeartBeatCount;
Jeff Johnson295189b2012-06-20 16:38:30 -07008313 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8314 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008315 /* QWLAN_HAL_CFG_PS_IGNORE_DTIM */
8316 tlvStruct->type = QWLAN_HAL_CFG_PS_IGNORE_DTIM;
8317 tlvStruct->length = sizeof(tANI_U32);
8318 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8319 *configDataValue = (tANI_U32)pPowerSaveCfg->ignoreDtim;
Jeff Johnson295189b2012-06-20 16:38:30 -07008320 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8321 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008322 /* QWLAN_HAL_CFG_PS_LISTEN_INTERVAL */
8323 tlvStruct->type = QWLAN_HAL_CFG_PS_LISTEN_INTERVAL;
8324 tlvStruct->length = sizeof(tANI_U32);
8325 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8326 *configDataValue = (tANI_U32)pPowerSaveCfg->listenInterval;
Jeff Johnson295189b2012-06-20 16:38:30 -07008327 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8328 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008329 /* QWLAN_HAL_CFG_PS_MAX_PS_POLL */
8330 tlvStruct->type = QWLAN_HAL_CFG_PS_MAX_PS_POLL;
8331 tlvStruct->length = sizeof(tANI_U32);
8332 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8333 *configDataValue = (tANI_U32)pPowerSaveCfg->maxPsPoll;
Jeff Johnson295189b2012-06-20 16:38:30 -07008334 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8335 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008336 /* QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD */
8337 tlvStruct->type = QWLAN_HAL_CFG_PS_MIN_RSSI_THRESHOLD;
8338 tlvStruct->length = sizeof(tANI_U32);
8339 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8340 *configDataValue = (tANI_U32)pPowerSaveCfg->minRssiThreshold;
Jeff Johnson295189b2012-06-20 16:38:30 -07008341 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8342 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008343 /* QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER */
8344 tlvStruct->type = QWLAN_HAL_CFG_PS_NTH_BEACON_FILTER;
8345 tlvStruct->length = sizeof(tANI_U32);
8346 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8347 *configDataValue = (tANI_U32)pPowerSaveCfg->nthBeaconFilter;
Jeff Johnson295189b2012-06-20 16:38:30 -07008348 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8349 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008350 /* QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM */
8351 tlvStruct->type = QWLAN_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM;
8352 tlvStruct->length = sizeof(tANI_U32);
8353 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8354 *configDataValue = (tANI_U32)pPowerSaveCfg->fEnableBeaconEarlyTermination;
8355 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8356 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008357 /* QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL */
8358 tlvStruct->type = QWLAN_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL;
8359 tlvStruct->length = sizeof(tANI_U32);
8360 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8361 *configDataValue = (tANI_U32)pPowerSaveCfg->bcnEarlyTermWakeInterval;
8362 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8363 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008364 /* QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE */
8365 tlvStruct->type = QWLAN_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE;
8366 tlvStruct->length = sizeof(tANI_U32);
8367 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8368 *configDataValue = (tANI_U32)pPowerSaveCfg->numBeaconPerRssiAverage;
Jeff Johnson295189b2012-06-20 16:38:30 -07008369 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8370 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008371 /* QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD */
8372 tlvStruct->type = QWLAN_HAL_CFG_PS_RSSI_FILTER_PERIOD;
8373 tlvStruct->length = sizeof(tANI_U32);
8374 configDataValue = (tANI_U32 *)(tlvStruct + 1);
8375 *configDataValue = (tANI_U32)pPowerSaveCfg->rssiFilterPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -07008376 tlvStruct = (tHalCfg *)(( (tANI_U8 *) tlvStruct
8377 + sizeof(tHalCfg) + tlvStruct->length)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008378 wdiPowerSaveCfg->uConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008379 wdiPowerSaveCfg->wdiReqStatusCB = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -07008380 /* store Params pass it to WDI */
8381 pWdaParams->wdaMsgParam = configParam;
8382 pWdaParams->wdaWdiApiMsgParam = wdiPowerSaveCfg;
8383 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008384 status = WDI_SetPwrSaveCfgReq(wdiPowerSaveCfg,
8385 (WDI_SetPwrSaveCfgCb)WDA_SetPwrSaveCfgReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008386 if(IS_WDI_STATUS_FAILURE(status))
8387 {
8388 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8389 "Failure in Set Pwr Save CFG REQ WDI API, free all the memory " );
8390 vos_mem_free(pWdaParams->wdaMsgParam);
8391 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8392 vos_mem_free(pWdaParams);
8393 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008394 vos_mem_free(pPowerSaveCfg);
Jeff Johnson295189b2012-06-20 16:38:30 -07008395 return CONVERT_WDI2VOS_STATUS(status);
8396}
Jeff Johnson295189b2012-06-20 16:38:30 -07008397/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008398 * FUNCTION: WDA_SetUapsdAcParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008399 *
8400 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008401void WDA_SetUapsdAcParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008402{
Yue Ma7f44bbe2013-04-12 11:47:39 -07008403 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8404
Jeff Johnson295189b2012-06-20 16:38:30 -07008405 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008406 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -07008407
8408 if(NULL == pWdaParams)
8409 {
8410 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8411 "%s: pWdaParams received NULL", __func__);
8412 VOS_ASSERT(0);
8413 return ;
8414 }
8415
8416 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Jeff Johnson295189b2012-06-20 16:38:30 -07008417 vos_mem_free(pWdaParams);
8418
Jeff Johnson295189b2012-06-20 16:38:30 -07008419 return ;
8420}
Jeff Johnson295189b2012-06-20 16:38:30 -07008421/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008422 * FUNCTION: WDA_SetUapsdAcParamsReqCallback
8423 * Free memory.
8424 * Invoked when SetUAPSDACParams REQ failed in WDI and no RSP callback is generated.
8425 */
8426void WDA_SetUapsdAcParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8427{
8428 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8429
8430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8431 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8432
8433 if(NULL == pWdaParams)
8434 {
8435 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8436 "%s: pWdaParams received NULL", __func__);
8437 VOS_ASSERT(0);
8438 return;
8439 }
8440
8441 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8442 {
8443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8444 vos_mem_free(pWdaParams);
8445 }
8446
8447 return;
8448}
8449/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008450 * FUNCTION: WDA_SetUapsdAcParamsReq
8451 * Request to WDI to set the UAPSD params for an ac (sta mode).
8452 */
8453VOS_STATUS WDA_SetUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx,
8454 tUapsdInfo *pUapsdInfo)
8455{
8456 WDI_Status status = WDI_STATUS_SUCCESS;
8457 tWDA_CbContext *pWDA = NULL ;
8458 WDI_SetUapsdAcParamsReqParamsType *wdiUapsdParams =
8459 (WDI_SetUapsdAcParamsReqParamsType *)vos_mem_malloc(
8460 sizeof(WDI_SetUapsdAcParamsReqParamsType)) ;
8461 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008462 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008463 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008464 if(NULL == wdiUapsdParams)
8465 {
8466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008467 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008468 VOS_ASSERT(0);
8469 return VOS_STATUS_E_NOMEM;
8470 }
8471 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8472 if(NULL == pWdaParams)
8473 {
8474 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008475 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008476 VOS_ASSERT(0);
8477 vos_mem_free(wdiUapsdParams);
8478 return VOS_STATUS_E_NOMEM;
8479 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008480 wdiUapsdParams->wdiUapsdInfo.ucAc = pUapsdInfo->ac;
8481 wdiUapsdParams->wdiUapsdInfo.uDelayInterval = pUapsdInfo->delayInterval;
8482 wdiUapsdParams->wdiUapsdInfo.uSrvInterval = pUapsdInfo->srvInterval;
8483 wdiUapsdParams->wdiUapsdInfo.ucSTAIdx = pUapsdInfo->staidx;
8484 wdiUapsdParams->wdiUapsdInfo.uSusInterval = pUapsdInfo->susInterval;
8485 wdiUapsdParams->wdiUapsdInfo.ucUp = pUapsdInfo->up;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008486 wdiUapsdParams->wdiReqStatusCB = WDA_SetUapsdAcParamsReqCallback;
8487 wdiUapsdParams->pUserData = pWdaParams;
8488
Jeff Johnson295189b2012-06-20 16:38:30 -07008489 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
Jeff Johnson295189b2012-06-20 16:38:30 -07008490 pWdaParams->pWdaContext = pWDA;
8491 /* Store param pointer as passed in by caller */
8492 pWdaParams->wdaMsgParam = pUapsdInfo;
8493 /* store Params pass it to WDI */
8494 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUapsdParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008495 status = WDI_SetUapsdAcParamsReq(wdiUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008496 (WDI_SetUapsdAcParamsCb)WDA_SetUapsdAcParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008497 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008498 if(IS_WDI_STATUS_FAILURE(status))
8499 {
8500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8501 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
8502 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8503 vos_mem_free(pWdaParams);
8504 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008505 if((WDI_STATUS_SUCCESS == status) || (WDI_STATUS_PENDING == status))
8506 return VOS_STATUS_SUCCESS;
8507 else
8508 return VOS_STATUS_E_FAILURE;
8509
Jeff Johnson295189b2012-06-20 16:38:30 -07008510}
8511/*
8512 * FUNCTION: WDA_ClearUapsdAcParamsReq
8513 * Currently the WDA API is a NOP. It has been added for symmetry & Also it was
8514 * decided that the if the UPASD parameters change, FW would get a exit UAPSD
8515 * and again enter the UPASD with the modified params. Hence the disable
8516 * function was kept empty.
8517 *
8518 */
8519VOS_STATUS WDA_ClearUapsdAcParamsReq(v_PVOID_t pVosContext, v_U8_t staIdx, wpt_uint8 ac)
8520{
8521 /* do nothing */
8522 return VOS_STATUS_SUCCESS;
8523}
Jeff Johnson295189b2012-06-20 16:38:30 -07008524/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008525 * FUNCTION: WDA_UpdateUapsdParamsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008526 *
8527 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008528void WDA_UpdateUapsdParamsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008529{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008530 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
8531
Jeff Johnson295189b2012-06-20 16:38:30 -07008532 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008533 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008534
8535 if(NULL == pWdaParams)
8536 {
8537 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008538 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008539 VOS_ASSERT(0) ;
8540 return ;
8541 }
8542
8543 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8544 vos_mem_free(pWdaParams->wdaMsgParam);
8545 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008546
Jeff Johnson295189b2012-06-20 16:38:30 -07008547 //print a msg, nothing else to do
8548 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008549 "WDA_UpdateUapsdParamsRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07008550 return ;
8551}
Jeff Johnson295189b2012-06-20 16:38:30 -07008552/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008553 * FUNCTION: WDA_UpdateUapsdParamsReqCallback
8554 * Free memory.
8555 * Invoked when UpdateUAPSDParams REQ failed in WDI and no RSP callback is generated.
8556 */
8557void WDA_UpdateUapsdParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
8558{
8559 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8560
8561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8562 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8563
8564 if(NULL == pWdaParams)
8565 {
8566 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8567 "%s: pWdaParams received NULL", __func__);
8568 VOS_ASSERT(0);
8569 return;
8570 }
8571
8572 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8573 {
8574 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8575 vos_mem_free(pWdaParams->wdaMsgParam);
8576 vos_mem_free(pWdaParams);
8577 }
8578
8579 return;
8580}
8581/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008582 * FUNCTION: WDA_UpdateUapsdParamsReq
8583 * Request to WDI to update UAPSD params (in softAP mode) for a station.
8584 */
8585VOS_STATUS WDA_UpdateUapsdParamsReq(tWDA_CbContext *pWDA,
8586 tUpdateUapsdParams* pUpdateUapsdInfo)
8587{
8588 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008589 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07008590 WDI_UpdateUapsdReqParamsType *wdiUpdateUapsdParams =
8591 (WDI_UpdateUapsdReqParamsType *)vos_mem_malloc(
8592 sizeof(WDI_UpdateUapsdReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008593 tWDA_ReqParams *pWdaParams = NULL;
8594
Jeff Johnson295189b2012-06-20 16:38:30 -07008595 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008596 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008597 if(NULL == wdiUpdateUapsdParams)
8598 {
8599 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008600 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008601 VOS_ASSERT(0);
8602 return VOS_STATUS_E_NOMEM;
8603 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008604 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.uMaxSpLen = pUpdateUapsdInfo->maxSpLen;
8605 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucSTAIdx = pUpdateUapsdInfo->staIdx;
8606 wdiUpdateUapsdParams->wdiUpdateUapsdInfo.ucUapsdACMask = pUpdateUapsdInfo->uapsdACMask;
Yue Ma7f44bbe2013-04-12 11:47:39 -07008607 wdiUpdateUapsdParams->wdiReqStatusCB = WDA_UpdateUapsdParamsReqCallback;
8608 wdiUpdateUapsdParams->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008609
8610 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8611 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07008612 {
8613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008614 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008615 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008616 vos_mem_free(pUpdateUapsdInfo);
8617 vos_mem_free(wdiUpdateUapsdParams);
8618 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07008619 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008620 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008621 pWdaParams->wdaMsgParam = pUpdateUapsdInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07008622 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008623 pWdaParams->wdaWdiApiMsgParam = (void *)wdiUpdateUapsdParams;
8624 pWdaParams->pWdaContext = pWDA;
8625
Jeff Johnson43971f52012-07-17 12:26:56 -07008626 wstatus = WDI_UpdateUapsdParamsReq(wdiUpdateUapsdParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008627 (WDI_UpdateUapsdParamsCb)WDA_UpdateUapsdParamsRespCallback,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008628 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008629
Jeff Johnson43971f52012-07-17 12:26:56 -07008630 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008631 {
8632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8633 "Failure in Set UAPSD params REQ WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07008634 status = CONVERT_WDI2VOS_STATUS(wstatus) ;
8635 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8636 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07008637 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008638 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008639 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008640}
Jeff Johnson295189b2012-06-20 16:38:30 -07008641/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008642 * FUNCTION: WDA_ConfigureRxpFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008643 *
8644 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008645void WDA_ConfigureRxpFilterRespCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008646{
8647 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008649 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008650 if(WDI_STATUS_SUCCESS != wdiStatus)
8651 {
8652 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008653 "%s: RXP config filter failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008654 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008655 if(NULL == pWdaParams)
8656 {
8657 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008658 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008659 VOS_ASSERT(0) ;
8660 return ;
8661 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008662 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8663 vos_mem_free(pWdaParams->wdaMsgParam);
8664 vos_mem_free(pWdaParams);
8665 return ;
8666}
Jeff Johnson295189b2012-06-20 16:38:30 -07008667/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008668 * FUNCTION: WDA_ConfigureRxpFilterReqCallback
8669 * Free memory.
8670 * Invoked when ConfigureRXPFilter REQ failed in WDI and no RSP callback is generated.
8671 */
8672void WDA_ConfigureRxpFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8673{
8674 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8675
8676 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8677 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8678
8679 if(NULL == pWdaParams)
8680 {
8681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8682 "%s: pWdaParams received NULL", __func__);
8683 VOS_ASSERT(0);
8684 return;
8685 }
8686
8687 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8688 {
8689 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8690 vos_mem_free(pWdaParams->wdaMsgParam);
8691 vos_mem_free(pWdaParams);
8692 }
8693
8694 return;
8695}
8696/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008697 * FUNCTION: WDA_ProcessConfigureRxpFilterReq
8698 *
8699 */
8700VOS_STATUS WDA_ProcessConfigureRxpFilterReq(tWDA_CbContext *pWDA,
8701 tSirWlanSetRxpFilters *pWlanSuspendParam)
8702{
Jeff Johnson295189b2012-06-20 16:38:30 -07008703 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07008704 WDI_Status wstatus;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308705 WDI_ConfigureRxpFilterReqParamsType *wdiRxpFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008706 tWDA_ReqParams *pWdaParams ;
Siddharth Bhal1739c9c2014-04-17 20:40:55 +05308707 /* Sanity Check
8708 * This is very unlikely and add assert to collect more info next time */
8709 if(NULL == pWlanSuspendParam)
8710 {
8711 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8712 "%s: pWlanSuspendParam received NULL", __func__);
8713 VOS_ASSERT(0) ;
8714 return VOS_STATUS_E_FAULT;
8715 }
8716 wdiRxpFilterParams = (WDI_ConfigureRxpFilterReqParamsType *)vos_mem_malloc(
8717 sizeof(WDI_ConfigureRxpFilterReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008719 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008720 if(NULL == wdiRxpFilterParams)
8721 {
8722 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008723 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008724 VOS_ASSERT(0);
8725 vos_mem_free(pWlanSuspendParam);
8726 return VOS_STATUS_E_NOMEM;
8727 }
8728 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8729 if(NULL == pWdaParams)
8730 {
8731 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008732 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008733 VOS_ASSERT(0);
8734 vos_mem_free(wdiRxpFilterParams);
8735 vos_mem_free(pWlanSuspendParam);
8736 return VOS_STATUS_E_NOMEM;
8737 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008738 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilter =
8739 pWlanSuspendParam->setMcstBcstFilter;
8740 wdiRxpFilterParams->wdiRxpFilterParam.ucSetMcstBcstFilterSetting =
8741 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8742
Yue Ma7f44bbe2013-04-12 11:47:39 -07008743 wdiRxpFilterParams->wdiReqStatusCB = WDA_ConfigureRxpFilterReqCallback;
8744 wdiRxpFilterParams->pUserData = pWdaParams;
8745
Jeff Johnson295189b2012-06-20 16:38:30 -07008746 pWdaParams->pWdaContext = pWDA;
8747 pWdaParams->wdaMsgParam = pWlanSuspendParam;
8748 pWdaParams->wdaWdiApiMsgParam = (void *)wdiRxpFilterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07008749 wstatus = WDI_ConfigureRxpFilterReq(wdiRxpFilterParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -07008750 (WDI_ConfigureRxpFilterCb)WDA_ConfigureRxpFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -07008751 pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07008752 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07008753 {
8754 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8755 "Failure in configure RXP filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07008756 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07008757 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8758 vos_mem_free(pWdaParams->wdaMsgParam);
8759 vos_mem_free(pWdaParams);
8760 }
Jeff Johnson43971f52012-07-17 12:26:56 -07008761 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07008762}
Jeff Johnson295189b2012-06-20 16:38:30 -07008763/*
8764 * FUNCTION: WDA_WdiIndicationCallback
8765 *
8766 */
8767void WDA_WdiIndicationCallback( WDI_Status wdiStatus,
8768 void* pUserData)
8769{
8770 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008771 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008772}
Jeff Johnson295189b2012-06-20 16:38:30 -07008773/*
8774 * FUNCTION: WDA_ProcessWlanSuspendInd
8775 *
8776 */
8777VOS_STATUS WDA_ProcessWlanSuspendInd(tWDA_CbContext *pWDA,
8778 tSirWlanSuspendParam *pWlanSuspendParam)
8779{
8780 WDI_Status wdiStatus;
8781 WDI_SuspendParamsType wdiSuspendParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07008782 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008783 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008784 wdiSuspendParams.wdiSuspendParams.ucConfiguredMcstBcstFilterSetting =
8785 pWlanSuspendParam->configuredMcstBcstFilterSetting;
8786 wdiSuspendParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
8787 wdiSuspendParams.pUserData = pWDA;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008788 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanSuspendParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008789 wdiStatus = WDI_HostSuspendInd(&wdiSuspendParams);
8790 if(WDI_STATUS_PENDING == wdiStatus)
8791 {
8792 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008793 "Pending received for %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008794 }
8795 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8796 {
8797 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008798 "Failure in %s:%d ",__func__,__LINE__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008799 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008800 vos_mem_free(pWlanSuspendParam);
8801 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8802}
8803
Chet Lanctot186b5732013-03-18 10:26:30 -07008804#ifdef WLAN_FEATURE_11W
8805/*
8806 * FUNCTION: WDA_ProcessExcludeUnecryptInd
8807 *
8808 */
8809VOS_STATUS WDA_ProcessExcludeUnecryptInd(tWDA_CbContext *pWDA,
8810 tSirWlanExcludeUnencryptParam *pExclUnencryptParam)
8811{
8812 WDI_Status wdiStatus;
8813 WDI_ExcludeUnencryptIndType wdiExclUnencryptParams;
8814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8815 "------> %s ", __func__);
8816
8817 wdiExclUnencryptParams.bExcludeUnencrypt = pExclUnencryptParam->excludeUnencrypt;
8818 vos_mem_copy(wdiExclUnencryptParams.bssid, pExclUnencryptParam->bssId,
8819 sizeof(tSirMacAddr));
8820
8821 wdiExclUnencryptParams.wdiReqStatusCB = NULL;
8822 wdiExclUnencryptParams.pUserData = pWDA;
8823
8824 wdiStatus = WDI_ExcludeUnencryptedInd(&wdiExclUnencryptParams);
8825 if(WDI_STATUS_PENDING == wdiStatus)
8826 {
8827 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8828 "Pending received for %s:%d ", __func__, __LINE__ );
8829 }
8830 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
8831 {
8832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8833 "Failure in %s:%d ", __func__, __LINE__ );
8834 }
8835 vos_mem_free(pExclUnencryptParam);
8836 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8837}
8838#endif
8839
Jeff Johnson295189b2012-06-20 16:38:30 -07008840/*
8841 * FUNCTION: WDA_ProcessWlanResumeCallback
8842 *
8843 */
8844void WDA_ProcessWlanResumeCallback(
8845 WDI_SuspendResumeRspParamsType *resumeRspParams,
8846 void* pUserData)
8847{
8848 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008849 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008850 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008851 if(NULL == pWdaParams)
8852 {
8853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008854 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008855 VOS_ASSERT(0) ;
8856 return ;
8857 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008858 if(WDI_STATUS_SUCCESS != resumeRspParams->wdiStatus)
8859 {
8860 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -08008861 "%s: Process Wlan Resume failure", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -07008862 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008863 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8864 vos_mem_free(pWdaParams->wdaMsgParam);
8865 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008866 return ;
8867}
Jeff Johnson295189b2012-06-20 16:38:30 -07008868/*
8869 * FUNCTION: WDA_ProcessWlanResumeReq
8870 *
8871 */
8872VOS_STATUS WDA_ProcessWlanResumeReq(tWDA_CbContext *pWDA,
8873 tSirWlanResumeParam *pWlanResumeParam)
8874{
8875 WDI_Status wdiStatus;
8876 WDI_ResumeParamsType *wdiResumeParams =
8877 (WDI_ResumeParamsType *)vos_mem_malloc(
8878 sizeof(WDI_ResumeParamsType) ) ;
8879 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008880 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008881 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008882 if(NULL == wdiResumeParams)
8883 {
8884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008885 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008886 VOS_ASSERT(0);
8887 return VOS_STATUS_E_NOMEM;
8888 }
8889 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
8890 if(NULL == pWdaParams)
8891 {
8892 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008893 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008894 VOS_ASSERT(0);
8895 vos_mem_free(wdiResumeParams);
8896 return VOS_STATUS_E_NOMEM;
8897 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008898 wdiResumeParams->wdiResumeParams.ucConfiguredMcstBcstFilterSetting =
8899 pWlanResumeParam->configuredMcstBcstFilterSetting;
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008900 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s: %d" ,__func__, pWlanResumeParam->configuredMcstBcstFilterSetting);
Jeff Johnson295189b2012-06-20 16:38:30 -07008901 wdiResumeParams->wdiReqStatusCB = NULL;
8902 pWdaParams->wdaMsgParam = pWlanResumeParam;
8903 pWdaParams->wdaWdiApiMsgParam = wdiResumeParams;
8904 pWdaParams->pWdaContext = pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -07008905 wdiStatus = WDI_HostResumeReq(wdiResumeParams,
8906 (WDI_HostResumeEventRspCb)WDA_ProcessWlanResumeCallback,
8907 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07008908 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8909 {
8910 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8911 "Failure in Host Resume REQ WDI API, free all the memory " );
8912 VOS_ASSERT(0);
8913 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
8914 vos_mem_free(pWdaParams->wdaMsgParam);
8915 vos_mem_free(pWdaParams);
8916 }
Jeff Johnson295189b2012-06-20 16:38:30 -07008917 return CONVERT_WDI2VOS_STATUS(wdiStatus) ;
8918}
8919
Jeff Johnson295189b2012-06-20 16:38:30 -07008920/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008921 * FUNCTION: WDA_SetBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07008922 *
8923 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07008924void WDA_SetBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07008925{
8926 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07008927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008928 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008929 if(NULL == pWdaParams)
8930 {
8931 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008932 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008933 VOS_ASSERT(0) ;
8934 return ;
8935 }
8936
8937 vos_mem_free(pWdaParams->wdaMsgParam) ;
8938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8939 vos_mem_free(pWdaParams) ;
8940 /*
8941 * No respone required for SetBeaconFilter req so just free the request
8942 * param here
8943 */
8944
Jeff Johnson295189b2012-06-20 16:38:30 -07008945 return ;
8946}
Jeff Johnson295189b2012-06-20 16:38:30 -07008947/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07008948 * FUNCTION: WDA_SetBeaconFilterReqCallback
8949 * Free memory.
8950 * Invoked when SetBeaconFilter REQ failed in WDI and no RSP callback is generated.
8951 */
8952void WDA_SetBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
8953{
8954 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
8955
8956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
8957 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
8958
8959 if(NULL == pWdaParams)
8960 {
8961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
8962 "%s: pWdaParams received NULL", __func__);
8963 VOS_ASSERT(0);
8964 return;
8965 }
8966
8967 if(IS_WDI_STATUS_FAILURE(wdiStatus))
8968 {
8969 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
8970 vos_mem_free(pWdaParams->wdaMsgParam);
8971 vos_mem_free(pWdaParams);
8972 }
8973
8974 return;
8975}
8976/*
Jeff Johnson295189b2012-06-20 16:38:30 -07008977 * FUNCTION: WDA_SetBeaconFilterReq
8978 * Request to WDI to send the beacon filtering related information.
8979 */
8980VOS_STATUS WDA_SetBeaconFilterReq(tWDA_CbContext *pWDA,
8981 tBeaconFilterMsg* pBeaconFilterInfo)
8982{
8983 WDI_Status status = WDI_STATUS_SUCCESS;
8984 tANI_U8 *dstPtr, *srcPtr;
8985 tANI_U8 filterLength;
8986 WDI_BeaconFilterReqParamsType *wdiBeaconFilterInfo =
8987 (WDI_BeaconFilterReqParamsType *)vos_mem_malloc(
8988 sizeof(WDI_BeaconFilterReqParamsType) ) ;
8989 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07008990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008992 if(NULL == wdiBeaconFilterInfo)
8993 {
8994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07008995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07008996 VOS_ASSERT(0);
8997 return VOS_STATUS_E_NOMEM;
8998 }
8999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9000 if(NULL == pWdaParams)
9001 {
9002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009004 VOS_ASSERT(0);
9005 vos_mem_free(wdiBeaconFilterInfo);
9006 return VOS_STATUS_E_NOMEM;
9007 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009008 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usBeaconInterval =
9009 pBeaconFilterInfo->beaconInterval;
9010 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityInfo =
9011 pBeaconFilterInfo->capabilityInfo;
9012 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usCapabilityMask =
9013 pBeaconFilterInfo->capabilityMask;
9014 wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum = pBeaconFilterInfo->ieNum;
Madan Mohan Koyyalamudia84edda2012-10-15 14:58:25 -07009015
9016 //Fill the BssIdx
9017 wdiBeaconFilterInfo->wdiBeaconFilterInfo.bssIdx = pBeaconFilterInfo->bssIdx;
9018
Jeff Johnson295189b2012-06-20 16:38:30 -07009019 //Fill structure with info contained in the beaconFilterTable
9020 dstPtr = (tANI_U8 *)wdiBeaconFilterInfo + sizeof(WDI_BeaconFilterInfoType);
9021 srcPtr = (tANI_U8 *)pBeaconFilterInfo + sizeof(tBeaconFilterMsg);
9022 filterLength = wdiBeaconFilterInfo->wdiBeaconFilterInfo.usIeNum * sizeof(tBeaconFilterIe);
9023 if(WDI_BEACON_FILTER_LEN < filterLength)
9024 {
9025 filterLength = WDI_BEACON_FILTER_LEN;
9026 }
9027 vos_mem_copy(dstPtr, srcPtr, filterLength);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009028 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_SetBeaconFilterReqCallback;
9029 wdiBeaconFilterInfo->pUserData = pWdaParams;
9030
Jeff Johnson295189b2012-06-20 16:38:30 -07009031 /* Store param pointer as passed in by caller */
9032 /* store Params pass it to WDI */
9033 pWdaParams->wdaWdiApiMsgParam = wdiBeaconFilterInfo;
9034 pWdaParams->pWdaContext = pWDA;
9035 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
9036
Jeff Johnson295189b2012-06-20 16:38:30 -07009037 status = WDI_SetBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009038 (WDI_SetBeaconFilterCb)WDA_SetBeaconFilterRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009039 if(IS_WDI_STATUS_FAILURE(status))
9040 {
9041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9042 "Failure in Set Beacon Filter REQ WDI API, free all the memory " );
9043 vos_mem_free(pWdaParams->wdaMsgParam) ;
9044 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9045 vos_mem_free(pWdaParams) ;
9046 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009047 return CONVERT_WDI2VOS_STATUS(status) ;
9048}
Jeff Johnson295189b2012-06-20 16:38:30 -07009049/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009050 * FUNCTION: WDA_RemBeaconFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009051 *
9052 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009053void WDA_RemBeaconFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009054{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009055 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9056
Jeff Johnson295189b2012-06-20 16:38:30 -07009057 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009058 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009059
9060 if(NULL == pWdaParams)
9061 {
9062 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009063 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009064 VOS_ASSERT(0) ;
9065 return ;
9066 }
9067
9068 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9069 vos_mem_free(pWdaParams->wdaMsgParam);
9070 vos_mem_free(pWdaParams);
9071
Jeff Johnson295189b2012-06-20 16:38:30 -07009072 //print a msg, nothing else to do
9073 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009074 "WDA_RemBeaconFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009075 return ;
9076}
Yue Ma7f44bbe2013-04-12 11:47:39 -07009077/*
9078 * FUNCTION: WDA_RemBeaconFilterReqCallback
9079 * Free memory.
9080 * Invoked when RemBeaconFilter REQ failed in WDI and no RSP callback is generated.
9081 */
9082void WDA_RemBeaconFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
9083{
9084 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9085
9086 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9087 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9088
9089 if(NULL == pWdaParams)
9090 {
9091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9092 "%s: pWdaParams received NULL", __func__);
9093 VOS_ASSERT(0);
9094 return;
9095 }
9096
9097 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9098 {
9099 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9100 vos_mem_free(pWdaParams->wdaMsgParam);
9101 vos_mem_free(pWdaParams);
9102 }
9103
9104 return;
9105}
Jeff Johnson295189b2012-06-20 16:38:30 -07009106 // TODO: PE does not have this feature for now implemented,
9107 // but the support for removing beacon filter exists between
9108 // HAL and FW. This function can be called whenever PE defines
9109 // a new message for beacon filter removal
Jeff Johnson295189b2012-06-20 16:38:30 -07009110/*
9111 * FUNCTION: WDA_RemBeaconFilterReq
9112 * Request to WDI to send the removal of beacon filtering related information.
9113 */
9114VOS_STATUS WDA_RemBeaconFilterReq(tWDA_CbContext *pWDA,
9115 tRemBeaconFilterMsg* pBeaconFilterInfo)
9116{
9117 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009118 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009119 WDI_RemBeaconFilterReqParamsType *wdiBeaconFilterInfo =
9120 (WDI_RemBeaconFilterReqParamsType *)vos_mem_malloc(
9121 sizeof(WDI_RemBeaconFilterReqParamsType) + pBeaconFilterInfo->ucIeCount) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009122 tWDA_ReqParams *pWdaParams ;
9123
Jeff Johnson295189b2012-06-20 16:38:30 -07009124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009125 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009126 if(NULL == wdiBeaconFilterInfo)
9127 {
9128 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009129 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009130 VOS_ASSERT(0);
9131 return VOS_STATUS_E_NOMEM;
9132 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009133 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9134 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -07009135 {
9136 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009137 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009138 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009139 vos_mem_free(wdiBeaconFilterInfo);
9140 vos_mem_free(pBeaconFilterInfo);
9141 return VOS_STATUS_E_NOMEM;
Jeff Johnson295189b2012-06-20 16:38:30 -07009142 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009143
9144 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount =
9145 pBeaconFilterInfo->ucIeCount;
9146 //Fill structure with info contained in the ucRemIeId
9147 vos_mem_copy(wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucRemIeId,
9148 pBeaconFilterInfo->ucRemIeId,
9149 wdiBeaconFilterInfo->wdiBeaconFilterInfo.ucIeCount);
9150 wdiBeaconFilterInfo->wdiReqStatusCB = WDA_RemBeaconFilterReqCallback;
9151 wdiBeaconFilterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009152
9153 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009154 pWdaParams->wdaMsgParam = pBeaconFilterInfo;
Jeff Johnson295189b2012-06-20 16:38:30 -07009155 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009156 pWdaParams->wdaWdiApiMsgParam = (void *)wdiBeaconFilterInfo;
9157
9158 pWdaParams->pWdaContext = pWDA;
9159
Jeff Johnson43971f52012-07-17 12:26:56 -07009160 wstatus = WDI_RemBeaconFilterReq(wdiBeaconFilterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009161 (WDI_RemBeaconFilterCb)WDA_RemBeaconFilterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009162 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009163 {
9164 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9165 "Failure in Remove Beacon Filter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009166 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009167 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9168 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009169 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009170 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009171 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009172}
Jeff Johnson295189b2012-06-20 16:38:30 -07009173/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009174 * FUNCTION: WDA_SetRSSIThresholdsRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009175 *
9176 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009177void WDA_SetRSSIThresholdsRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009178{
9179 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009180 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009181 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009182 if(NULL == pWdaParams)
9183 {
9184 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009185 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009186 VOS_ASSERT(0) ;
9187 return ;
9188 }
9189
9190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9191 vos_mem_free(pWdaParams) ;
9192
Jeff Johnson295189b2012-06-20 16:38:30 -07009193 return ;
9194}
Jeff Johnson295189b2012-06-20 16:38:30 -07009195/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009196 * FUNCTION: WDA_SetRSSIThresholdsReqCallback
9197 * Free memory.
9198 * Invoked when SetRSSIThresholds REQ failed in WDI and no RSP callback is generated.
9199 */
9200void WDA_SetRSSIThresholdsReqCallback(WDI_Status wdiStatus, void* pUserData)
9201{
9202 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9203
9204 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9205 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9206
9207 if(NULL == pWdaParams)
9208 {
9209 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9210 "%s: pWdaParams received NULL", __func__);
9211 VOS_ASSERT(0);
9212 return;
9213 }
9214
9215 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9216 {
9217 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9218 vos_mem_free(pWdaParams);
9219 }
9220
9221 return;
9222}
9223/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009224 * FUNCTION: WDA_SetRSSIThresholdsReq
9225 * Request to WDI to set the RSSI thresholds (sta mode).
9226 */
9227VOS_STATUS WDA_SetRSSIThresholdsReq(tpAniSirGlobal pMac, tSirRSSIThresholds *pBmpsThresholds)
9228{
9229 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009230 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009231 tWDA_CbContext *pWDA = NULL ;
9232 v_PVOID_t pVosContext = NULL;
9233 WDI_SetRSSIThresholdsReqParamsType *wdiRSSIThresholdsInfo =
9234 (WDI_SetRSSIThresholdsReqParamsType *)vos_mem_malloc(
9235 sizeof(WDI_SetRSSIThresholdsReqParamsType)) ;
9236 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009237 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009238 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009239 if(NULL == wdiRSSIThresholdsInfo)
9240 {
9241 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009242 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009243 VOS_ASSERT(0);
9244 return VOS_STATUS_E_NOMEM;
9245 }
9246 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9247 if(NULL == pWdaParams)
9248 {
9249 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009250 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009251 VOS_ASSERT(0);
9252 vos_mem_free(wdiRSSIThresholdsInfo);
9253 return VOS_STATUS_E_NOMEM;
9254 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009255 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bReserved10 = pBmpsThresholds->bReserved10;
Jeff Johnson295189b2012-06-20 16:38:30 -07009256 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold1 = pBmpsThresholds->ucRssiThreshold1;
9257 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold2 = pBmpsThresholds->ucRssiThreshold2;
9258 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.ucRssiThreshold3 = pBmpsThresholds->ucRssiThreshold3;
Jeff Johnson295189b2012-06-20 16:38:30 -07009259 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1NegNotify = pBmpsThresholds->bRssiThres1NegNotify;
9260 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2NegNotify = pBmpsThresholds->bRssiThres2NegNotify;
9261 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3NegNotify = pBmpsThresholds->bRssiThres3NegNotify;
Jeff Johnson295189b2012-06-20 16:38:30 -07009262 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres1PosNotify = pBmpsThresholds->bRssiThres1PosNotify;
9263 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres2PosNotify = pBmpsThresholds->bRssiThres2PosNotify;
9264 wdiRSSIThresholdsInfo->wdiRSSIThresholdsInfo.bRssiThres3PosNotify = pBmpsThresholds->bRssiThres3PosNotify;
Yue Ma7f44bbe2013-04-12 11:47:39 -07009265 wdiRSSIThresholdsInfo->wdiReqStatusCB = WDA_SetRSSIThresholdsReqCallback;
9266 wdiRSSIThresholdsInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009267 pVosContext = vos_get_global_context(VOS_MODULE_ID_PE, (void *)pMac);
9268 pWDA = vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
9269
Jeff Johnson295189b2012-06-20 16:38:30 -07009270 /* Store param pointer as passed in by caller */
9271 /* store Params pass it to WDI */
9272 pWdaParams->wdaWdiApiMsgParam = wdiRSSIThresholdsInfo;
9273 pWdaParams->pWdaContext = pWDA;
9274 pWdaParams->wdaMsgParam = pBmpsThresholds;
Jeff Johnson43971f52012-07-17 12:26:56 -07009275 wstatus = WDI_SetRSSIThresholdsReq(wdiRSSIThresholdsInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009276 (WDI_SetRSSIThresholdsCb)WDA_SetRSSIThresholdsRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009277 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009278 {
9279 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9280 "Failure in Set RSSI thresholds REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009281 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009282 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9283 vos_mem_free(pWdaParams) ;
9284 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009285 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009286
9287}/*WDA_SetRSSIThresholdsReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009288/*
Yue Madb90ac12013-04-04 13:39:13 -07009289 * FUNCTION: WDA_HostOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009290 *
9291 */
Yue Madb90ac12013-04-04 13:39:13 -07009292void WDA_HostOffloadRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009293{
9294 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9295
9296 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009297 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009298 if(NULL == pWdaParams)
9299 {
9300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009301 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009302 VOS_ASSERT(0) ;
9303 return ;
9304 }
9305
9306 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9307 vos_mem_free(pWdaParams->wdaMsgParam);
9308 vos_mem_free(pWdaParams) ;
9309
9310 //print a msg, nothing else to do
9311 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Madb90ac12013-04-04 13:39:13 -07009312 "WDA_HostOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009313 return ;
9314}
Jeff Johnson295189b2012-06-20 16:38:30 -07009315/*
Yue Madb90ac12013-04-04 13:39:13 -07009316 * FUNCTION: WDA_HostOffloadReqCallback
Yue Ma7f44bbe2013-04-12 11:47:39 -07009317 * Free memory.
9318 * Invoked when HostOffload REQ failed in WDI and no RSP callback is generated.
Yue Madb90ac12013-04-04 13:39:13 -07009319 */
9320void WDA_HostOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
9321{
9322 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9323
9324 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9325 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9326
9327 if(NULL == pWdaParams)
9328 {
9329 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9330 "%s: Invalid pWdaParams pointer", __func__);
9331 VOS_ASSERT(0);
9332 return;
9333 }
9334
9335 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9336 {
9337 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9338 vos_mem_free(pWdaParams->wdaMsgParam);
9339 vos_mem_free(pWdaParams);
9340 }
9341
9342 return;
9343}
9344/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009345 * FUNCTION: WDA_ProcessHostOffloadReq
9346 * Request to WDI to set the filter to minimize unnecessary host wakeup due
9347 * to broadcast traffic (sta mode).
9348 */
9349VOS_STATUS WDA_ProcessHostOffloadReq(tWDA_CbContext *pWDA,
9350 tSirHostOffloadReq *pHostOffloadParams)
9351{
9352 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009353 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009354 WDI_HostOffloadReqParamsType *wdiHostOffloadInfo =
9355 (WDI_HostOffloadReqParamsType *)vos_mem_malloc(
9356 sizeof(WDI_HostOffloadReqParamsType)) ;
9357 tWDA_ReqParams *pWdaParams ;
9358
9359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009360 "------> %s: offloadType=%x" ,__func__, pHostOffloadParams->offloadType);
Jeff Johnson295189b2012-06-20 16:38:30 -07009361
9362 if(NULL == wdiHostOffloadInfo)
9363 {
9364 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009365 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009366 VOS_ASSERT(0);
9367 return VOS_STATUS_E_NOMEM;
9368 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009369 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9370 if(NULL == pWdaParams)
9371 {
9372 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009373 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009374 VOS_ASSERT(0);
9375 vos_mem_free(wdiHostOffloadInfo);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009376 vos_mem_free(pHostOffloadParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009377 return VOS_STATUS_E_NOMEM;
9378 }
9379
9380 wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType =
9381 pHostOffloadParams->offloadType;
9382 wdiHostOffloadInfo->wdiHostOffloadInfo.ucEnableOrDisable =
9383 pHostOffloadParams->enableOrDisable;
9384
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009385 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.bssId,
9386 pHostOffloadParams->bssId, sizeof(wpt_macAddr));
9387
Jeff Johnson295189b2012-06-20 16:38:30 -07009388 switch (wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType)
9389 {
9390 case SIR_IPV4_ARP_REPLY_OFFLOAD:
9391 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv4Addr,
9392 pHostOffloadParams->params.hostIpv4Addr,
9393 4);
9394 break;
9395 case SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD:
9396 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9397 pHostOffloadParams->params.hostIpv6Addr,
9398 16);
9399 break;
9400 case SIR_IPV6_NS_OFFLOAD:
9401 vos_mem_copy(wdiHostOffloadInfo->wdiHostOffloadInfo.params.aHostIpv6Addr,
9402 pHostOffloadParams->params.hostIpv6Addr,
9403 16);
9404
9405#ifdef WLAN_NS_OFFLOAD
9406 if(pHostOffloadParams->nsOffloadInfo.srcIPv6AddrValid)
9407 {
9408 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6Addr,
9409 pHostOffloadParams->nsOffloadInfo.srcIPv6Addr,
9410 16);
9411 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 1;
9412 }
9413 else
9414 {
9415 wdiHostOffloadInfo->wdiNsOffloadParams.srcIPv6AddrValid = 0;
9416 }
9417
9418 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfIPv6Addr,
9419 pHostOffloadParams->nsOffloadInfo.selfIPv6Addr,
9420 16);
9421 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.selfMacAddr,
9422 pHostOffloadParams->nsOffloadInfo.selfMacAddr,
9423 6);
9424
9425 //Only two are supported so let's go through them without a loop
9426 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[0])
9427 {
9428 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1,
9429 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[0],
9430 16);
9431 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 1;
9432 }
9433 else
9434 {
9435 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr1Valid = 0;
9436 }
9437
9438 if(pHostOffloadParams->nsOffloadInfo.targetIPv6AddrValid[1])
9439 {
9440 vos_mem_copy(wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2,
9441 pHostOffloadParams->nsOffloadInfo.targetIPv6Addr[1],
9442 16);
9443 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 1;
9444 }
9445 else
9446 {
9447 wdiHostOffloadInfo->wdiNsOffloadParams.targetIPv6Addr2Valid = 0;
9448 }
Gopichand Nakkala746a9452013-06-11 12:45:54 +05309449 wdiHostOffloadInfo->wdiNsOffloadParams.slotIdx =
9450 pHostOffloadParams->nsOffloadInfo.slotIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -07009451 break;
9452#endif //WLAN_NS_OFFLOAD
9453 default:
9454 {
9455 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9456 "No Handling for Offload Type %x in WDA "
9457 , wdiHostOffloadInfo->wdiHostOffloadInfo.ucOffloadType);
9458 //WDA_VOS_ASSERT(0) ;
9459 }
9460 }
Yue Madb90ac12013-04-04 13:39:13 -07009461 wdiHostOffloadInfo->wdiReqStatusCB = WDA_HostOffloadReqCallback;
9462 wdiHostOffloadInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009463
Jeff Johnson295189b2012-06-20 16:38:30 -07009464 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009465 pWdaParams->wdaMsgParam = pHostOffloadParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009466 /* store Params pass it to WDI */
9467 pWdaParams->wdaWdiApiMsgParam = wdiHostOffloadInfo;
9468 pWdaParams->pWdaContext = pWDA;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009469
Jeff Johnson295189b2012-06-20 16:38:30 -07009470
Jeff Johnson43971f52012-07-17 12:26:56 -07009471 wstatus = WDI_HostOffloadReq(wdiHostOffloadInfo,
Yue Madb90ac12013-04-04 13:39:13 -07009472 (WDI_HostOffloadCb)WDA_HostOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009473
Jeff Johnson43971f52012-07-17 12:26:56 -07009474 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009475 {
9476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9477 "Failure in host offload REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009478 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009479 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9480 vos_mem_free(pWdaParams->wdaMsgParam);
9481 vos_mem_free(pWdaParams) ;
9482 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009483 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009484
9485}/*WDA_HostOffloadReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009486/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009487 * FUNCTION: WDA_KeepAliveRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009488 *
9489 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009490void WDA_KeepAliveRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009491{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009492 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData ;
9493
Jeff Johnson295189b2012-06-20 16:38:30 -07009494 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009495 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009496
9497 if(NULL == pWdaParams)
9498 {
9499 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009500 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009501 VOS_ASSERT(0) ;
9502 return ;
9503 }
9504
9505 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9506 vos_mem_free(pWdaParams->wdaMsgParam);
9507 vos_mem_free(pWdaParams);
Yue Ma7f44bbe2013-04-12 11:47:39 -07009508
Jeff Johnson295189b2012-06-20 16:38:30 -07009509 //print a msg, nothing else to do
9510 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009511 "WDA_KeepAliveRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -07009512 return ;
9513}
Jeff Johnson295189b2012-06-20 16:38:30 -07009514/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009515 * FUNCTION: WDA_KeepAliveReqCallback
9516 * Free memory.
9517 * Invoked when KeepAlive REQ failed in WDI and no RSP callback is generated.
9518 */
9519void WDA_KeepAliveReqCallback(WDI_Status wdiStatus, void* pUserData)
9520{
9521 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9522
9523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9524 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9525
9526 if(NULL == pWdaParams)
9527 {
9528 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9529 "%s: pWdaParams received NULL", __func__);
9530 VOS_ASSERT(0);
9531 return;
9532 }
9533
9534 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9535 {
9536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9537 vos_mem_free(pWdaParams->wdaMsgParam);
9538 vos_mem_free(pWdaParams);
9539 }
9540
9541 return;
9542}
9543/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009544 * FUNCTION: WDA_ProcessKeepAliveReq
9545 * Request to WDI to send Keep Alive packets to minimize unnecessary host
9546 * wakeup due to broadcast traffic (sta mode).
9547 */
9548VOS_STATUS WDA_ProcessKeepAliveReq(tWDA_CbContext *pWDA,
9549 tSirKeepAliveReq *pKeepAliveParams)
9550{
9551 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009552 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009553 WDI_KeepAliveReqParamsType *wdiKeepAliveInfo =
9554 (WDI_KeepAliveReqParamsType *)vos_mem_malloc(
9555 sizeof(WDI_KeepAliveReqParamsType)) ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009556 tWDA_ReqParams *pWdaParams;
9557
Jeff Johnson295189b2012-06-20 16:38:30 -07009558 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009559 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009560 if(NULL == wdiKeepAliveInfo)
9561 {
9562 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009563 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009564 VOS_ASSERT(0);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009565 vos_mem_free(pKeepAliveParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009566 return VOS_STATUS_E_NOMEM;
9567 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009568
9569 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9570 if(NULL == pWdaParams)
9571 {
9572 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009573 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009574 VOS_ASSERT(0);
9575 vos_mem_free(wdiKeepAliveInfo);
9576 vos_mem_free(pKeepAliveParams);
9577 return VOS_STATUS_E_NOMEM;
9578 }
9579
Jeff Johnson295189b2012-06-20 16:38:30 -07009580 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType =
9581 pKeepAliveParams->packetType;
9582 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod =
9583 pKeepAliveParams->timePeriod;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009584
9585 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.bssId,
9586 pKeepAliveParams->bssId,
9587 sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -07009588
9589 if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP)
9590 {
9591 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9592 pKeepAliveParams->hostIpv4Addr,
9593 SIR_IPV4_ADDR_LEN);
9594 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9595 pKeepAliveParams->destIpv4Addr,
9596 SIR_IPV4_ADDR_LEN);
9597 vos_mem_copy(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9598 pKeepAliveParams->destMacAddr,
9599 SIR_MAC_ADDR_LEN);
9600 }
9601 else if(pKeepAliveParams->packetType == SIR_KEEP_ALIVE_NULL_PKT)
9602 {
9603 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr,
9604 SIR_IPV4_ADDR_LEN,
9605 0);
9606 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr,
9607 SIR_IPV4_ADDR_LEN,
9608 0);
9609 vos_mem_set(&wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr,
9610 SIR_MAC_ADDR_LEN,
9611 0);
9612 }
Yue Ma7f44bbe2013-04-12 11:47:39 -07009613 wdiKeepAliveInfo->wdiReqStatusCB = WDA_KeepAliveReqCallback;
9614 wdiKeepAliveInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009615
Jeff Johnson295189b2012-06-20 16:38:30 -07009616 /* Store param pointer as passed in by caller */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009617 pWdaParams->wdaMsgParam = pKeepAliveParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009618 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009619 pWdaParams->wdaWdiApiMsgParam = (void *)wdiKeepAliveInfo;
9620 pWdaParams->pWdaContext = pWDA;
9621
Jeff Johnson295189b2012-06-20 16:38:30 -07009622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA HIP : %d.%d.%d.%d",
9623 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[0],
9624 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[1],
9625 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[2],
9626 wdiKeepAliveInfo->wdiKeepAliveInfo.aHostIpv4Addr[3]);
9627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,"WDA DIP : %d.%d.%d.%d",
9628 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[0],
9629 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[1],
9630 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[2],
9631 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestIpv4Addr[3]);
9632 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9633 "WDA DMAC : %d:%d:%d:%d:%d:%d",
9634 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[0],
9635 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[1],
9636 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[2],
9637 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[3],
9638 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[4],
9639 wdiKeepAliveInfo->wdiKeepAliveInfo.aDestMacAddr[5]);
9640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9641 "TimePeriod %d PacketType %d",
9642 wdiKeepAliveInfo->wdiKeepAliveInfo.ucTimePeriod,
9643 wdiKeepAliveInfo->wdiKeepAliveInfo.ucPacketType);
Jeff Johnson43971f52012-07-17 12:26:56 -07009644 wstatus = WDI_KeepAliveReq(wdiKeepAliveInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009645 (WDI_KeepAliveCb)WDA_KeepAliveRespCallback, pWdaParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009646
Jeff Johnson43971f52012-07-17 12:26:56 -07009647 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009648 {
9649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9650 "Failure in Keep Alive REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009651 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -07009652 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
9653 vos_mem_free(pWdaParams->wdaMsgParam);
Madan Mohan Koyyalamudi683acf12012-10-30 18:10:18 -07009654 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -07009655 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009656 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009657
9658}/*WDA_KeepAliveReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009659/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009660 * FUNCTION: WDA_WowlAddBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009661 *
9662 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009663void WDA_WowlAddBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009664 WDI_WowlAddBcPtrnRspParamsType *pWdiWowlAddBcstPtrRsp,
9665 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009666{
9667 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009669 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009670 if(NULL == pWdaParams)
9671 {
9672 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009673 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009674 VOS_ASSERT(0) ;
9675 return ;
9676 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009677 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9678 vos_mem_free(pWdaParams->wdaMsgParam);
9679 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009680 return ;
9681}
Jeff Johnson295189b2012-06-20 16:38:30 -07009682/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009683 * FUNCTION: WDA_WowlAddBcPtrnReqCallback
9684 * Free memory.
9685 * Invoked when WOWLAddBCPTRN REQ failed in WDI and no RSP callback is generated.
9686 */
9687void WDA_WowlAddBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9688{
9689 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9690
9691 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9692 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9693
9694 if(NULL == pWdaParams)
9695 {
9696 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9697 "%s: pWdaParams received NULL", __func__);
9698 VOS_ASSERT(0);
9699 return;
9700 }
9701
9702 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9703 {
9704 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9705 vos_mem_free(pWdaParams->wdaMsgParam);
9706 vos_mem_free(pWdaParams);
9707 }
9708
9709 return;
9710}
9711
9712/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009713 * FUNCTION: WDA_ProcessWowlAddBcPtrnReq
9714 * Request to WDI to add WOWL Bcast pattern
9715 */
9716VOS_STATUS WDA_ProcessWowlAddBcPtrnReq(tWDA_CbContext *pWDA,
9717 tSirWowlAddBcastPtrn *pWowlAddBcPtrnParams)
9718{
9719 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009720 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009721 WDI_WowlAddBcPtrnReqParamsType *wdiWowlAddBcPtrnInfo =
9722 (WDI_WowlAddBcPtrnReqParamsType *)vos_mem_malloc(
9723 sizeof(WDI_WowlAddBcPtrnReqParamsType)) ;
9724 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009725 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009726 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009727 if(NULL == wdiWowlAddBcPtrnInfo)
9728 {
9729 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009730 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009731 VOS_ASSERT(0);
9732 return VOS_STATUS_E_NOMEM;
9733 }
9734 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9735 if(NULL == pWdaParams)
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);
9740 vos_mem_free(wdiWowlAddBcPtrnInfo);
9741 return VOS_STATUS_E_NOMEM;
9742 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009743 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternId =
9744 pWowlAddBcPtrnParams->ucPatternId;
9745 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternByteOffset =
9746 pWowlAddBcPtrnParams->ucPatternByteOffset;
9747 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize =
9748 pWowlAddBcPtrnParams->ucPatternMaskSize;
9749 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize =
9750 pWowlAddBcPtrnParams->ucPatternSize;
Jeff Johnson295189b2012-06-20 16:38:30 -07009751 if (wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize <= WDI_WOWL_BCAST_PATTERN_MAX_SIZE)
9752 {
9753 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9754 pWowlAddBcPtrnParams->ucPattern,
9755 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize);
9756 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9757 pWowlAddBcPtrnParams->ucPatternMask,
9758 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize);
9759 }
9760 else
9761 {
9762 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPattern,
9763 pWowlAddBcPtrnParams->ucPattern,
9764 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9765 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMask,
9766 pWowlAddBcPtrnParams->ucPatternMask,
9767 WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9768
9769 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternExt,
9770 pWowlAddBcPtrnParams->ucPatternExt,
9771 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9772 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskExt,
9773 pWowlAddBcPtrnParams->ucPatternMaskExt,
9774 wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.ucPatternMaskSize - WDI_WOWL_BCAST_PATTERN_MAX_SIZE);
9775 }
9776
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009777 vos_mem_copy(wdiWowlAddBcPtrnInfo->wdiWowlAddBcPtrnInfo.bssId,
9778 pWowlAddBcPtrnParams->bssId, sizeof(wpt_macAddr));
9779
Yue Ma7f44bbe2013-04-12 11:47:39 -07009780 wdiWowlAddBcPtrnInfo->wdiReqStatusCB = WDA_WowlAddBcPtrnReqCallback;
9781 wdiWowlAddBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009782 /* Store param pointer as passed in by caller */
9783 /* store Params pass it to WDI */
9784 pWdaParams->wdaWdiApiMsgParam = wdiWowlAddBcPtrnInfo;
9785 pWdaParams->pWdaContext = pWDA;
9786 pWdaParams->wdaMsgParam = pWowlAddBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009787 wstatus = WDI_WowlAddBcPtrnReq(wdiWowlAddBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009788 (WDI_WowlAddBcPtrnCb)WDA_WowlAddBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009789 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009790 {
9791 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9792 "Failure in Wowl add Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009793 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009794 vos_mem_free(pWdaParams->wdaMsgParam) ;
9795 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9796 vos_mem_free(pWdaParams) ;
9797 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009798 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009799
9800}/*WDA_ProcessWowlAddBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009801/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009802 * FUNCTION: WDA_WowlDelBcPtrnRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009803 *
9804 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009805void WDA_WowlDelBcPtrnRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009806 WDI_WowlDelBcPtrnRspParamsType *pWdiWowlDelBcstPtrRsp,
9807 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009808{
9809 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -07009810 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009811 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009812 if(NULL == pWdaParams)
9813 {
9814 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009815 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009816 VOS_ASSERT(0) ;
9817 return ;
9818 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009819 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9820 vos_mem_free(pWdaParams->wdaMsgParam);
9821 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009822 return ;
9823}
Jeff Johnson295189b2012-06-20 16:38:30 -07009824/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009825 * FUNCTION: WDA_WowlDelBcPtrnReqCallback
9826 * Free memory.
9827 * Invoked when WOWLDelBCPTRN REQ failed in WDI and no RSP callback is generated.
9828 */
9829void WDA_WowlDelBcPtrnReqCallback(WDI_Status wdiStatus, void* pUserData)
9830{
9831 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9832
9833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9834 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9835
9836 if(NULL == pWdaParams)
9837 {
9838 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9839 "%s: pWdaParams received NULL", __func__);
9840 VOS_ASSERT(0);
9841 return;
9842 }
9843
9844 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9845 {
9846 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9847 vos_mem_free(pWdaParams->wdaMsgParam);
9848 vos_mem_free(pWdaParams);
9849 }
9850
9851 return;
9852}
9853/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009854 * FUNCTION: WDA_ProcessWowlDelBcPtrnReq
9855 * Request to WDI to delete WOWL Bcast pattern
9856 */
9857VOS_STATUS WDA_ProcessWowlDelBcPtrnReq(tWDA_CbContext *pWDA,
9858 tSirWowlDelBcastPtrn *pWowlDelBcPtrnParams)
9859{
9860 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009861 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009862 WDI_WowlDelBcPtrnReqParamsType *wdiWowlDelBcPtrnInfo =
9863 (WDI_WowlDelBcPtrnReqParamsType *)vos_mem_malloc(
9864 sizeof(WDI_WowlDelBcPtrnReqParamsType)) ;
9865 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009866 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009867 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009868 if(NULL == wdiWowlDelBcPtrnInfo)
9869 {
9870 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009871 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009872 VOS_ASSERT(0);
9873 return VOS_STATUS_E_NOMEM;
9874 }
9875 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
9876 if(NULL == pWdaParams)
9877 {
9878 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009879 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009880 VOS_ASSERT(0);
9881 vos_mem_free(wdiWowlDelBcPtrnInfo);
9882 return VOS_STATUS_E_NOMEM;
9883 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009884 wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.ucPatternId =
9885 pWowlDelBcPtrnParams->ucPatternId;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009886
9887 vos_mem_copy(wdiWowlDelBcPtrnInfo->wdiWowlDelBcPtrnInfo.bssId,
9888 pWowlDelBcPtrnParams->bssId, sizeof(wpt_macAddr));
9889
Yue Ma7f44bbe2013-04-12 11:47:39 -07009890 wdiWowlDelBcPtrnInfo->wdiReqStatusCB = WDA_WowlDelBcPtrnReqCallback;
9891 wdiWowlDelBcPtrnInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009892 /* Store param pointer as passed in by caller */
9893 /* store Params pass it to WDI */
9894 pWdaParams->wdaWdiApiMsgParam = wdiWowlDelBcPtrnInfo;
9895 pWdaParams->pWdaContext = pWDA;
9896 pWdaParams->wdaMsgParam = pWowlDelBcPtrnParams;
Jeff Johnson43971f52012-07-17 12:26:56 -07009897 wstatus = WDI_WowlDelBcPtrnReq(wdiWowlDelBcPtrnInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -07009898 (WDI_WowlDelBcPtrnCb)WDA_WowlDelBcPtrnRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -07009899 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -07009900 {
9901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9902 "Failure in Wowl delete Bcast ptrn REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -07009903 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -07009904 vos_mem_free(pWdaParams->wdaMsgParam) ;
9905 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9906 vos_mem_free(pWdaParams) ;
9907 }
Jeff Johnson43971f52012-07-17 12:26:56 -07009908 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -07009909
9910}/*WDA_ProcessWowlDelBcPtrnReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -07009911/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009912 * FUNCTION: WDA_WowlEnterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -07009913 *
9914 */
Yue Ma7f44bbe2013-04-12 11:47:39 -07009915void WDA_WowlEnterRespCallback(WDI_WowlEnterRspParamsType *pwdiWowlEnterRspParam, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -07009916{
9917 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9918 tWDA_CbContext *pWDA;
9919 tSirHalWowlEnterParams *pWowlEnterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -07009920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009921 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009922 if(NULL == pWdaParams)
9923 {
9924 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009925 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009926 VOS_ASSERT(0) ;
9927 return ;
9928 }
Jeff Johnson295189b2012-06-20 16:38:30 -07009929 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
9930 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam ;
9931
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009932 pWowlEnterParams->bssIdx = pwdiWowlEnterRspParam->bssIdx;
9933
Jeff Johnson295189b2012-06-20 16:38:30 -07009934 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9935 vos_mem_free(pWdaParams) ;
9936
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -07009937 pWowlEnterParams->status =
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -07009938 (pwdiWowlEnterRspParam->status);
Jeff Johnson295189b2012-06-20 16:38:30 -07009939 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009940 return ;
9941}
Jeff Johnson295189b2012-06-20 16:38:30 -07009942/*
Yue Ma7f44bbe2013-04-12 11:47:39 -07009943 * FUNCTION: WDA_WowlEnterReqCallback
9944 * Free memory and send WOWL Enter RSP back to PE.
9945 * Invoked when WOWL Enter REQ failed in WDI and no RSP callback is generated.
9946 */
9947void WDA_WowlEnterReqCallback(WDI_Status wdiStatus, void* pUserData)
9948{
9949 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
9950 tWDA_CbContext *pWDA;
9951 tSirHalWowlEnterParams *pWowlEnterParams;
9952
9953 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
9954 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
9955
9956 if(NULL == pWdaParams)
9957 {
9958 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
9959 "%s: pWdaParams received NULL", __func__);
9960 VOS_ASSERT(0);
9961 return;
9962 }
9963
9964 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
9965 pWowlEnterParams = (tSirHalWowlEnterParams *)pWdaParams->wdaMsgParam;
9966 pWowlEnterParams->status = wdiStatus;
9967
9968 if(IS_WDI_STATUS_FAILURE(wdiStatus))
9969 {
9970 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
9971 vos_mem_free(pWdaParams);
9972 WDA_SendMsg(pWDA, WDA_WOWL_ENTER_RSP, (void *)pWowlEnterParams , 0);
9973 }
9974
9975 return;
9976}
9977/*
Jeff Johnson295189b2012-06-20 16:38:30 -07009978 * FUNCTION: WDA_ProcessWowlEnterReq
9979 * Request to WDI to enter WOWL
9980 */
9981VOS_STATUS WDA_ProcessWowlEnterReq(tWDA_CbContext *pWDA,
9982 tSirHalWowlEnterParams *pWowlEnterParams)
9983{
9984 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -07009985 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -07009986 WDI_WowlEnterReqParamsType *wdiWowlEnterInfo =
9987 (WDI_WowlEnterReqParamsType *)vos_mem_malloc(
9988 sizeof(WDI_WowlEnterReqParamsType)) ;
9989 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -07009990 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009991 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009992 if(NULL == wdiWowlEnterInfo)
9993 {
9994 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -07009995 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -07009996 VOS_ASSERT(0);
9997 return VOS_STATUS_E_NOMEM;
9998 }
9999 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10000 if(NULL == pWdaParams)
10001 {
10002 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010003 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010004 VOS_ASSERT(0);
10005 vos_mem_free(wdiWowlEnterInfo);
10006 return VOS_STATUS_E_NOMEM;
10007 }
Kumar Anandaca924e2013-07-22 14:35:34 -070010008
10009 vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
10010
Jeff Johnson295189b2012-06-20 16:38:30 -070010011 vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
10012 pWowlEnterParams->magicPtrn,
10013 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010014 wdiWowlEnterInfo->wdiWowlEnterInfo.ucMagicPktEnable =
10015 pWowlEnterParams->ucMagicPktEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010016 wdiWowlEnterInfo->wdiWowlEnterInfo.ucPatternFilteringEnable =
10017 pWowlEnterParams->ucPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010018 wdiWowlEnterInfo->wdiWowlEnterInfo.ucUcastPatternFilteringEnable =
10019 pWowlEnterParams->ucUcastPatternFilteringEnable;
Jeff Johnson295189b2012-06-20 16:38:30 -070010020 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowChnlSwitchRcv =
10021 pWowlEnterParams->ucWowChnlSwitchRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010022 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDeauthRcv =
10023 pWowlEnterParams->ucWowDeauthRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010024 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowDisassocRcv =
10025 pWowlEnterParams->ucWowDisassocRcv;
Jeff Johnson295189b2012-06-20 16:38:30 -070010026 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxMissedBeacons =
10027 pWowlEnterParams->ucWowMaxMissedBeacons;
Jeff Johnson295189b2012-06-20 16:38:30 -070010028 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowMaxSleepUsec =
10029 pWowlEnterParams->ucWowMaxSleepUsec;
Jeff Johnson295189b2012-06-20 16:38:30 -070010030#ifdef WLAN_WAKEUP_EVENTS
10031 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPIDRequestEnable =
10032 pWowlEnterParams->ucWoWEAPIDRequestEnable;
10033
10034 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWEAPOL4WayEnable =
10035 pWowlEnterParams->ucWoWEAPOL4WayEnable;
10036
10037 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowNetScanOffloadMatch =
10038 pWowlEnterParams->ucWowNetScanOffloadMatch;
10039
10040 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWowGTKRekeyError =
10041 pWowlEnterParams->ucWowGTKRekeyError;
10042
10043 wdiWowlEnterInfo->wdiWowlEnterInfo.ucWoWBSSConnLoss =
10044 pWowlEnterParams->ucWoWBSSConnLoss;
10045#endif // WLAN_WAKEUP_EVENTS
10046
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010047 wdiWowlEnterInfo->wdiWowlEnterInfo.bssIdx =
10048 pWowlEnterParams->bssIdx;
10049
Yue Ma7f44bbe2013-04-12 11:47:39 -070010050 wdiWowlEnterInfo->wdiReqStatusCB = WDA_WowlEnterReqCallback;
10051 wdiWowlEnterInfo->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010052 /* Store param pointer as passed in by caller */
10053 /* store Params pass it to WDI */
10054 pWdaParams->wdaWdiApiMsgParam = wdiWowlEnterInfo;
10055 pWdaParams->pWdaContext = pWDA;
10056 pWdaParams->wdaMsgParam = pWowlEnterParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070010057 wstatus = WDI_WowlEnterReq(wdiWowlEnterInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010058 (WDI_WowlEnterReqCb)WDA_WowlEnterRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070010059 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010060 {
10061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10062 "Failure in Wowl enter REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010063 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070010064 vos_mem_free(pWdaParams->wdaMsgParam) ;
10065 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10066 vos_mem_free(pWdaParams) ;
10067 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010068 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010069
10070}/*WDA_ProcessWowlEnterReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010071/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010072 * FUNCTION: WDA_WowlExitRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010073 *
10074 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010075void WDA_WowlExitRespCallback( WDI_WowlExitRspParamsType *pwdiWowlExitRsp, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010076{
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010077 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10078 tWDA_CbContext *pWDA;
10079 tSirHalWowlExitParams *pWowlExitParams;
10080 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010081 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010082 if(NULL == pWdaParams)
10083 {
10084 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010085 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010086 VOS_ASSERT(0) ;
10087 return ;
10088 }
10089 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10090 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam ;
10091
10092 pWowlExitParams->bssIdx = pwdiWowlExitRsp->bssIdx;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010093 pWowlExitParams->status = (pwdiWowlExitRsp->status);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010094
10095 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10096 vos_mem_free(pWdaParams) ;
10097
Jeff Johnson295189b2012-06-20 16:38:30 -070010098 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010099 "<------ %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010100 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010101 return ;
10102}
Jeff Johnson295189b2012-06-20 16:38:30 -070010103/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010104 * FUNCTION: WDA_WowlExitReqCallback
10105 * Free memory and send WOWL Exit RSP back to PE.
10106 * Invoked when WOWL Exit REQ failed in WDI and no RSP callback is generated.
10107 */
10108void WDA_WowlExitReqCallback(WDI_Status wdiStatus, void* pUserData)
10109{
10110 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10111 tWDA_CbContext *pWDA;
10112 tSirHalWowlExitParams *pWowlExitParams;
10113
10114 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10115 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10116
10117 if(NULL == pWdaParams)
10118 {
10119 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10120 "%s: pWdaParams received NULL", __func__);
10121 VOS_ASSERT(0);
10122 return;
10123 }
10124
10125 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10126 pWowlExitParams = (tSirHalWowlExitParams *)pWdaParams->wdaMsgParam;
10127 pWowlExitParams->status = wdiStatus;
10128
10129 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10130 {
10131 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10132 vos_mem_free(pWdaParams);
10133 WDA_SendMsg(pWDA, WDA_WOWL_EXIT_RSP, (void *)pWowlExitParams, 0);
10134 }
10135
10136 return;
10137}
10138/*
Jeff Johnson295189b2012-06-20 16:38:30 -070010139 * FUNCTION: WDA_ProcessWowlExitReq
10140 * Request to WDI to add WOWL Bcast pattern
10141 */
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010142VOS_STATUS WDA_ProcessWowlExitReq(tWDA_CbContext *pWDA,
10143 tSirHalWowlExitParams *pWowlExitParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010144{
10145 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070010146 WDI_Status wstatus;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010147 WDI_WowlExitReqParamsType *wdiWowlExitInfo =
10148 (WDI_WowlExitReqParamsType *)vos_mem_malloc(
10149 sizeof(WDI_WowlExitReqParamsType)) ;
10150 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010151 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010152 "------> %s " ,__func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010153 if(NULL == wdiWowlExitInfo)
10154 {
10155 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010156 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010157 VOS_ASSERT(0);
10158 return VOS_STATUS_E_NOMEM;
10159 }
10160 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10161 if(NULL == pWdaParams)
10162 {
10163 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010164 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010165 VOS_ASSERT(0);
10166 vos_mem_free(wdiWowlExitInfo);
10167 return VOS_STATUS_E_NOMEM;
10168 }
10169
10170 wdiWowlExitInfo->wdiWowlExitInfo.bssIdx =
10171 pWowlExitParams->bssIdx;
10172
Yue Ma7f44bbe2013-04-12 11:47:39 -070010173 wdiWowlExitInfo->wdiReqStatusCB = WDA_WowlExitReqCallback;
10174 wdiWowlExitInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010175
10176 /* Store param pointer as passed in by caller */
10177 /* store Params pass it to WDI */
10178 pWdaParams->wdaWdiApiMsgParam = wdiWowlExitInfo;
10179 pWdaParams->pWdaContext = pWDA;
10180 pWdaParams->wdaMsgParam = pWowlExitParams;
10181
10182 wstatus = WDI_WowlExitReq(wdiWowlExitInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010183 (WDI_WowlExitReqCb)WDA_WowlExitRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010184
Jeff Johnson43971f52012-07-17 12:26:56 -070010185 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010186 {
10187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10188 "Failure in Wowl exit REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070010189 status = CONVERT_WDI2VOS_STATUS(wstatus);
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10191 vos_mem_free(pWdaParams->wdaMsgParam);
10192 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010193 }
Jeff Johnson43971f52012-07-17 12:26:56 -070010194 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070010195}/*WDA_ProcessWowlExitReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070010196/*
10197 * FUNCTION: WDA_IsHwFrameTxTranslationCapable
10198 * Request to WDI to determine whether a given station is capable of
10199 * using HW-based frame translation
10200 */
10201v_BOOL_t WDA_IsHwFrameTxTranslationCapable(v_PVOID_t pVosGCtx,
10202 tANI_U8 staIdx)
10203{
10204 return WDI_IsHwFrameTxTranslationCapable(staIdx);
10205}
Jeff Johnson295189b2012-06-20 16:38:30 -070010206/*
10207 * FUNCTION: WDA_NvDownloadReqCallback
10208 * send NV Download RSP back to PE
10209 */
10210void WDA_NvDownloadReqCallback(WDI_NvDownloadRspInfoType *pNvDownloadRspParams,
10211 void* pUserData)
10212{
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010213
10214 tWDA_ReqParams *pWdaParams= ( tWDA_ReqParams *)pUserData;
10215 tWDA_CbContext *pWDA;
10216
Jeff Johnson295189b2012-06-20 16:38:30 -070010217 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010218 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010219
10220 if(NULL == pWdaParams)
10221 {
10222 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010223 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010224 VOS_ASSERT(0) ;
10225 return ;
10226 }
10227
10228 pWDA = pWdaParams->pWdaContext;
10229
Jeff Johnson295189b2012-06-20 16:38:30 -070010230 /*Cleaning */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010231 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10232 vos_mem_free(pWdaParams);
10233
Jeff Johnson295189b2012-06-20 16:38:30 -070010234 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070010235 return ;
10236}
Jeff Johnson295189b2012-06-20 16:38:30 -070010237/*
10238 * FUNCTION: WDA_ProcessNvDownloadReq
10239 * Read the NV blob to a buffer and send a request to WDI to download the blob to NV memory.
10240 */
10241VOS_STATUS WDA_NVDownload_Start(v_PVOID_t pVosContext)
10242{
10243 /* Initialize the local Variables*/
10244 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
10245 v_VOID_t *pNvBuffer=NULL;
10246 v_SIZE_t bufferSize = 0;
10247 WDI_Status status = WDI_STATUS_E_FAILURE;
10248 WDI_NvDownloadReqParamsType * wdiNvDownloadReqParam =NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010249 tWDA_ReqParams *pWdaParams ;
10250
Jeff Johnson295189b2012-06-20 16:38:30 -070010251 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010252 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010253 if(NULL == pWDA)
10254 {
10255 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010256 "%s:pWDA is NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010257 VOS_ASSERT(0);
Jeff Johnson295189b2012-06-20 16:38:30 -070010258 return VOS_STATUS_E_FAILURE;
10259 }
10260
10261 /* Get the NV structure base address and size from VOS */
Prasanna Kumarf6c94ae2013-04-11 20:05:21 -070010262 vos_nv_getNVEncodedBuffer(&pNvBuffer,&bufferSize);
10263
Jeff Johnson295189b2012-06-20 16:38:30 -070010264 wdiNvDownloadReqParam = (WDI_NvDownloadReqParamsType *)vos_mem_malloc(
10265 sizeof(WDI_NvDownloadReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010266 if(NULL == wdiNvDownloadReqParam)
10267 {
10268 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010269 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010270 VOS_ASSERT(0);
10271 return VOS_STATUS_E_NOMEM;
10272 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010273 /* Copy Params to wdiNvDownloadReqParam*/
10274 wdiNvDownloadReqParam->wdiBlobInfo.pBlobAddress = pNvBuffer;
10275 wdiNvDownloadReqParam->wdiBlobInfo.uBlobSize = bufferSize;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010276
10277 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10278 if(NULL == pWdaParams)
10279 {
10280 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010281 "%s: VOS MEM Alloc Failure", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010282 VOS_ASSERT(0);
10283 vos_mem_free(wdiNvDownloadReqParam);
10284 return VOS_STATUS_E_NOMEM;
10285 }
10286
Jeff Johnson295189b2012-06-20 16:38:30 -070010287 /* store Params pass it to WDI */
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010288 pWdaParams->wdaWdiApiMsgParam = (void *)wdiNvDownloadReqParam ;
10289 pWdaParams->wdaMsgParam = NULL;
10290 pWdaParams->pWdaContext = pWDA;
10291
10292
Jeff Johnson295189b2012-06-20 16:38:30 -070010293 wdiNvDownloadReqParam->wdiReqStatusCB = NULL ;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010294
Jeff Johnson295189b2012-06-20 16:38:30 -070010295 status = WDI_NvDownloadReq(wdiNvDownloadReqParam,
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010296 (WDI_NvDownloadRspCb)WDA_NvDownloadReqCallback,(void *)pWdaParams);
10297
Jeff Johnson295189b2012-06-20 16:38:30 -070010298 if(IS_WDI_STATUS_FAILURE(status))
10299 {
10300 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10301 "Failure in NV Download REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010302 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10303 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010304 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010305 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010306}
10307/*
10308 * FUNCTION: WDA_FlushAcReqCallback
10309 * send Flush AC RSP back to TL
10310 */
10311void WDA_FlushAcReqCallback(WDI_Status status, void* pUserData)
10312{
10313 vos_msg_t wdaMsg = {0} ;
10314 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10315 tFlushACReq *pFlushACReqParams;
10316 tFlushACRsp *pFlushACRspParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010317 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010318 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010319 if(NULL == pWdaParams)
10320 {
10321 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010322 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010323 VOS_ASSERT(0) ;
10324 return ;
10325 }
10326
10327 pFlushACReqParams = (tFlushACReq *)pWdaParams->wdaMsgParam;
10328 pFlushACRspParams = vos_mem_malloc(sizeof(tFlushACRsp));
10329 if(NULL == pFlushACRspParams)
10330 {
10331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010332 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010333 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070010334 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010335 return ;
10336 }
10337 vos_mem_zero(pFlushACRspParams,sizeof(tFlushACRsp));
10338 pFlushACRspParams->mesgLen = sizeof(tFlushACRsp);
10339 pFlushACRspParams->mesgType = WDA_TL_FLUSH_AC_RSP;
10340 pFlushACRspParams->ucSTAId = pFlushACReqParams->ucSTAId;
10341 pFlushACRspParams->ucTid = pFlushACReqParams->ucTid;
Venkata Prathyusha Kuntupalli778f4792013-03-21 14:18:02 -070010342 pFlushACRspParams->status = (status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010343 vos_mem_free(pWdaParams->wdaMsgParam) ;
10344 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10345 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010346 wdaMsg.type = WDA_TL_FLUSH_AC_RSP ;
10347 wdaMsg.bodyptr = (void *)pFlushACRspParams;
10348 // POST message to TL
10349 vos_mq_post_message(VOS_MQ_ID_TL, (vos_msg_t *) &wdaMsg);
10350
Jeff Johnson295189b2012-06-20 16:38:30 -070010351 return ;
10352}
Jeff Johnson295189b2012-06-20 16:38:30 -070010353/*
10354 * FUNCTION: WDA_ProcessFlushAcReq
10355 * Request to WDI to Update the DELBA REQ params.
10356 */
10357VOS_STATUS WDA_ProcessFlushAcReq(tWDA_CbContext *pWDA,
10358 tFlushACReq *pFlushAcReqParams)
10359{
10360 WDI_Status status = WDI_STATUS_SUCCESS ;
10361 WDI_FlushAcReqParamsType *wdiFlushAcReqParam =
10362 (WDI_FlushAcReqParamsType *)vos_mem_malloc(
10363 sizeof(WDI_FlushAcReqParamsType)) ;
10364 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010365 if(NULL == wdiFlushAcReqParam)
10366 {
10367 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010368 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010369 VOS_ASSERT(0);
10370 return VOS_STATUS_E_NOMEM;
10371 }
10372 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10373 if(NULL == pWdaParams)
10374 {
10375 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010376 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010377 VOS_ASSERT(0);
10378 vos_mem_free(wdiFlushAcReqParam);
10379 return VOS_STATUS_E_NOMEM;
10380 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010382 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010383 wdiFlushAcReqParam->wdiFlushAcInfo.ucSTAId = pFlushAcReqParams->ucSTAId;
10384 wdiFlushAcReqParam->wdiFlushAcInfo.ucTid = pFlushAcReqParams->ucTid;
10385 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgLen = pFlushAcReqParams->mesgLen;
10386 wdiFlushAcReqParam->wdiFlushAcInfo.usMesgType = pFlushAcReqParams->mesgType;
Jeff Johnson295189b2012-06-20 16:38:30 -070010387 /* Store Flush AC pointer, as this will be used for response */
10388 /* store Params pass it to WDI */
10389 pWdaParams->pWdaContext = pWDA;
10390 pWdaParams->wdaMsgParam = pFlushAcReqParams;
10391 pWdaParams->wdaWdiApiMsgParam = wdiFlushAcReqParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010392 status = WDI_FlushAcReq(wdiFlushAcReqParam,
10393 (WDI_FlushAcRspCb)WDA_FlushAcReqCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010394 if(IS_WDI_STATUS_FAILURE(status))
10395 {
10396 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10397 "Failure in Flush AC REQ Params WDI API, free all the memory " );
10398 vos_mem_free(pWdaParams->wdaMsgParam) ;
10399 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10400 vos_mem_free(pWdaParams) ;
10401 //TODO: respond to TL with failure
10402 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010403 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010404}
Jeff Johnson295189b2012-06-20 16:38:30 -070010405/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010406 * FUNCTION: WDA_BtAmpEventRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010407 *
10408 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010409void WDA_BtAmpEventRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010410{
10411 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10412 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010413 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010414
10415 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010416 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010417 if(NULL == pWdaParams)
10418 {
10419 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010420 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010421 VOS_ASSERT(0) ;
10422 return ;
10423 }
10424 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10425 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10426 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10427 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10428 {
10429 pWDA->wdaAmpSessionOn = VOS_FALSE;
10430 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010431 vos_mem_free(pWdaParams->wdaMsgParam) ;
10432 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10433 vos_mem_free(pWdaParams) ;
10434 /*
10435 * No respone required for WDA_SIGNAL_BTAMP_EVENT so just free the request
10436 * param here
10437 */
Jeff Johnson295189b2012-06-20 16:38:30 -070010438 return ;
10439}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010440/*
10441 * FUNCTION: WDA_BtAmpEventReqCallback
10442 * Free memory.
10443 * Invoked when BTAMPEvent REQ failed in WDI and no RSP callback is generated.
10444 */
10445void WDA_BtAmpEventReqCallback(WDI_Status wdiStatus, void* pUserData)
10446{
10447 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10448 tWDA_CbContext *pWDA;
10449 WDI_BtAmpEventParamsType *wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010450
Yue Ma7f44bbe2013-04-12 11:47:39 -070010451 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10452 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10453
10454 if(NULL == pWdaParams)
10455 {
10456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10457 "%s: pWdaParams received NULL", __func__);
10458 VOS_ASSERT(0);
10459 return;
10460 }
10461
10462 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10463 wdiBtAmpEventParam = (WDI_BtAmpEventParamsType *)pWdaParams->wdaWdiApiMsgParam;
10464
10465 if(BTAMP_EVENT_CONNECTION_TERMINATED ==
10466 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10467 {
10468 pWDA->wdaAmpSessionOn = VOS_FALSE;
10469 }
10470
10471 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10472 {
10473 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10474 vos_mem_free(pWdaParams->wdaMsgParam);
10475 vos_mem_free(pWdaParams);
10476 }
10477
10478 return;
10479}
Jeff Johnson295189b2012-06-20 16:38:30 -070010480/*
10481 * FUNCTION: WDA_ProcessBtAmpEventReq
10482 * Request to WDI to Update with BT AMP events.
10483 */
10484VOS_STATUS WDA_ProcessBtAmpEventReq(tWDA_CbContext *pWDA,
10485 tSmeBtAmpEvent *pBtAmpEventParams)
10486{
10487 WDI_Status status = WDI_STATUS_SUCCESS ;
10488 WDI_BtAmpEventParamsType *wdiBtAmpEventParam =
10489 (WDI_BtAmpEventParamsType *)vos_mem_malloc(
10490 sizeof(WDI_BtAmpEventParamsType)) ;
10491 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010492 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010493 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010494 if(NULL == wdiBtAmpEventParam)
10495 {
10496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010498 VOS_ASSERT(0);
10499 return VOS_STATUS_E_NOMEM;
10500 }
10501 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10502 if(NULL == pWdaParams)
10503 {
10504 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010505 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010506 VOS_ASSERT(0);
10507 vos_mem_free(wdiBtAmpEventParam);
10508 return VOS_STATUS_E_NOMEM;
10509 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010510 wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType =
10511 pBtAmpEventParams->btAmpEventType;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010512 wdiBtAmpEventParam->wdiReqStatusCB = WDA_BtAmpEventReqCallback;
10513 wdiBtAmpEventParam->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010514 /* Store BT AMP event pointer, as this will be used for response */
10515 /* store Params pass it to WDI */
10516 pWdaParams->pWdaContext = pWDA;
10517 pWdaParams->wdaMsgParam = pBtAmpEventParams;
10518 pWdaParams->wdaWdiApiMsgParam = wdiBtAmpEventParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070010519 status = WDI_BtAmpEventReq(wdiBtAmpEventParam,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010520 (WDI_BtAmpEventRspCb)WDA_BtAmpEventRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010521 if(IS_WDI_STATUS_FAILURE(status))
10522 {
10523 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10524 "Failure in BT AMP event REQ Params WDI API, free all the memory " );
10525 vos_mem_free(pWdaParams->wdaMsgParam) ;
10526 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10527 vos_mem_free(pWdaParams) ;
10528 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010529 if(BTAMP_EVENT_CONNECTION_START == wdiBtAmpEventParam->wdiBtAmpEventInfo.ucBtAmpEventType)
10530 {
10531 pWDA->wdaAmpSessionOn = VOS_TRUE;
10532 }
10533 return CONVERT_WDI2VOS_STATUS(status) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010534}
10535
Jeff Johnson295189b2012-06-20 16:38:30 -070010536/*
10537 * FUNCTION: WDA_FTMCommandReqCallback
10538 * Handle FTM CMD response came from HAL
10539 * Route responce to HDD FTM
10540 */
10541void WDA_FTMCommandReqCallback(void *ftmCmdRspData,
10542 void *usrData)
10543{
10544 tWDA_CbContext *pWDA = (tWDA_CbContext *)usrData ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010545 if((NULL == pWDA) || (NULL == ftmCmdRspData))
10546 {
10547 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053010548 "%s, invalid input %p, %p",__func__, pWDA, ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010549 return;
10550 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010551 /* Release Current FTM Command Request */
10552 vos_mem_free(pWDA->wdaFTMCmdReq);
10553 pWDA->wdaFTMCmdReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010554 /* Post FTM Responce to HDD FTM */
10555 wlan_sys_ftm(ftmCmdRspData);
Jeff Johnson295189b2012-06-20 16:38:30 -070010556 return;
10557}
Jeff Johnson295189b2012-06-20 16:38:30 -070010558/*
10559 * FUNCTION: WDA_ProcessFTMCommand
10560 * Send FTM command to WDI
10561 */
10562VOS_STATUS WDA_ProcessFTMCommand(tWDA_CbContext *pWDA,
10563 tPttMsgbuffer *pPTTFtmCmd)
10564{
10565 WDI_Status status = WDI_STATUS_SUCCESS;
10566 WDI_FTMCommandReqType *ftmCMDReq = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070010567 ftmCMDReq = (WDI_FTMCommandReqType *)
10568 vos_mem_malloc(sizeof(WDI_FTMCommandReqType));
10569 if(NULL == ftmCMDReq)
10570 {
10571 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10572 "WDA FTM Command buffer alloc fail");
10573 return VOS_STATUS_E_NOMEM;
10574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010575 ftmCMDReq->bodyLength = pPTTFtmCmd->msgBodyLength;
10576 ftmCMDReq->FTMCommandBody = (void *)pPTTFtmCmd;
Jeff Johnson295189b2012-06-20 16:38:30 -070010577 pWDA->wdaFTMCmdReq = (void *)ftmCMDReq;
Jeff Johnson295189b2012-06-20 16:38:30 -070010578 /* Send command to WDI */
10579 status = WDI_FTMCommandReq(ftmCMDReq, WDA_FTMCommandReqCallback, pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070010580 return status;
10581}
Jeff Johnsone7245742012-09-05 17:12:55 -070010582#ifdef FEATURE_OEM_DATA_SUPPORT
10583/*
10584 * FUNCTION: WDA_StartOemDataReqCallback
10585 *
10586 */
10587void WDA_StartOemDataReqCallback(
10588 WDI_oemDataRspParamsType *wdiOemDataRspParams,
10589 void* pUserData)
10590{
10591 VOS_STATUS status = VOS_STATUS_E_FAILURE;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010592 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10593 tWDA_CbContext *pWDA;
Jeff Johnsone7245742012-09-05 17:12:55 -070010594 tStartOemDataRsp *pOemDataRspParams = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070010595
Jeff Johnsone7245742012-09-05 17:12:55 -070010596 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010597 "<------ %s " ,__func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010598
10599 if(NULL == pWdaParams)
10600 {
10601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010602 "%s: pWdaParams received NULL", __func__);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010603 VOS_ASSERT(0) ;
10604 return ;
10605 }
10606 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
10607
Jeff Johnsone7245742012-09-05 17:12:55 -070010608 if(NULL == pWDA)
10609 {
10610 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010611 "%s:pWDA is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010612 VOS_ASSERT(0);
10613 return ;
10614 }
10615
10616 /*
10617 * Allocate memory for response params sent to PE
10618 */
10619 pOemDataRspParams = vos_mem_malloc(sizeof(tStartOemDataRsp));
10620
10621 // Check if memory is allocated for OemdataMeasRsp Params.
10622 if(NULL == pOemDataRspParams)
10623 {
10624 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10625 "OEM DATA WDA callback alloc fail");
10626 VOS_ASSERT(0) ;
10627 return;
10628 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010629
Jeff Johnsone7245742012-09-05 17:12:55 -070010630 // Free the memory allocated during request.
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010631 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10632 vos_mem_free(pWdaParams->wdaMsgParam);
10633 vos_mem_free(pWdaParams) ;
10634
Jeff Johnsone7245742012-09-05 17:12:55 -070010635 /*
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080010636 * Now go ahead and copy other stuff for PE in incase of success only
Jeff Johnsone7245742012-09-05 17:12:55 -070010637 * Also, here success always means that we have atleast one BSSID.
10638 */
10639 vos_mem_copy(pOemDataRspParams->oemDataRsp, wdiOemDataRspParams->oemDataRsp, OEM_DATA_RSP_SIZE);
10640
10641 //enable Tx
10642 status = WDA_ResumeDataTx(pWDA);
10643 if(status != VOS_STATUS_SUCCESS)
10644 {
10645 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL, "WDA Resume Data Tx fail");
10646 }
10647 WDA_SendMsg(pWDA, WDA_START_OEM_DATA_RSP, (void *)pOemDataRspParams, 0) ;
10648 return ;
10649}
10650/*
10651 * FUNCTION: WDA_ProcessStartOemDataReq
10652 * Send Start Oem Data Req to WDI
10653 */
10654VOS_STATUS WDA_ProcessStartOemDataReq(tWDA_CbContext *pWDA,
10655 tStartOemDataReq *pOemDataReqParams)
10656{
10657 WDI_Status status = WDI_STATUS_SUCCESS;
10658 WDI_oemDataReqParamsType *wdiOemDataReqParams = NULL;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010659 tWDA_ReqParams *pWdaParams ;
Jeff Johnsone7245742012-09-05 17:12:55 -070010660
10661 wdiOemDataReqParams = (WDI_oemDataReqParamsType*)vos_mem_malloc(sizeof(WDI_oemDataReqParamsType)) ;
10662
10663 if(NULL == wdiOemDataReqParams)
10664 {
10665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010666 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010667 VOS_ASSERT(0);
10668 return VOS_STATUS_E_NOMEM;
10669 }
10670
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010671 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.selfMacAddr,
10672 pOemDataReqParams->selfMacAddr, sizeof(tSirMacAddr));
10673 vos_mem_copy(wdiOemDataReqParams->wdiOemDataReqInfo.oemDataReq,
10674 pOemDataReqParams->oemDataReq, OEM_DATA_REQ_SIZE);
Jeff Johnsone7245742012-09-05 17:12:55 -070010675
10676 wdiOemDataReqParams->wdiReqStatusCB = NULL;
10677
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010678 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10679 if(NULL == pWdaParams)
Jeff Johnsone7245742012-09-05 17:12:55 -070010680 {
10681 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010682 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070010683 vos_mem_free(wdiOemDataReqParams);
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010684 vos_mem_free(pOemDataReqParams);
10685 VOS_ASSERT(0);
10686 return VOS_STATUS_E_NOMEM;
Jeff Johnsone7245742012-09-05 17:12:55 -070010687 }
Jeff Johnsone7245742012-09-05 17:12:55 -070010688
Bernald44a1ae2013-01-09 08:30:39 -080010689 pWdaParams->pWdaContext = (void*)pWDA;
10690 pWdaParams->wdaMsgParam = (void*)pOemDataReqParams;
10691 pWdaParams->wdaWdiApiMsgParam = (void*)wdiOemDataReqParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010692
10693 status = WDI_StartOemDataReq(wdiOemDataReqParams,
10694 (WDI_oemDataRspCb)WDA_StartOemDataReqCallback, pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010695
10696 if(IS_WDI_STATUS_FAILURE(status))
10697 {
10698 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10699 "Failure in Start OEM DATA REQ Params WDI API, free all the memory " );
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070010700 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10701 vos_mem_free(pWdaParams->wdaMsgParam);
10702 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070010703 }
10704 return CONVERT_WDI2VOS_STATUS(status) ;
10705}
10706#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070010707/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010708 * FUNCTION: WDA_SetTxPerTrackingRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010709 *
10710 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010711void WDA_SetTxPerTrackingRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010712{
10713 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010714 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010715 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010716 if(NULL == pWdaParams)
10717 {
10718 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010719 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010720 VOS_ASSERT(0) ;
10721 return ;
10722 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010723
10724 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10725 vos_mem_free(pWdaParams->wdaMsgParam);
10726 vos_mem_free(pWdaParams);
10727
10728 return ;
10729}
10730/*
10731 * FUNCTION: WDA_SetTxPerTrackingReqCallback
10732 * Free memory.
10733 * Invoked when SetTXPerTracking REQ failed in WDI and no RSP callback is generated.
10734 */
10735void WDA_SetTxPerTrackingReqCallback(WDI_Status wdiStatus, void* pUserData)
10736{
10737 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10738
10739 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10740 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10741
10742 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070010743 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070010744 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10745 "%s: pWdaParams received NULL", __func__);
10746 VOS_ASSERT(0);
10747 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010748 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010749
10750 if(IS_WDI_STATUS_FAILURE(wdiStatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070010751 {
10752 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
Yue Ma7f44bbe2013-04-12 11:47:39 -070010753 vos_mem_free(pWdaParams->wdaMsgParam);
10754 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010755 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070010756
10757 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010758}
Jeff Johnson295189b2012-06-20 16:38:30 -070010759#ifdef WLAN_FEATURE_GTK_OFFLOAD
10760/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010761 * FUNCTION: WDA_GTKOffloadRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010762 *
10763 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010764void WDA_GTKOffloadRespCallback( WDI_GtkOffloadRspParams *pwdiGtkOffloadRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010765 void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010766{
10767 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10768
10769 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010770 "<------ %s " ,__func__);
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010771 if(NULL == pWdaParams)
10772 {
10773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10774 "%s: pWdaParams received NULL", __func__);
10775 VOS_ASSERT(0);
10776 return;
10777 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010778
Jeff Johnson295189b2012-06-20 16:38:30 -070010779 vos_mem_free(pWdaParams->wdaMsgParam) ;
10780 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10781 vos_mem_free(pWdaParams) ;
10782
10783 //print a msg, nothing else to do
10784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070010785 "WDA_GTKOffloadRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070010786
10787 return ;
10788}
Yue Ma7f44bbe2013-04-12 11:47:39 -070010789/*
10790 * FUNCTION: WDA_GTKOffloadReqCallback
10791 * Free memory.
10792 * Invoked when GTKOffload REQ failed in WDI and no RSP callback is generated.
10793 */
10794void WDA_GTKOffloadReqCallback(WDI_Status wdiStatus, void* pUserData)
10795{
10796 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070010797
Yue Ma7f44bbe2013-04-12 11:47:39 -070010798 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10799 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10800
10801 if(NULL == pWdaParams)
10802 {
10803 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10804 "%s: pWdaParams received NULL", __func__);
10805 VOS_ASSERT(0);
10806 return;
10807 }
10808
10809 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10810 {
10811 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10812 vos_mem_free(pWdaParams->wdaMsgParam);
10813 vos_mem_free(pWdaParams);
10814 }
10815
10816 return;
10817}
Jeff Johnson295189b2012-06-20 16:38:30 -070010818/*
10819 * FUNCTION: WDA_ProcessGTKOffloadReq
10820 * Request to WDI to set the filter to minimize unnecessary host wakeup due
10821 * to broadcast traffic (sta mode).
10822 */
10823VOS_STATUS WDA_ProcessGTKOffloadReq(tWDA_CbContext *pWDA,
10824 tpSirGtkOffloadParams pGtkOffloadParams)
10825{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010826 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070010827 WDI_GtkOffloadReqMsg *wdiGtkOffloadReqMsg =
10828 (WDI_GtkOffloadReqMsg *)vos_mem_malloc(
10829 sizeof(WDI_GtkOffloadReqMsg)) ;
10830 tWDA_ReqParams *pWdaParams ;
10831
10832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010833 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010834
10835 if(NULL == wdiGtkOffloadReqMsg)
10836 {
10837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010838 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010839 VOS_ASSERT(0);
10840 return VOS_STATUS_E_NOMEM;
10841 }
10842
10843 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
10844 if(NULL == pWdaParams)
10845 {
10846 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010847 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070010848 VOS_ASSERT(0);
10849 vos_mem_free(wdiGtkOffloadReqMsg);
10850 return VOS_STATUS_E_NOMEM;
10851 }
10852
10853 //
10854 // Fill wdiGtkOffloadInfo from pGtkOffloadParams
10855 //
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010856
10857 vos_mem_copy(wdiGtkOffloadReqMsg->gtkOffloadReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010858 pGtkOffloadParams->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010859
Jeff Johnson295189b2012-06-20 16:38:30 -070010860 wdiGtkOffloadReqMsg->gtkOffloadReqParams.ulFlags = pGtkOffloadParams->ulFlags;
10861 // Copy KCK
10862 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKCK[0]), &(pGtkOffloadParams->aKCK[0]), 16);
10863 // Copy KEK
10864 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.aKEK[0]), &(pGtkOffloadParams->aKEK[0]), 16);
10865 // Copy KeyReplayCounter
10866 vos_mem_copy(&(wdiGtkOffloadReqMsg->gtkOffloadReqParams.ullKeyReplayCounter),
10867 &(pGtkOffloadParams->ullKeyReplayCounter), sizeof(v_U64_t));
10868
Yue Ma7f44bbe2013-04-12 11:47:39 -070010869 wdiGtkOffloadReqMsg->wdiReqStatusCB = WDA_GTKOffloadReqCallback;
10870 wdiGtkOffloadReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070010871
Jeff Johnson295189b2012-06-20 16:38:30 -070010872
10873 /* Store Params pass it to WDI */
10874 pWdaParams->wdaWdiApiMsgParam = (void *)wdiGtkOffloadReqMsg;
10875 pWdaParams->pWdaContext = pWDA;
10876 /* Store param pointer as passed in by caller */
10877 pWdaParams->wdaMsgParam = pGtkOffloadParams;
10878
Yue Ma7f44bbe2013-04-12 11:47:39 -070010879 status = WDI_GTKOffloadReq(wdiGtkOffloadReqMsg, (WDI_GtkOffloadCb)WDA_GTKOffloadRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010880
10881 if(IS_WDI_STATUS_FAILURE(status))
10882 {
10883 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10884 "Failure in WDA_ProcessGTKOffloadReq(), free all the memory " );
10885 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
10886 vos_mem_free(pWdaParams->wdaMsgParam);
10887 vos_mem_free(pWdaParams);
10888 }
10889
10890 return CONVERT_WDI2VOS_STATUS(status) ;
10891}
10892
10893/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070010894 * FUNCTION: WDA_GtkOffloadGetInfoRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070010895 *
10896 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070010897void WDA_GtkOffloadGetInfoRespCallback( WDI_GtkOffloadGetInfoRspParams *pwdiGtkOffloadGetInfoRsparams,
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010898 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070010899{
10900 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10901 tWDA_CbContext *pWDA;
10902 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoReq;
Nirav Shah374de6e2014-02-13 16:40:01 +053010903 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070010904 vos_msg_t vosMsg;
10905
10906 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070010907 "<------ %s " ,__func__);
Nirav Shah374de6e2014-02-13 16:40:01 +053010908
Manjunathappa Prakashfb585462013-12-23 19:07:07 -080010909 if(NULL == pWdaParams)
10910 {
10911 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10912 "%s: pWdaParams received NULL", __func__);
10913 VOS_ASSERT(0);
10914 return;
10915 }
Jeff Johnson295189b2012-06-20 16:38:30 -070010916
Nirav Shah374de6e2014-02-13 16:40:01 +053010917 pGtkOffloadGetInfoRsp = vos_mem_malloc(sizeof(tSirGtkOffloadGetInfoRspParams));
10918 if(NULL == pGtkOffloadGetInfoRsp)
10919 {
10920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10921 "%s: vos_mem_malloc failed ", __func__);
10922 VOS_ASSERT(0);
10923 return;
10924 }
10925
Jeff Johnson295189b2012-06-20 16:38:30 -070010926 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
10927 pGtkOffloadGetInfoReq = (tpSirGtkOffloadGetInfoRspParams)pWdaParams->wdaMsgParam;
10928
10929 // Fill pGtkOffloadGetInfoRsp from tSirGtkOffloadGetInfoRspParams
10930 vos_mem_zero(pGtkOffloadGetInfoRsp, sizeof(tSirGtkOffloadGetInfoRspParams));
10931
10932 /* Message Header */
10933 pGtkOffloadGetInfoRsp->mesgType = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
Kiran Kumar Lokerefdf42412013-07-17 17:40:58 -070010934 pGtkOffloadGetInfoRsp->mesgLen = sizeof(tSirGtkOffloadGetInfoRspParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070010935
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070010936 pGtkOffloadGetInfoRsp->ulStatus = pwdiGtkOffloadGetInfoRsparams->ulStatus;
10937 pGtkOffloadGetInfoRsp->ullKeyReplayCounter = pwdiGtkOffloadGetInfoRsparams->ullKeyReplayCounter;
10938 pGtkOffloadGetInfoRsp->ulTotalRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulTotalRekeyCount;
10939 pGtkOffloadGetInfoRsp->ulGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulGTKRekeyCount;
10940 pGtkOffloadGetInfoRsp->ulIGTKRekeyCount = pwdiGtkOffloadGetInfoRsparams->ulIGTKRekeyCount;
Jeff Johnson295189b2012-06-20 16:38:30 -070010941
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053010942 vos_mem_copy( pGtkOffloadGetInfoRsp->bssId,
10943 pwdiGtkOffloadGetInfoRsparams->bssId,
10944 sizeof (wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070010945 /* VOS message wrapper */
10946 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10947 vosMsg.bodyptr = (void *)pGtkOffloadGetInfoRsp;
10948 vosMsg.bodyval = 0;
10949
10950 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
10951 {
10952 /* free the mem and return */
10953 vos_mem_free((v_VOID_t *) pGtkOffloadGetInfoRsp);
10954 }
10955
10956 vos_mem_free(pWdaParams->wdaMsgParam) ;
10957 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10958 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070010959
10960 return;
10961}
10962/*
10963 * FUNCTION: WDA_GtkOffloadGetInfoReqCallback
10964 * Free memory and send RSP back to SME.
10965 * Invoked when GTKOffloadGetInfo REQ failed in WDI and no RSP callback is generated.
10966 */
10967void WDA_GtkOffloadGetInfoReqCallback(WDI_Status wdiStatus, void * pUserData)
10968{
10969 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
10970 vos_msg_t vosMsg;
10971
10972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
10973 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
10974
10975 if(NULL == pWdaParams)
10976 {
10977 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
10978 "%s: pWdaParams received NULL", __func__);
10979 VOS_ASSERT(0);
10980 return;
10981 }
10982
10983 /* VOS message wrapper */
10984 vosMsg.type = eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP;
10985 vosMsg.bodyptr = NULL;
10986 vosMsg.bodyval = 0;
10987
10988 if(IS_WDI_STATUS_FAILURE(wdiStatus))
10989 {
10990 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
10991 vos_mem_free(pWdaParams->wdaMsgParam);
10992 vos_mem_free(pWdaParams);
10993 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
10994 }
10995
10996 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070010997}
10998#endif
10999
11000/*
11001 * FUNCTION: WDA_ProcessSetTxPerTrackingReq
11002 * Request to WDI to set Tx Per Tracking configurations
11003 */
11004VOS_STATUS WDA_ProcessSetTxPerTrackingReq(tWDA_CbContext *pWDA, tSirTxPerTrackingParam *pTxPerTrackingParams)
11005{
11006 VOS_STATUS status = VOS_STATUS_SUCCESS;
Jeff Johnson43971f52012-07-17 12:26:56 -070011007 WDI_Status wstatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011008 WDI_SetTxPerTrackingReqParamsType *pwdiSetTxPerTrackingReqParams =
11009 (WDI_SetTxPerTrackingReqParamsType *)vos_mem_malloc(
11010 sizeof(WDI_SetTxPerTrackingReqParamsType)) ;
11011 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011012 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011013 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011014 if(NULL == pwdiSetTxPerTrackingReqParams)
11015 {
11016 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011017 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011018 vos_mem_free(pTxPerTrackingParams);
11019 VOS_ASSERT(0);
11020 return VOS_STATUS_E_NOMEM;
11021 }
11022 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11023 if(NULL == pWdaParams)
11024 {
11025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011026 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011027 vos_mem_free(pwdiSetTxPerTrackingReqParams);
11028 vos_mem_free(pTxPerTrackingParams);
11029 VOS_ASSERT(0);
11030 return VOS_STATUS_E_NOMEM;
11031 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011032 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingEnable =
11033 pTxPerTrackingParams->ucTxPerTrackingEnable;
11034 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingPeriod =
11035 pTxPerTrackingParams->ucTxPerTrackingPeriod;
11036 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.ucTxPerTrackingRatio =
11037 pTxPerTrackingParams->ucTxPerTrackingRatio;
11038 pwdiSetTxPerTrackingReqParams->wdiTxPerTrackingParam.uTxPerTrackingWatermark =
11039 pTxPerTrackingParams->uTxPerTrackingWatermark;
Yue Ma7f44bbe2013-04-12 11:47:39 -070011040 pwdiSetTxPerTrackingReqParams->wdiReqStatusCB = WDA_SetTxPerTrackingReqCallback;
11041 pwdiSetTxPerTrackingReqParams->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011042 /* Store param pointer as passed in by caller */
11043 /* store Params pass it to WDI
11044 Ideally, the memory allocated here will be free at WDA_SetTxPerTrackingReqCallback */
11045 pWdaParams->wdaWdiApiMsgParam = pwdiSetTxPerTrackingReqParams;
11046 pWdaParams->pWdaContext = pWDA;
11047 pWdaParams->wdaMsgParam = pTxPerTrackingParams;
Jeff Johnson43971f52012-07-17 12:26:56 -070011048 wstatus = WDI_SetTxPerTrackingReq(pwdiSetTxPerTrackingReqParams,
Yue Ma7f44bbe2013-04-12 11:47:39 -070011049 (WDI_SetTxPerTrackingRspCb)WDA_SetTxPerTrackingRespCallback, pWdaParams);
Jeff Johnson43971f52012-07-17 12:26:56 -070011050 if(IS_WDI_STATUS_FAILURE(wstatus))
Jeff Johnson295189b2012-06-20 16:38:30 -070011051 {
11052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11053 "Failure in Set Tx PER REQ WDI API, free all the memory " );
Jeff Johnson43971f52012-07-17 12:26:56 -070011054 status = CONVERT_WDI2VOS_STATUS(wstatus);
Jeff Johnson295189b2012-06-20 16:38:30 -070011055 vos_mem_free(pWdaParams->wdaMsgParam) ;
11056 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11057 vos_mem_free(pWdaParams) ;
11058 }
Jeff Johnson43971f52012-07-17 12:26:56 -070011059 return status;
Jeff Johnson295189b2012-06-20 16:38:30 -070011060
11061}/*WDA_ProcessSetTxPerTrackingReq*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011062/*
11063 * FUNCTION: WDA_HALDumpCmdCallback
11064 * Send the VOS complete .
11065 */
11066void WDA_HALDumpCmdCallback(WDI_HALDumpCmdRspParamsType *wdiRspParams,
11067 void* pUserData)
11068{
11069 tANI_U8 *buffer = NULL;
11070 tWDA_CbContext *pWDA = NULL;
11071 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011072 if(NULL == pWdaParams)
11073 {
11074 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011075 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011076 VOS_ASSERT(0) ;
11077 return ;
11078 }
11079
11080 pWDA = pWdaParams->pWdaContext;
11081 buffer = (tANI_U8 *)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070011082 if(wdiRspParams->usBufferLen > 0)
11083 {
11084 /*Copy the Resp data to UMAC supplied buffer*/
11085 vos_mem_copy(buffer, wdiRspParams->pBuffer, wdiRspParams->usBufferLen);
11086 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011087 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11088 vos_mem_free(pWdaParams);
11089
11090 /* Indicate VOSS about the start complete */
11091 vos_WDAComplete_cback(pWDA->pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070011092 return ;
11093}
11094
Jeff Johnson295189b2012-06-20 16:38:30 -070011095/*
11096 * FUNCTION: WDA_ProcessHALDumpCmdReq
11097 * Send Dump command to WDI
11098 */
11099VOS_STATUS WDA_HALDumpCmdReq(tpAniSirGlobal pMac, tANI_U32 cmd,
11100 tANI_U32 arg1, tANI_U32 arg2, tANI_U32 arg3,
11101 tANI_U32 arg4, tANI_U8 *pBuffer)
11102{
11103 WDI_Status status = WDI_STATUS_SUCCESS;
11104 WDI_HALDumpCmdReqParamsType *wdiHALDumpCmdReqParam = NULL;
11105 WDI_HALDumpCmdReqInfoType *wdiHalDumpCmdInfo = NULL ;
11106 tWDA_ReqParams *pWdaParams ;
11107 pVosContextType pVosContext = NULL;
11108 VOS_STATUS vStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070011109 pVosContext = (pVosContextType)vos_get_global_context(VOS_MODULE_ID_PE,
11110 (void *)pMac);
Katya Nigame4bafe02014-02-28 15:37:57 +053011111 if(pVosContext)
11112 {
11113 if (pVosContext->isLogpInProgress)
11114 {
11115 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_FATAL,
11116 "%s:LOGP in Progress. Ignore!!!", __func__);
11117 return VOS_STATUS_E_BUSY;
11118 }
11119 }
11120 else
11121 {
11122 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11123 "%s: VOS Context Null", __func__);
11124 return VOS_STATUS_E_RESOURCES;
11125 }
11126
Jeff Johnson295189b2012-06-20 16:38:30 -070011127 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11128 if(NULL == pWdaParams)
11129 {
11130 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011131 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011132 return VOS_STATUS_E_NOMEM;
11133 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011134 /* Allocate memory WDI request structure*/
11135 wdiHALDumpCmdReqParam = (WDI_HALDumpCmdReqParamsType *)
11136 vos_mem_malloc(sizeof(WDI_HALDumpCmdReqParamsType));
11137 if(NULL == wdiHALDumpCmdReqParam)
11138 {
11139 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11140 "WDA HAL DUMP Command buffer alloc fail");
11141 vos_mem_free(pWdaParams);
11142 return WDI_STATUS_E_FAILURE;
11143 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011144 wdiHalDumpCmdInfo = &wdiHALDumpCmdReqParam->wdiHALDumpCmdInfoType;
Jeff Johnson295189b2012-06-20 16:38:30 -070011145 /* Extract the arguments */
11146 wdiHalDumpCmdInfo->command = cmd;
11147 wdiHalDumpCmdInfo->argument1 = arg1;
11148 wdiHalDumpCmdInfo->argument2 = arg2;
11149 wdiHalDumpCmdInfo->argument3 = arg3;
11150 wdiHalDumpCmdInfo->argument4 = arg4;
Jeff Johnson295189b2012-06-20 16:38:30 -070011151 wdiHALDumpCmdReqParam->wdiReqStatusCB = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011152 pWdaParams->pWdaContext = pVosContext->pWDAContext;
11153
11154 /* Response message will be passed through the buffer */
11155 pWdaParams->wdaMsgParam = (void *)pBuffer;
11156
11157 /* store Params pass it to WDI */
11158 pWdaParams->wdaWdiApiMsgParam = (void *)wdiHALDumpCmdReqParam ;
Jeff Johnson295189b2012-06-20 16:38:30 -070011159 /* Send command to WDI */
11160 status = WDI_HALDumpCmdReq(wdiHALDumpCmdReqParam, WDA_HALDumpCmdCallback, pWdaParams);
Gopichand Nakkalafab3fae2013-01-07 15:01:01 -080011161 vStatus = vos_wait_single_event( &(pVosContext->wdaCompleteEvent), WDA_DUMPCMD_WAIT_TIMEOUT );
Jeff Johnson295189b2012-06-20 16:38:30 -070011162 if ( vStatus != VOS_STATUS_SUCCESS )
11163 {
11164 if ( vStatus == VOS_STATUS_E_TIMEOUT )
11165 {
11166 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011167 "%s: Timeout occurred before WDA_HALDUMP complete",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011168 }
11169 else
11170 {
11171 VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011172 "%s: WDA_HALDUMP reporting other error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011173 }
11174 VOS_ASSERT(0);
11175 }
11176 return status;
11177}
Jeff Johnson295189b2012-06-20 16:38:30 -070011178#ifdef WLAN_FEATURE_GTK_OFFLOAD
11179/*
11180 * FUNCTION: WDA_ProcessGTKOffloadgetInfoReq
11181 * Request to WDI to get GTK Offload Information
11182 */
11183VOS_STATUS WDA_ProcessGTKOffloadGetInfoReq(tWDA_CbContext *pWDA,
11184 tpSirGtkOffloadGetInfoRspParams pGtkOffloadGetInfoRsp)
11185{
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011186 WDI_Status status = WDI_STATUS_E_FAILURE;
Jeff Johnson295189b2012-06-20 16:38:30 -070011187 WDI_GtkOffloadGetInfoReqMsg *pwdiGtkOffloadGetInfoReqMsg =
11188 (WDI_GtkOffloadGetInfoReqMsg *)vos_mem_malloc(sizeof(WDI_GtkOffloadGetInfoReqMsg));
11189 tWDA_ReqParams *pWdaParams ;
11190
11191 if(NULL == pwdiGtkOffloadGetInfoReqMsg)
11192 {
11193 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011194 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011195 VOS_ASSERT(0);
11196 return VOS_STATUS_E_NOMEM;
11197 }
11198
11199 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
11200 if(NULL == pWdaParams)
11201 {
11202 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011203 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011204 VOS_ASSERT(0);
11205 vos_mem_free(pwdiGtkOffloadGetInfoReqMsg);
11206 return VOS_STATUS_E_NOMEM;
11207 }
11208
Yue Ma7f44bbe2013-04-12 11:47:39 -070011209 pwdiGtkOffloadGetInfoReqMsg->wdiReqStatusCB = WDA_GtkOffloadGetInfoReqCallback;
11210 pwdiGtkOffloadGetInfoReqMsg->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070011211
Jeff Johnson295189b2012-06-20 16:38:30 -070011212 /* Store Params pass it to WDI */
11213 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiGtkOffloadGetInfoReqMsg;
11214 pWdaParams->pWdaContext = pWDA;
11215 /* Store param pointer as passed in by caller */
11216 pWdaParams->wdaMsgParam = pGtkOffloadGetInfoRsp;
11217
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011218 vos_mem_copy(pwdiGtkOffloadGetInfoReqMsg->WDI_GtkOffloadGetInfoReqParams.bssId,
Gopichand Nakkala870cbae2013-03-15 21:16:09 +053011219 pGtkOffloadGetInfoRsp->bssId, sizeof (wpt_macAddr));
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070011220
Yue Ma7f44bbe2013-04-12 11:47:39 -070011221 status = WDI_GTKOffloadGetInfoReq(pwdiGtkOffloadGetInfoReqMsg, (WDI_GtkOffloadGetInfoCb)WDA_GtkOffloadGetInfoRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070011222
11223 if(IS_WDI_STATUS_FAILURE(status))
11224 {
11225 /* failure returned by WDI API */
11226 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11227 "Failure in WDA_ProcessGTKOffloadGetInfoReq(), free all the memory " );
11228 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11229 vos_mem_free(pWdaParams) ;
11230 pGtkOffloadGetInfoRsp->ulStatus = eSIR_FAILURE ;
11231 WDA_SendMsg(pWDA, WDA_GTK_OFFLOAD_GETINFO_RSP, (void *)pGtkOffloadGetInfoRsp, 0) ;
11232 }
11233
11234 return CONVERT_WDI2VOS_STATUS(status) ;
11235}
11236#endif // WLAN_FEATURE_GTK_OFFLOAD
11237
11238/*
Yue Mab9c86f42013-08-14 15:59:08 -070011239 * FUNCTION: WDA_ProcessAddPeriodicTxPtrnInd
11240 *
11241 */
11242VOS_STATUS WDA_ProcessAddPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11243 tSirAddPeriodicTxPtrn *pAddPeriodicTxPtrnParams)
11244{
11245 WDI_Status wdiStatus;
11246 WDI_AddPeriodicTxPtrnParamsType *addPeriodicTxPtrnParams;
11247
11248 addPeriodicTxPtrnParams =
11249 vos_mem_malloc(sizeof(WDI_AddPeriodicTxPtrnParamsType));
11250
11251 if (NULL == addPeriodicTxPtrnParams)
11252 {
11253 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11254 "%s: Not able to allocate memory for addPeriodicTxPtrnParams!",
11255 __func__);
11256
11257 return VOS_STATUS_E_NOMEM;
11258 }
11259
11260 vos_mem_copy(&(addPeriodicTxPtrnParams->wdiAddPeriodicTxPtrnParams),
11261 pAddPeriodicTxPtrnParams, sizeof(tSirAddPeriodicTxPtrn));
11262
11263 addPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11264 addPeriodicTxPtrnParams->pUserData = pWDA;
11265
11266 wdiStatus = WDI_AddPeriodicTxPtrnInd(addPeriodicTxPtrnParams);
11267
11268 if (WDI_STATUS_PENDING == wdiStatus)
11269 {
11270 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11271 "Pending received for %s:%d", __func__, __LINE__ );
11272 }
11273 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11274 {
11275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11276 "Failure in %s:%d", __func__, __LINE__ );
11277 }
11278
11279 vos_mem_free(addPeriodicTxPtrnParams);
11280
11281 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11282}
11283
11284/*
11285 * FUNCTION: WDA_ProcessDelPeriodicTxPtrnInd
11286 *
11287 */
11288VOS_STATUS WDA_ProcessDelPeriodicTxPtrnInd(tWDA_CbContext *pWDA,
11289 tSirDelPeriodicTxPtrn *pDelPeriodicTxPtrnParams)
11290{
11291 WDI_Status wdiStatus;
11292 WDI_DelPeriodicTxPtrnParamsType *delPeriodicTxPtrnParams;
11293
11294 delPeriodicTxPtrnParams =
11295 vos_mem_malloc(sizeof(WDI_DelPeriodicTxPtrnParamsType));
11296
11297 if (NULL == delPeriodicTxPtrnParams)
11298 {
11299 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11300 "%s: Not able to allocate memory for delPeriodicTxPtrnParams!",
11301 __func__);
11302
11303 return VOS_STATUS_E_NOMEM;
11304 }
11305
11306 vos_mem_copy(&(delPeriodicTxPtrnParams->wdiDelPeriodicTxPtrnParams),
11307 pDelPeriodicTxPtrnParams, sizeof(tSirDelPeriodicTxPtrn));
11308
11309 delPeriodicTxPtrnParams->wdiReqStatusCB = WDA_WdiIndicationCallback;
11310 delPeriodicTxPtrnParams->pUserData = pWDA;
11311
11312 wdiStatus = WDI_DelPeriodicTxPtrnInd(delPeriodicTxPtrnParams);
11313
11314 if (WDI_STATUS_PENDING == wdiStatus)
11315 {
11316 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11317 "Pending received for %s:%d", __func__, __LINE__ );
11318 }
11319 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11320 {
11321 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11322 "Failure in %s:%d", __func__, __LINE__ );
11323 }
11324
11325 vos_mem_free(delPeriodicTxPtrnParams);
11326
11327 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11328}
11329
Rajeev79dbe4c2013-10-05 11:03:42 +053011330#ifdef FEATURE_WLAN_BATCH_SCAN
11331/*
11332 * FUNCTION: WDA_ProcessStopBatchScanInd
11333 *
11334 * DESCRIPTION: This function sends stop batch scan inidcation message to WDI
11335 *
11336 * PARAM:
11337 * pWDA: pointer to WDA context
11338 * pReq: pointer to stop batch scan request
11339 */
11340VOS_STATUS WDA_ProcessStopBatchScanInd(tWDA_CbContext *pWDA,
11341 tSirStopBatchScanInd *pReq)
11342{
11343 WDI_Status wdiStatus;
11344 WDI_StopBatchScanIndType wdiReq;
11345
11346 wdiReq.param = pReq->param;
11347
11348 wdiStatus = WDI_StopBatchScanInd(&wdiReq);
11349
11350 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11351 {
11352 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11353 "Stop batch scan ind failed %s:%d", __func__, wdiStatus);
11354 }
11355
11356 vos_mem_free(pReq);
11357
11358 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11359}
11360/*==========================================================================
11361 FUNCTION WDA_ProcessTriggerBatchScanResultInd
11362
11363 DESCRIPTION
11364 API to pull batch scan result from FW
11365
11366 PARAMETERS
11367 pWDA: Pointer to WDA context
11368 pGetBatchScanReq: Pointer to get batch scan result indication
11369
11370 RETURN VALUE
11371 NONE
11372
11373===========================================================================*/
11374VOS_STATUS WDA_ProcessTriggerBatchScanResultInd(tWDA_CbContext *pWDA,
11375 tSirTriggerBatchScanResultInd *pReq)
11376{
11377 WDI_Status wdiStatus;
11378 WDI_TriggerBatchScanResultIndType wdiReq;
11379
11380 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11381 "------> %s " ,__func__);
11382
11383 wdiReq.param = pReq->param;
11384
11385 wdiStatus = WDI_TriggerBatchScanResultInd(&wdiReq);
11386
11387 if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11388 {
11389 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11390 "Trigger batch scan result ind failed %s:%d",
11391 __func__, wdiStatus);
11392 }
11393
11394 vos_mem_free(pReq);
11395
11396 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11397}
11398
11399/*==========================================================================
11400 FUNCTION WDA_SetBatchScanRespCallback
11401
11402 DESCRIPTION
11403 API to process set batch scan response from FW
11404
11405 PARAMETERS
11406 pRsp: Pointer to set batch scan response
11407 pUserData: Pointer to user data
11408
11409 RETURN VALUE
11410 NONE
11411
11412===========================================================================*/
11413void WDA_SetBatchScanRespCallback
11414(
11415 WDI_SetBatchScanRspType *pRsp,
11416 void* pUserData
11417)
11418{
11419 tSirSetBatchScanRsp *pHddSetBatchScanRsp;
11420 tpAniSirGlobal pMac;
11421 void *pCallbackContext;
11422 tWDA_CbContext *pWDA = NULL ;
11423 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
11424
11425
11426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11427 "<------ %s " ,__func__);
11428 if (NULL == pWdaParams)
11429 {
11430 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11431 "%s: pWdaParams received NULL", __func__);
11432 VOS_ASSERT(0) ;
11433 return ;
11434 }
11435
11436 /*extract WDA context*/
11437 pWDA = pWdaParams->pWdaContext;
11438 if (NULL == pWDA)
11439 {
11440 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11441 "%s:pWDA is NULL can't invole HDD callback",
11442 __func__);
11443 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11444 vos_mem_free(pWdaParams->wdaMsgParam);
11445 vos_mem_free(pWdaParams);
11446 VOS_ASSERT(0);
11447 return;
11448 }
11449
11450 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11451 vos_mem_free(pWdaParams->wdaMsgParam);
11452 vos_mem_free(pWdaParams);
11453
11454 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11455 if (NULL == pMac)
11456 {
11457 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11458 "%s:pMac is NULL", __func__);
11459 VOS_ASSERT(0);
11460 return;
11461 }
11462
11463 pHddSetBatchScanRsp =
11464 (tSirSetBatchScanRsp *)vos_mem_malloc(sizeof(tSirSetBatchScanRsp));
11465 if (NULL == pHddSetBatchScanRsp)
11466 {
11467 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11468 "%s: VOS MEM Alloc Failure can't invoke HDD callback", __func__);
11469 VOS_ASSERT(0);
11470 return;
11471 }
11472
11473 pHddSetBatchScanRsp->nScansToBatch = pRsp->nScansToBatch;
11474
11475 pCallbackContext = pMac->pmc.setBatchScanReqCallbackContext;
11476 /*call hdd callback with set batch scan response data*/
11477 if(pMac->pmc.setBatchScanReqCallback)
11478 {
11479 pMac->pmc.setBatchScanReqCallback(pCallbackContext, pHddSetBatchScanRsp);
11480 }
11481 else
11482 {
11483 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11484 "%s:HDD callback is null", __func__);
11485 VOS_ASSERT(0);
11486 }
11487
11488 vos_mem_free(pHddSetBatchScanRsp);
11489 return ;
11490}
11491
11492/*==========================================================================
11493 FUNCTION WDA_ProcessSetBatchScanReq
11494
11495 DESCRIPTION
11496 API to send set batch scan request to WDI
11497
11498 PARAMETERS
11499 pWDA: Pointer to WDA context
11500 pSetBatchScanReq: Pointer to set batch scan req
11501
11502 RETURN VALUE
11503 NONE
11504
11505===========================================================================*/
11506VOS_STATUS WDA_ProcessSetBatchScanReq(tWDA_CbContext *pWDA,
11507 tSirSetBatchScanReq *pSetBatchScanReq)
11508{
11509 WDI_Status status;
11510 tWDA_ReqParams *pWdaParams ;
11511 WDI_SetBatchScanReqType *pWdiSetBatchScanReq;
11512
11513 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
11514 "------> %s " ,__func__);
11515
11516 pWdiSetBatchScanReq =
11517 (WDI_SetBatchScanReqType *)vos_mem_malloc(sizeof(WDI_SetBatchScanReqType));
11518 if (NULL == pWdiSetBatchScanReq)
11519 {
11520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11521 "%s: VOS MEM Alloc Failure", __func__);
11522 vos_mem_free(pSetBatchScanReq);
11523 VOS_ASSERT(0);
11524 return VOS_STATUS_E_NOMEM;
11525 }
11526
11527 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams));
11528 if (NULL == pWdaParams)
11529 {
11530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11531 "%s: VOS MEM Alloc Failure", __func__);
11532 VOS_ASSERT(0);
11533 vos_mem_free(pSetBatchScanReq);
11534 vos_mem_free(pWdiSetBatchScanReq);
11535 return VOS_STATUS_E_NOMEM;
11536 }
11537
11538 pWdiSetBatchScanReq->scanFrequency = pSetBatchScanReq->scanFrequency;
11539 pWdiSetBatchScanReq->numberOfScansToBatch =
11540 pSetBatchScanReq->numberOfScansToBatch;
11541 pWdiSetBatchScanReq->bestNetwork = pSetBatchScanReq->bestNetwork;
11542 pWdiSetBatchScanReq->rfBand = pSetBatchScanReq->rfBand;
11543 pWdiSetBatchScanReq->rtt = pSetBatchScanReq->rtt;
11544
11545 pWdaParams->wdaWdiApiMsgParam = pWdiSetBatchScanReq;
11546 pWdaParams->pWdaContext = pWDA;
11547 pWdaParams->wdaMsgParam = pSetBatchScanReq;
11548
11549 status = WDI_SetBatchScanReq(pWdiSetBatchScanReq, pWdaParams,
11550 (WDI_SetBatchScanCb)WDA_SetBatchScanRespCallback);
11551 if (IS_WDI_STATUS_FAILURE(status))
11552 {
11553 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11554 "Failure in Set Batch Scan REQ WDI API, free all the memory " );
11555 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
11556 vos_mem_free(pWdaParams->wdaMsgParam);
11557 vos_mem_free(pWdaParams);
11558 }
11559 return CONVERT_WDI2VOS_STATUS(status);
11560}
11561
11562#endif
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011563/*
11564 * FUNCTION: WDA_ProcessHT40OBSSScanInd
11565 *
11566 * DESCRIPTION: This function sends start/update OBSS scan
11567 * inidcation message to WDI
11568 *
11569 * PARAM:
11570 * pWDA: pointer to WDA context
11571 * pReq: pointer to start OBSS scan request
11572 */
11573VOS_STATUS WDA_ProcessHT40OBSSScanInd(tWDA_CbContext *pWDA,
11574 tSirHT40OBSSScanInd *pReq)
11575{
11576 WDI_Status status;
11577 WDI_HT40ObssScanParamsType wdiOBSSScanParams;
11578 WDI_HT40ObssScanIndType *pWdiOBSSScanInd;
Rajeev79dbe4c2013-10-05 11:03:42 +053011579
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053011580 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11581 "------> %s " ,__func__);
11582 wdiOBSSScanParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11583 wdiOBSSScanParams.pUserData = pWDA;
11584
11585 pWdiOBSSScanInd = &(wdiOBSSScanParams.wdiHT40ObssScanParam);
11586 pWdiOBSSScanInd->cmdType = pReq->cmdType;
11587 pWdiOBSSScanInd->scanType = pReq->scanType;
11588 pWdiOBSSScanInd->OBSSScanActiveDwellTime =
11589 pReq->OBSSScanActiveDwellTime;
11590 pWdiOBSSScanInd->OBSSScanPassiveDwellTime =
11591 pReq->OBSSScanPassiveDwellTime;
11592 pWdiOBSSScanInd->BSSChannelWidthTriggerScanInterval =
11593 pReq->BSSChannelWidthTriggerScanInterval;
11594 pWdiOBSSScanInd->BSSWidthChannelTransitionDelayFactor =
11595 pReq->BSSWidthChannelTransitionDelayFactor;
11596 pWdiOBSSScanInd->OBSSScanActiveTotalPerChannel =
11597 pReq->OBSSScanActiveTotalPerChannel;
11598 pWdiOBSSScanInd->OBSSScanPassiveTotalPerChannel =
11599 pReq->OBSSScanPassiveTotalPerChannel;
11600 pWdiOBSSScanInd->OBSSScanActivityThreshold =
11601 pReq->OBSSScanActivityThreshold;
11602 pWdiOBSSScanInd->channelCount = pReq->channelCount;
11603 vos_mem_copy(pWdiOBSSScanInd->channels,
11604 pReq->channels,
11605 pReq->channelCount);
11606 pWdiOBSSScanInd->selfStaIdx = pReq->selfStaIdx;
11607 pWdiOBSSScanInd->fortyMHZIntolerent = pReq->fortyMHZIntolerent;
11608 pWdiOBSSScanInd->bssIdx = pReq->bssIdx;
11609 pWdiOBSSScanInd->currentOperatingClass = pReq->currentOperatingClass;
11610 pWdiOBSSScanInd->ieFieldLen = pReq->ieFieldLen;
11611
11612 vos_mem_copy(pWdiOBSSScanInd->ieField,
11613 pReq->ieField,
11614 pReq->ieFieldLen);
11615
11616 status = WDI_HT40OBSSScanInd(&wdiOBSSScanParams);
11617 if (WDI_STATUS_PENDING == status)
11618 {
11619 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11620 "Pending received for %s:%d ",__func__,__LINE__ );
11621 }
11622 else if (WDI_STATUS_SUCCESS_SYNC != status)
11623 {
11624 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11625 "Failure in %s:%d ",__func__,__LINE__ );
11626 }
11627 return CONVERT_WDI2VOS_STATUS(status) ;
11628}
11629/*
11630 * FUNCTION: WDA_ProcessHT40OBSSStopScanInd
11631 *
11632 * DESCRIPTION: This function sends stop OBSS scan inidcation message to WDI
11633 *
11634 * PARAM:
11635 * pWDA: pointer to WDA context
11636 * pReq: pointer to stop batch scan request
11637 */
11638VOS_STATUS WDA_ProcessHT40OBSSStopScanInd(tWDA_CbContext *pWDA,
11639 tANI_U8 *bssIdx)
11640{
11641 WDI_Status status;
11642
11643 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11644 "------> %s " ,__func__);
11645
11646 status = WDI_HT40OBSSStopScanInd(*bssIdx);
11647 if (WDI_STATUS_PENDING == status)
11648 {
11649 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11650 "Pending received for %s:%d ",__func__,__LINE__ );
11651 }
11652 else if (WDI_STATUS_SUCCESS_SYNC != status)
11653 {
11654 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11655 "Failure in %s:%d ",__func__,__LINE__ );
11656 }
11657 return CONVERT_WDI2VOS_STATUS(status) ;
11658}
Yue Mab9c86f42013-08-14 15:59:08 -070011659/*
Chittajit Mitraf5413a42013-10-18 14:20:08 -070011660 * FUNCTION: WDA_ProcessRateUpdateInd
11661 *
11662 */
11663VOS_STATUS WDA_ProcessRateUpdateInd(tWDA_CbContext *pWDA,
11664 tSirRateUpdateInd *pRateUpdateParams)
11665{
11666 WDI_Status wdiStatus;
11667 WDI_RateUpdateIndParams rateUpdateParams;
11668
11669 vos_mem_copy(rateUpdateParams.bssid,
11670 pRateUpdateParams->bssid, sizeof(tSirMacAddr));
11671
11672 rateUpdateParams.ucastDataRateTxFlag =
11673 pRateUpdateParams->ucastDataRateTxFlag;
11674 rateUpdateParams.reliableMcastDataRateTxFlag =
11675 pRateUpdateParams->reliableMcastDataRateTxFlag;
11676 rateUpdateParams.mcastDataRate24GHzTxFlag =
11677 pRateUpdateParams->mcastDataRate24GHzTxFlag;
11678 rateUpdateParams.mcastDataRate5GHzTxFlag =
11679 pRateUpdateParams->mcastDataRate5GHzTxFlag;
11680
11681 rateUpdateParams.ucastDataRate = pRateUpdateParams->ucastDataRate;
11682 rateUpdateParams.reliableMcastDataRate =
11683 pRateUpdateParams->reliableMcastDataRate;
11684 rateUpdateParams.mcastDataRate24GHz = pRateUpdateParams->mcastDataRate24GHz;
11685 rateUpdateParams.mcastDataRate5GHz = pRateUpdateParams->mcastDataRate5GHz;
11686
11687 rateUpdateParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
11688 rateUpdateParams.pUserData = pWDA;
11689
11690 wdiStatus = WDI_RateUpdateInd(&rateUpdateParams);
11691
11692 if (WDI_STATUS_PENDING == wdiStatus)
11693 {
11694 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11695 "Pending received for %s:%d", __func__, __LINE__ );
11696 }
11697 else if (WDI_STATUS_SUCCESS_SYNC != wdiStatus)
11698 {
11699 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11700 "Failure in %s:%d", __func__, __LINE__ );
11701 }
11702
11703 vos_mem_free(pRateUpdateParams);
11704
11705 return CONVERT_WDI2VOS_STATUS(wdiStatus);
11706}
11707
11708/*
Jeff Johnson295189b2012-06-20 16:38:30 -070011709 * -------------------------------------------------------------------------
11710 * DATA interface with WDI for Mgmt Frames
11711 * -------------------------------------------------------------------------
11712 */
Jeff Johnson295189b2012-06-20 16:38:30 -070011713/*
11714 * FUNCTION: WDA_TxComplete
11715 * Callback function for the WDA_TxPacket
11716 */
11717VOS_STATUS WDA_TxComplete( v_PVOID_t pVosContext, vos_pkt_t *pData,
11718 VOS_STATUS status )
11719{
11720
11721 tWDA_CbContext *wdaContext= (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
11722 tpAniSirGlobal pMac = (tpAniSirGlobal)VOS_GET_MAC_CTXT((void *)pVosContext) ;
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011723 tANI_U32 uUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070011724
11725 if(NULL == wdaContext)
11726 {
11727 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11728 "%s:pWDA is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011729 __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011730 VOS_ASSERT(0);
11731 return VOS_STATUS_E_FAILURE;
11732 }
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011733
11734 /*Check if frame was timed out or not*/
11735 vos_pkt_get_user_data_ptr( pData, VOS_PKT_USER_DATA_ID_WDA,
11736 (v_PVOID_t)&uUserData);
11737
11738 if ( WDA_TL_TX_MGMT_TIMED_OUT == uUserData )
11739 {
11740 /*Discard frame - no further processing is needed*/
11741 vos_pkt_return_packet(pData);
11742 return VOS_STATUS_SUCCESS;
11743 }
11744
Jeff Johnson295189b2012-06-20 16:38:30 -070011745 /*check whether the callback is null or not,made null during WDA_TL_TX_FRAME_TIMEOUT timeout*/
11746 if( NULL!=wdaContext->pTxCbFunc)
11747 {
11748 /*check if packet is freed already*/
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011749 if(vos_atomic_set((uintptr_t*)&wdaContext->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (uintptr_t)pData)
Jeff Johnson295189b2012-06-20 16:38:30 -070011750 {
11751 wdaContext->pTxCbFunc(pMac, pData);
11752 }
11753 else
11754 {
11755 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011756 "%s:packet (%p) is already freed",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011757 __func__, pData);
Jeff Johnson295189b2012-06-20 16:38:30 -070011758 //Return from here since we reaching here because the packet already timeout
11759 return status;
11760 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011761 }
11762
11763 /*
11764 * Trigger the event to bring the HAL TL Tx complete function to come
11765 * out of wait
11766 * Let the coe above to complete the packet first. When this event is set,
11767 * the thread waiting for the event may run and set Vospacket_freed causing the original
11768 * packet not being freed.
11769 */
11770 status = vos_event_set(&wdaContext->txFrameEvent);
11771 if(!VOS_IS_STATUS_SUCCESS(status))
11772 {
11773 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011774 "NEW VOS Event Set failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011775 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011776 return status;
11777}
Jeff Johnson295189b2012-06-20 16:38:30 -070011778/*
11779 * FUNCTION: WDA_TxPacket
11780 * Forward TX management frame to WDI
11781 */
11782VOS_STATUS WDA_TxPacket(tWDA_CbContext *pWDA,
11783 void *pFrmBuf,
11784 tANI_U16 frmLen,
11785 eFrameType frmType,
11786 eFrameTxDir txDir,
11787 tANI_U8 tid,
11788 pWDATxRxCompFunc pCompFunc,
11789 void *pData,
11790 pWDAAckFnTxComp pAckTxComp,
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +053011791 tANI_U32 txFlag)
Jeff Johnson295189b2012-06-20 16:38:30 -070011792{
11793 VOS_STATUS status = VOS_STATUS_SUCCESS ;
11794 tpSirMacFrameCtl pFc = (tpSirMacFrameCtl ) pData;
11795 tANI_U8 ucTypeSubType = pFc->type <<4 | pFc->subType;
11796 tANI_U8 eventIdx = 0;
11797 tBssSystemRole systemRole = eSYSTEM_UNKNOWN_ROLE;
11798 tpAniSirGlobal pMac;
Jeff Johnson295189b2012-06-20 16:38:30 -070011799 if((NULL == pWDA)||(NULL == pFrmBuf))
11800 {
11801 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Gopichand Nakkala66c0bd02013-04-10 11:36:29 +053011802 "%s:pWDA %p or pFrmBuf %p is NULL",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011803 __func__,pWDA,pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011804 VOS_ASSERT(0);
11805 return VOS_STATUS_E_FAILURE;
11806 }
11807
11808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011809 "Tx Mgmt Frame Subtype: %d alloc(%p)", pFc->subType, pFrmBuf);
Jeff Johnson295189b2012-06-20 16:38:30 -070011810 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
11811 if(NULL == pMac)
11812 {
11813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011814 "%s:pMac is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070011815 VOS_ASSERT(0);
11816 return VOS_STATUS_E_FAILURE;
11817 }
11818
11819
11820
11821 /* store the call back function in WDA context */
11822 pWDA->pTxCbFunc = pCompFunc;
11823 /* store the call back for the function of ackTxComplete */
11824 if( pAckTxComp )
11825 {
Jeff Johnsone7245742012-09-05 17:12:55 -070011826 if( NULL != pWDA->pAckTxCbFunc )
11827 {
11828 /* Already TxComp is active no need to active again */
11829 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011830 "There is already one request pending for tx complete");
Jeff Johnsone7245742012-09-05 17:12:55 -070011831 pWDA->pAckTxCbFunc( pMac, 0);
11832 pWDA->pAckTxCbFunc = NULL;
Jeff Johnson295189b2012-06-20 16:38:30 -070011833
Jeff Johnsone7245742012-09-05 17:12:55 -070011834 if( VOS_STATUS_SUCCESS !=
11835 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11836 {
11837 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11838 "Tx Complete timeout Timer Stop Failed ");
11839 }
11840 else
11841 {
11842 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnsonfeddb2d2012-12-10 14:41:22 -080011843 "Tx Complete timeout Timer Stop Success ");
Jeff Johnsone7245742012-09-05 17:12:55 -070011844 }
11845 }
11846
11847 txFlag |= HAL_TXCOMP_REQUESTED_MASK;
11848 pWDA->pAckTxCbFunc = pAckTxComp;
11849 if( VOS_STATUS_SUCCESS !=
11850 WDA_START_TIMER(&pWDA->wdaTimers.TxCompleteTimer) )
11851 {
11852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
11853 "Tx Complete Timer Start Failed ");
11854 pWDA->pAckTxCbFunc = NULL;
11855 return eHAL_STATUS_FAILURE;
11856 }
11857 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011858 /* Reset the event to be not signalled */
11859 status = vos_event_reset(&pWDA->txFrameEvent);
11860 if(!VOS_IS_STATUS_SUCCESS(status))
11861 {
11862 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011863 "VOS Event reset failed - status = %d",status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011864 pCompFunc(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf);
11865 if( pAckTxComp )
11866 {
11867 pWDA->pAckTxCbFunc = NULL;
11868 if( VOS_STATUS_SUCCESS !=
11869 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11870 {
11871 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11872 "Tx Complete timeout Timer Stop Failed ");
11873 }
11874 }
11875 return VOS_STATUS_E_FAILURE;
11876 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011877
11878 /* If Peer Sta mask is set don't overwrite to self sta */
11879 if(txFlag & HAL_USE_PEER_STA_REQUESTED_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -070011880 {
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011881 txFlag &= ~HAL_USE_PEER_STA_REQUESTED_MASK;
Jeff Johnson295189b2012-06-20 16:38:30 -070011882 }
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011883 else
11884 {
Ganesh K08bce952012-12-13 15:04:41 -080011885 /* Get system role, use the self station if in unknown role or STA role */
11886 systemRole = wdaGetGlobalSystemRole(pMac);
11887 if (( eSYSTEM_UNKNOWN_ROLE == systemRole ) ||
11888 (( eSYSTEM_STA_ROLE == systemRole )
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080011889#if defined FEATURE_WLAN_ESE || defined FEATURE_WLAN_TDLS
Ganesh K08bce952012-12-13 15:04:41 -080011890 && frmType == HAL_TXRX_FRM_802_11_MGMT
Madan Mohan Koyyalamudi7ff89c12012-11-28 15:50:13 -080011891#endif
Ganesh K08bce952012-12-13 15:04:41 -080011892 ))
11893 {
11894 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
11895 }
Madan Mohan Koyyalamudi0d40e662012-12-07 14:24:14 -080011896 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011897
Jeff Johnsone7245742012-09-05 17:12:55 -070011898 /* Divert Disassoc/Deauth frames thru self station, as by the time unicast
11899 disassoc frame reaches the HW, HAL has already deleted the peer station */
11900 if ((pFc->type == SIR_MAC_MGMT_FRAME))
Jeff Johnson295189b2012-06-20 16:38:30 -070011901 {
Madan Mohan Koyyalamudi521ff192012-11-15 17:13:08 -080011902 if ((pFc->subType == SIR_MAC_MGMT_REASSOC_RSP) ||
Jeff Johnsone7245742012-09-05 17:12:55 -070011903 (pFc->subType == SIR_MAC_MGMT_PROBE_REQ))
Jeff Johnson295189b2012-06-20 16:38:30 -070011904 {
Jeff Johnson295189b2012-06-20 16:38:30 -070011905 /*Send Probe request frames on self sta idx*/
11906 txFlag |= HAL_USE_SELF_STA_REQUESTED_MASK;
Jeff Johnsone7245742012-09-05 17:12:55 -070011907 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011908 /* Since we donot want probe responses to be retried, send probe responses
11909 through the NO_ACK queues */
11910 if (pFc->subType == SIR_MAC_MGMT_PROBE_RSP)
11911 {
11912 //probe response is sent out using self station and no retries options.
11913 txFlag |= (HAL_USE_NO_ACK_REQUESTED_MASK | HAL_USE_SELF_STA_REQUESTED_MASK);
11914 }
11915 if(VOS_TRUE == pWDA->wdaAmpSessionOn)
11916 {
11917 txFlag |= HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME;
11918 }
11919 }
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011920 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)pFrmBuf);/*set VosPacket_freed to pFrmBuf*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011921
11922 /*Set frame tag to 0
11923 We will use the WDA user data in order to tag a frame as expired*/
11924 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11925 (v_PVOID_t)0);
11926
11927
11928 if((status = WLANTL_TxMgmtFrm(pWDA->pVosContext, (vos_pkt_t *)pFrmBuf,
11929 frmLen, ucTypeSubType, tid,
11930 WDA_TxComplete, NULL, txFlag)) != VOS_STATUS_SUCCESS)
11931 {
11932 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080011933 "Sending Mgmt Frame failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011934 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011935 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (v_U32_t)WDA_TX_PACKET_FREED);/*reset the VosPacket_freed*/
Jeff Johnson295189b2012-06-20 16:38:30 -070011936 if( pAckTxComp )
11937 {
11938 pWDA->pAckTxCbFunc = NULL;
11939 if( VOS_STATUS_SUCCESS !=
11940 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11941 {
11942 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11943 "Tx Complete timeout Timer Stop Failed ");
11944 }
11945 }
11946 return VOS_STATUS_E_FAILURE;
11947 }
Jeff Johnson295189b2012-06-20 16:38:30 -070011948 /*
11949 * Wait for the event to be set by the TL, to get the response of TX
11950 * complete, this event should be set by the Callback function called by TL
11951 */
11952 status = vos_wait_events(&pWDA->txFrameEvent, 1, WDA_TL_TX_FRAME_TIMEOUT,
11953 &eventIdx);
11954 if(!VOS_IS_STATUS_SUCCESS(status))
11955 {
11956 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11957 "%s: Status %d when waiting for TX Frame Event",
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070011958 __func__, status);
Jeff Johnson295189b2012-06-20 16:38:30 -070011959 pWDA->pTxCbFunc = NULL; /*To stop the limTxComplete being called again ,
11960 after the packet gets completed(packet freed once)*/
11961
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011962 /* TX MGMT fail with COMP timeout, try to detect DXE stall */
Mihir Shete40a55652014-03-02 14:14:47 +053011963 WDA_TransportChannelDebug(pMac, 1, WPAL_DEBUG_TX_DESC_RESYNC);
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070011964
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011965 /*Tag Frame as timed out for later deletion*/
11966 vos_pkt_set_user_data_ptr( (vos_pkt_t *)pFrmBuf, VOS_PKT_USER_DATA_ID_WDA,
11967 (v_PVOID_t)WDA_TL_TX_MGMT_TIMED_OUT);
11968
Jeff Johnson295189b2012-06-20 16:38:30 -070011969 /* check whether the packet was freed already,so need not free again when
11970 * TL calls the WDA_Txcomplete routine
11971 */
Arun Kumar Khandavalli4f8f3f22014-02-07 17:50:12 +053011972 vos_atomic_set((uintptr_t*)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED);
11973 /*if(vos_atomic_set(uintptr_t *)&pWDA->VosPacketToFree, (uintptr_t)WDA_TX_PACKET_FREED) == (v_U32_t)pFrmBuf)
Jeff Johnson295189b2012-06-20 16:38:30 -070011974 {
11975 pCompFunc(VOS_GET_MAC_CTXT(pWDA->pVosContext), (vos_pkt_t *)pFrmBuf);
Madan Mohan Koyyalamudi85cc1d72012-10-30 18:28:37 -070011976 } */
11977
Jeff Johnson295189b2012-06-20 16:38:30 -070011978 if( pAckTxComp )
11979 {
11980 pWDA->pAckTxCbFunc = NULL;
11981 if( VOS_STATUS_SUCCESS !=
11982 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
11983 {
11984 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11985 "Tx Complete timeout Timer Stop Failed ");
11986 }
11987 }
11988 status = VOS_STATUS_E_FAILURE;
11989 }
Madan Mohan Koyyalamudi99af06e2013-08-08 02:17:17 +053011990#ifdef WLAN_DUMP_MGMTFRAMES
11991 if (VOS_IS_STATUS_SUCCESS(status))
11992 {
11993 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11994 "%s() TX packet : SubType %d", __func__,pFc->subType);
11995 VOS_TRACE_HEX_DUMP( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
11996 pData, frmLen);
11997 }
11998#endif
11999
Tushnim Bhattacharyya8506f262014-01-30 12:08:37 -080012000 if (VOS_IS_STATUS_SUCCESS(status))
12001 {
12002 if (pMac->fEnableDebugLog & 0x1)
12003 {
12004 if ((pFc->type == SIR_MAC_MGMT_FRAME) &&
12005 (pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
12006 (pFc->subType != SIR_MAC_MGMT_PROBE_RSP))
12007 {
12008 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "TX MGMT - Type %hu, SubType %hu",
12009 pFc->type, pFc->subType);
12010 }
12011 }
12012 }
12013
12014
Jeff Johnson295189b2012-06-20 16:38:30 -070012015 return status;
12016}
Jeff Johnson295189b2012-06-20 16:38:30 -070012017/*
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012018 * FUNCTION: WDA_ProcessDHCPStartInd
12019 * Forward DHCP Start to WDI
12020 */
12021static VOS_STATUS WDA_ProcessDHCPStartInd (tWDA_CbContext *pWDA,
12022 tAniDHCPInd *dhcpStartInd)
12023{
12024 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012025 WDI_DHCPInd wdiDHCPInd;
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012026
c_hpothu0b0cab72014-02-13 21:52:40 +053012027 wdiDHCPInd.device_mode = dhcpStartInd->device_mode;
12028 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStartInd->macAddr,
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012029 sizeof(tSirMacAddr));
12030
c_hpothu0b0cab72014-02-13 21:52:40 +053012031 status = WDI_dhcpStartInd(&wdiDHCPInd);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012032
c_hpothu0b0cab72014-02-13 21:52:40 +053012033 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012034 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012035 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12036 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012037 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012038 else if (WDI_STATUS_SUCCESS_SYNC != status)
12039 {
12040 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12041 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
12042 }
12043
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012044 vos_mem_free(dhcpStartInd);
12045 return CONVERT_WDI2VOS_STATUS(status) ;
12046}
12047
12048 /*
12049 * FUNCTION: WDA_ProcessDHCPStopInd
12050 * Forward DHCP Stop to WDI
12051 */
12052 static VOS_STATUS WDA_ProcessDHCPStopInd (tWDA_CbContext *pWDA,
12053 tAniDHCPInd *dhcpStopInd)
12054 {
12055 WDI_Status status;
c_hpothu0b0cab72014-02-13 21:52:40 +053012056 WDI_DHCPInd wdiDHCPInd;
12057
12058 wdiDHCPInd.device_mode = dhcpStopInd->device_mode;
12059 vos_mem_copy(wdiDHCPInd.macAddr, dhcpStopInd->macAddr, sizeof(tSirMacAddr));
12060
12061 status = WDI_dhcpStopInd(&wdiDHCPInd);
12062
12063 if (WDI_STATUS_PENDING == status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012064 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012065 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12066 "Pending received for %s:%d ",__func__,__LINE__ );
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012067 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012068 else if (WDI_STATUS_SUCCESS_SYNC != status)
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012069 {
c_hpothu0b0cab72014-02-13 21:52:40 +053012070 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12071 "Failure status: %d in %s:%d ", status, __func__, __LINE__);
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012072 }
c_hpothu0b0cab72014-02-13 21:52:40 +053012073
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012074 vos_mem_free(dhcpStopInd);
c_hpothu0b0cab72014-02-13 21:52:40 +053012075
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012076 return CONVERT_WDI2VOS_STATUS(status) ;
12077 }
12078
12079/*
Jeff Johnson295189b2012-06-20 16:38:30 -070012080 * FUNCTION: WDA_McProcessMsg
12081 * Trigger DAL-AL to start CFG download
12082 */
12083VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg )
12084{
12085 VOS_STATUS status = VOS_STATUS_SUCCESS;
12086 tWDA_CbContext *pWDA = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012087 if(NULL == pMsg)
12088 {
12089 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012090 "%s:pMsg is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012091 VOS_ASSERT(0);
12092 return VOS_STATUS_E_FAILURE;
12093 }
12094
12095 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012096 "=========> %s msgType: %x " ,__func__, pMsg->type);
Jeff Johnson295189b2012-06-20 16:38:30 -070012097
12098 pWDA = (tWDA_CbContext *)vos_get_context( VOS_MODULE_ID_WDA, pVosContext );
12099 if(NULL == pWDA )
12100 {
12101 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012102 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012103 VOS_ASSERT(0);
Madan Mohan Koyyalamudi1bed5982012-10-22 14:38:06 -070012104 vos_mem_free(pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012105 return VOS_STATUS_E_FAILURE;
12106 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012107 /* Process all the WDA messages.. */
12108 switch( pMsg->type )
12109 {
12110 case WNI_CFG_DNLD_REQ:
12111 {
12112 status = WDA_WniCfgDnld(pWDA);
Jeff Johnson295189b2012-06-20 16:38:30 -070012113 /* call WDA complete event if config download success */
12114 if( VOS_IS_STATUS_SUCCESS(status) )
12115 {
12116 vos_WDAComplete_cback(pVosContext);
12117 }
12118 else
12119 {
12120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12121 "WDA Config Download failure" );
12122 }
12123 break ;
12124 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012125 /*
12126 * Init SCAN request from PE, convert it into DAL format
12127 * and send it to DAL
12128 */
12129 case WDA_INIT_SCAN_REQ:
12130 {
12131 WDA_ProcessInitScanReq(pWDA, (tInitScanParams *)pMsg->bodyptr) ;
12132 break ;
12133 }
12134 /* start SCAN request from PE */
12135 case WDA_START_SCAN_REQ:
12136 {
12137 WDA_ProcessStartScanReq(pWDA, (tStartScanParams *)pMsg->bodyptr) ;
12138 break ;
12139 }
12140 /* end SCAN request from PE */
12141 case WDA_END_SCAN_REQ:
12142 {
12143 WDA_ProcessEndScanReq(pWDA, (tEndScanParams *)pMsg->bodyptr) ;
12144 break ;
12145 }
12146 /* end SCAN request from PE */
12147 case WDA_FINISH_SCAN_REQ:
12148 {
12149 WDA_ProcessFinishScanReq(pWDA, (tFinishScanParams *)pMsg->bodyptr) ;
12150 break ;
12151 }
12152 /* join request from PE */
12153 case WDA_CHNL_SWITCH_REQ:
12154 {
12155 if(WDA_PRE_ASSOC_STATE == pWDA->wdaState)
12156 {
12157 WDA_ProcessJoinReq(pWDA, (tSwitchChannelParams *)pMsg->bodyptr) ;
12158 }
12159 else
12160 {
Kalikinkar dhara1e83b772014-02-06 12:59:22 -080012161 if (IS_FEATURE_SUPPORTED_BY_FW(CH_SWITCH_V1) &&
12162 eHAL_CHANNEL_SWITCH_SOURCE_CSA ==
12163 ((tSwitchChannelParams*)pMsg->bodyptr)->channelSwitchSrc )
12164 {
12165 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12166 "call ProcessChannelSwitchReq_V1" );
12167 WDA_ProcessChannelSwitchReq_V1(pWDA,
12168 (tSwitchChannelParams*)pMsg->bodyptr) ;
12169 }
12170 else
12171 {
12172 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12173 "call ProcessChannelSwitchReq" );
12174 WDA_ProcessChannelSwitchReq(pWDA,
12175 (tSwitchChannelParams*)pMsg->bodyptr) ;
12176 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012177 }
12178 break ;
12179 }
12180 /* ADD BSS request from PE */
12181 case WDA_ADD_BSS_REQ:
12182 {
12183 WDA_ProcessConfigBssReq(pWDA, (tAddBssParams*)pMsg->bodyptr) ;
12184 break ;
12185 }
12186 case WDA_ADD_STA_REQ:
12187 {
12188 WDA_ProcessAddStaReq(pWDA, (tAddStaParams *)pMsg->bodyptr) ;
12189 break ;
12190 }
12191 case WDA_DELETE_BSS_REQ:
12192 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012193 WDA_ProcessDelBssReq(pWDA, (tDeleteBssParams *)pMsg->bodyptr) ;
12194 break ;
12195 }
12196 case WDA_DELETE_STA_REQ:
12197 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012198 WDA_ProcessDelStaReq(pWDA, (tDeleteStaParams *)pMsg->bodyptr) ;
12199 break ;
12200 }
12201 case WDA_CONFIG_PARAM_UPDATE_REQ:
12202 {
12203 WDA_UpdateCfg(pWDA, (tSirMsgQ *)pMsg) ;
12204 break ;
12205 }
12206 case WDA_SET_BSSKEY_REQ:
12207 {
12208 WDA_ProcessSetBssKeyReq(pWDA, (tSetBssKeyParams *)pMsg->bodyptr);
12209 break ;
12210 }
12211 case WDA_SET_STAKEY_REQ:
12212 {
12213 WDA_ProcessSetStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12214 break ;
12215 }
12216 case WDA_SET_STA_BCASTKEY_REQ:
12217 {
12218 WDA_ProcessSetBcastStaKeyReq(pWDA, (tSetStaKeyParams *)pMsg->bodyptr);
12219 break ;
12220 }
12221 case WDA_REMOVE_BSSKEY_REQ:
12222 {
12223 WDA_ProcessRemoveBssKeyReq(pWDA,
12224 (tRemoveBssKeyParams *)pMsg->bodyptr);
12225 break ;
12226 }
12227 case WDA_REMOVE_STAKEY_REQ:
12228 {
12229 WDA_ProcessRemoveStaKeyReq(pWDA,
12230 (tRemoveStaKeyParams *)pMsg->bodyptr);
12231 break ;
12232 }
12233 case WDA_REMOVE_STA_BCASTKEY_REQ:
12234 {
12235 /* TODO: currently UMAC is not sending this request, Add the code for
12236 handling this request when UMAC supports */
12237 break;
12238 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012239#ifdef FEATURE_WLAN_ESE
Jeff Johnson295189b2012-06-20 16:38:30 -070012240 case WDA_TSM_STATS_REQ:
12241 {
Srinivas Girigowda5cecb202013-10-08 09:13:25 -070012242 WDA_ProcessTsmStatsReq(pWDA, (tpAniGetTsmStatsReq)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012243 break;
12244 }
12245#endif
12246 case WDA_UPDATE_EDCA_PROFILE_IND:
12247 {
12248 WDA_ProcessUpdateEDCAParamReq(pWDA, (tEdcaParams *)pMsg->bodyptr);
12249 break;
12250 }
12251 case WDA_ADD_TS_REQ:
12252 {
12253 WDA_ProcessAddTSReq(pWDA, (tAddTsParams *)pMsg->bodyptr);
12254 break;
12255 }
12256 case WDA_DEL_TS_REQ:
12257 {
12258 WDA_ProcessDelTSReq(pWDA, (tDelTsParams *)pMsg->bodyptr);
12259 break;
12260 }
12261 case WDA_ADDBA_REQ:
12262 {
12263 WDA_ProcessAddBASessionReq(pWDA, (tAddBAParams *)pMsg->bodyptr);
12264 break;
12265 }
12266 case WDA_DELBA_IND:
12267 {
12268 WDA_ProcessDelBAReq(pWDA, (tDelBAParams *)pMsg->bodyptr);
12269 break;
12270 }
Manjunathappa Prakash86f78ca2014-02-10 18:09:15 -080012271 case WDA_UPDATE_CHAN_LIST_REQ:
12272 {
12273 WDA_ProcessUpdateChannelList(pWDA,
12274 (tSirUpdateChanList *)pMsg->bodyptr);
12275 break;
12276 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012277 case WDA_SET_LINK_STATE:
12278 {
12279 WDA_ProcessSetLinkState(pWDA, (tLinkStateParams *)pMsg->bodyptr);
12280 break;
12281 }
12282 case WDA_GET_STATISTICS_REQ:
12283 {
12284 WDA_ProcessGetStatsReq(pWDA, (tAniGetPEStatsReq *)pMsg->bodyptr);
12285 break;
12286 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012287#if defined WLAN_FEATURE_VOWIFI_11R || defined FEATURE_WLAN_ESE || defined(FEATURE_WLAN_LFR)
Srinivas Girigowdad34cedb2013-01-25 13:33:11 -080012288 case WDA_GET_ROAM_RSSI_REQ:
12289 {
12290 WDA_ProcessGetRoamRssiReq(pWDA, (tAniGetRssiReq *)pMsg->bodyptr);
12291 break;
12292 }
12293#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012294 case WDA_PWR_SAVE_CFG:
12295 {
12296 if(pWDA->wdaState == WDA_READY_STATE)
12297 {
12298 WDA_ProcessSetPwrSaveCfgReq(pWDA, (tSirPowerSaveCfg *)pMsg->bodyptr);
12299 }
12300 else
12301 {
12302 if(NULL != pMsg->bodyptr)
12303 {
12304 vos_mem_free(pMsg->bodyptr);
12305 }
12306 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12307 "WDA_PWR_SAVE_CFG req in wrong state %d", pWDA->wdaState );
12308 }
12309 break;
12310 }
12311 case WDA_ENTER_IMPS_REQ:
12312 {
12313 if(pWDA->wdaState == WDA_READY_STATE)
12314 {
12315 WDA_ProcessEnterImpsReq(pWDA);
12316 }
12317 else
12318 {
12319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12320 "WDA_ENTER_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12321 }
12322 break;
12323 }
12324 case WDA_EXIT_IMPS_REQ:
12325 {
12326 if(pWDA->wdaState == WDA_READY_STATE)
12327 {
12328 WDA_ProcessExitImpsReq(pWDA);
12329 }
12330 else
12331 {
12332 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12333 "WDA_EXIT_IMPS_REQ req in wrong state %d", pWDA->wdaState );
12334 }
12335 break;
12336 }
12337 case WDA_ENTER_BMPS_REQ:
12338 {
12339 if(pWDA->wdaState == WDA_READY_STATE)
12340 {
12341 WDA_ProcessEnterBmpsReq(pWDA, (tEnterBmpsParams *)pMsg->bodyptr);
12342 }
12343 else
12344 {
12345 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12346 "WDA_ENTER_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12347 }
12348 break;
12349 }
12350 case WDA_EXIT_BMPS_REQ:
12351 {
12352 if(pWDA->wdaState == WDA_READY_STATE)
12353 {
12354 WDA_ProcessExitBmpsReq(pWDA, (tExitBmpsParams *)pMsg->bodyptr);
12355 }
12356 else
12357 {
12358 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12359 "WDA_EXIT_BMPS_REQ req in wrong state %d", pWDA->wdaState );
12360 }
12361 break;
12362 }
12363 case WDA_ENTER_UAPSD_REQ:
12364 {
12365 if(pWDA->wdaState == WDA_READY_STATE)
12366 {
12367 WDA_ProcessEnterUapsdReq(pWDA, (tUapsdParams *)pMsg->bodyptr);
12368 }
12369 else
12370 {
12371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12372 "WDA_ENTER_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12373 }
12374 break;
12375 }
12376 case WDA_EXIT_UAPSD_REQ:
12377 {
12378 if(pWDA->wdaState == WDA_READY_STATE)
12379 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012380 WDA_ProcessExitUapsdReq(pWDA, (tExitUapsdParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012381 }
12382 else
12383 {
12384 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12385 "WDA_EXIT_UAPSD_REQ req in wrong state %d", pWDA->wdaState );
12386 }
12387 break;
12388 }
12389 case WDA_UPDATE_UAPSD_IND:
12390 {
12391 if(pWDA->wdaState == WDA_READY_STATE)
12392 {
12393 WDA_UpdateUapsdParamsReq(pWDA, (tUpdateUapsdParams *)pMsg->bodyptr);
12394 }
12395 else
12396 {
12397 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12398 "WDA_UPDATE_UAPSD_IND req in wrong state %d", pWDA->wdaState );
12399 }
12400 break;
12401 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012402 case WDA_REGISTER_PE_CALLBACK :
12403 {
12404 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12405 "Handling msg type WDA_REGISTER_PE_CALLBACK " );
12406 /*TODO: store the PE callback */
12407 /* Do Nothing? MSG Body should be freed at here */
12408 if(NULL != pMsg->bodyptr)
12409 {
12410 vos_mem_free(pMsg->bodyptr);
12411 }
12412 break;
12413 }
12414 case WDA_SYS_READY_IND :
12415 {
12416 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12417 "Handling msg type WDA_SYS_READY_IND " );
12418 pWDA->wdaState = WDA_READY_STATE;
12419 if(NULL != pMsg->bodyptr)
12420 {
12421 vos_mem_free(pMsg->bodyptr);
12422 }
12423 break;
12424 }
12425 case WDA_BEACON_FILTER_IND :
12426 {
12427 WDA_SetBeaconFilterReq(pWDA, (tBeaconFilterMsg *)pMsg->bodyptr);
12428 break;
12429 }
12430 case WDA_BTC_SET_CFG:
12431 {
12432 /*TODO: handle this while dealing with BTC */
12433 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12434 "Handling msg type WDA_BTC_SET_CFG " );
12435 /* Do Nothing? MSG Body should be freed at here */
12436 if(NULL != pMsg->bodyptr)
12437 {
12438 vos_mem_free(pMsg->bodyptr);
12439 }
12440 break;
12441 }
12442 case WDA_SIGNAL_BT_EVENT:
12443 {
12444 /*TODO: handle this while dealing with BTC */
12445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
12446 "Handling msg type WDA_SIGNAL_BT_EVENT " );
12447 /* Do Nothing? MSG Body should be freed at here */
12448 if(NULL != pMsg->bodyptr)
12449 {
12450 vos_mem_free(pMsg->bodyptr);
12451 }
12452 break;
12453 }
12454 case WDA_CFG_RXP_FILTER_REQ:
12455 {
12456 WDA_ProcessConfigureRxpFilterReq(pWDA,
12457 (tSirWlanSetRxpFilters *)pMsg->bodyptr);
12458 break;
12459 }
12460 case WDA_SET_HOST_OFFLOAD:
12461 {
12462 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12463 break;
12464 }
12465 case WDA_SET_KEEP_ALIVE:
12466 {
12467 WDA_ProcessKeepAliveReq(pWDA, (tSirKeepAliveReq *)pMsg->bodyptr);
12468 break;
12469 }
12470#ifdef WLAN_NS_OFFLOAD
12471 case WDA_SET_NS_OFFLOAD:
12472 {
12473 WDA_ProcessHostOffloadReq(pWDA, (tSirHostOffloadReq *)pMsg->bodyptr);
12474 break;
12475 }
12476#endif //WLAN_NS_OFFLOAD
12477 case WDA_ADD_STA_SELF_REQ:
12478 {
12479 WDA_ProcessAddStaSelfReq(pWDA, (tAddStaSelfParams *)pMsg->bodyptr);
12480 break;
12481 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012482 case WDA_DEL_STA_SELF_REQ:
12483 {
12484 WDA_ProcessDelSTASelfReq(pWDA, (tDelStaSelfParams *)pMsg->bodyptr);
12485 break;
12486 }
12487 case WDA_WOWL_ADD_BCAST_PTRN:
12488 {
12489 WDA_ProcessWowlAddBcPtrnReq(pWDA, (tSirWowlAddBcastPtrn *)pMsg->bodyptr);
12490 break;
12491 }
12492 case WDA_WOWL_DEL_BCAST_PTRN:
12493 {
12494 WDA_ProcessWowlDelBcPtrnReq(pWDA, (tSirWowlDelBcastPtrn *)pMsg->bodyptr);
12495 break;
12496 }
12497 case WDA_WOWL_ENTER_REQ:
12498 {
12499 WDA_ProcessWowlEnterReq(pWDA, (tSirHalWowlEnterParams *)pMsg->bodyptr);
12500 break;
12501 }
12502 case WDA_WOWL_EXIT_REQ:
12503 {
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070012504 WDA_ProcessWowlExitReq(pWDA, (tSirHalWowlExitParams *)pMsg->bodyptr);
Jeff Johnson295189b2012-06-20 16:38:30 -070012505 break;
12506 }
12507 case WDA_TL_FLUSH_AC_REQ:
12508 {
12509 WDA_ProcessFlushAcReq(pWDA, (tFlushACReq *)pMsg->bodyptr);
12510 break;
12511 }
12512 case WDA_SIGNAL_BTAMP_EVENT:
12513 {
12514 WDA_ProcessBtAmpEventReq(pWDA, (tSmeBtAmpEvent *)pMsg->bodyptr);
12515 break;
12516 }
12517#ifdef WDA_UT
12518 case WDA_WDI_EVENT_MSG:
12519 {
12520 WDI_processEvent(pMsg->bodyptr,(void *)pMsg->bodyval);
12521 break ;
12522 }
12523#endif
12524 case WDA_UPDATE_BEACON_IND:
12525 {
12526 WDA_ProcessUpdateBeaconParams(pWDA,
12527 (tUpdateBeaconParams *)pMsg->bodyptr);
12528 break;
12529 }
12530 case WDA_SEND_BEACON_REQ:
12531 {
12532 WDA_ProcessSendBeacon(pWDA, (tSendbeaconParams *)pMsg->bodyptr);
12533 break;
12534 }
12535 case WDA_UPDATE_PROBE_RSP_TEMPLATE_IND:
12536 {
12537 WDA_ProcessUpdateProbeRspTemplate(pWDA,
12538 (tSendProbeRespParams *)pMsg->bodyptr);
12539 break;
12540 }
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080012541#if defined(WLAN_FEATURE_VOWIFI) || defined(FEATURE_WLAN_ESE)
Jeff Johnson295189b2012-06-20 16:38:30 -070012542 case WDA_SET_MAX_TX_POWER_REQ:
12543 {
12544 WDA_ProcessSetMaxTxPowerReq(pWDA,
12545 (tMaxTxPowerParams *)pMsg->bodyptr);
12546 break;
12547 }
12548#endif
Arif Hussaina5ebce02013-08-09 15:09:58 -070012549 case WDA_SET_MAX_TX_POWER_PER_BAND_REQ:
12550 {
12551 WDA_ProcessSetMaxTxPowerPerBandReq(pWDA, (tMaxTxPowerPerBandParams *)
12552 pMsg->bodyptr);
12553 break;
12554 }
schang86c22c42013-03-13 18:41:24 -070012555 case WDA_SET_TX_POWER_REQ:
12556 {
12557 WDA_ProcessSetTxPowerReq(pWDA,
12558 (tSirSetTxPowerReq *)pMsg->bodyptr);
12559 break;
12560 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012561 case WDA_SET_P2P_GO_NOA_REQ:
12562 {
12563 WDA_ProcessSetP2PGONOAReq(pWDA,
12564 (tP2pPsParams *)pMsg->bodyptr);
12565 break;
12566 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012567 /* timer related messages */
12568 case WDA_TIMER_BA_ACTIVITY_REQ:
12569 {
12570 WDA_BaCheckActivity(pWDA) ;
12571 break ;
12572 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080012573
12574 /* timer related messages */
12575 case WDA_TIMER_TRAFFIC_STATS_IND:
12576 {
12577 WDA_TimerTrafficStatsInd(pWDA);
12578 break;
12579 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012580#ifdef WLAN_FEATURE_VOWIFI_11R
12581 case WDA_AGGR_QOS_REQ:
12582 {
12583 WDA_ProcessAggrAddTSReq(pWDA, (tAggrAddTsParams *)pMsg->bodyptr);
12584 break;
12585 }
12586#endif /* WLAN_FEATURE_VOWIFI_11R */
Jeff Johnson295189b2012-06-20 16:38:30 -070012587 case WDA_FTM_CMD_REQ:
12588 {
12589 WDA_ProcessFTMCommand(pWDA, (tPttMsgbuffer *)pMsg->bodyptr) ;
12590 break ;
12591 }
Jeff Johnsone7245742012-09-05 17:12:55 -070012592#ifdef FEATURE_OEM_DATA_SUPPORT
12593 case WDA_START_OEM_DATA_REQ:
12594 {
12595 WDA_ProcessStartOemDataReq(pWDA, (tStartOemDataReq *)pMsg->bodyptr) ;
12596 break;
12597 }
12598#endif /* FEATURE_OEM_DATA_SUPPORT */
Jeff Johnson295189b2012-06-20 16:38:30 -070012599 /* Tx Complete Time out Indication */
12600 case WDA_TX_COMPLETE_TIMEOUT_IND:
12601 {
12602 WDA_ProcessTxCompleteTimeOutInd(pWDA);
12603 break;
12604 }
12605 case WDA_WLAN_SUSPEND_IND:
12606 {
12607 WDA_ProcessWlanSuspendInd(pWDA,
12608 (tSirWlanSuspendParam *)pMsg->bodyptr) ;
12609 break;
12610 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012611 case WDA_WLAN_RESUME_REQ:
12612 {
12613 WDA_ProcessWlanResumeReq(pWDA,
12614 (tSirWlanResumeParam *)pMsg->bodyptr) ;
12615 break;
12616 }
12617
12618 case WDA_UPDATE_CF_IND:
12619 {
12620 vos_mem_free((v_VOID_t*)pMsg->bodyptr);
12621 pMsg->bodyptr = NULL;
12622 break;
12623 }
12624#ifdef FEATURE_WLAN_SCAN_PNO
12625 case WDA_SET_PNO_REQ:
12626 {
12627 WDA_ProcessSetPrefNetworkReq(pWDA, (tSirPNOScanReq *)pMsg->bodyptr);
12628 break;
12629 }
12630 case WDA_UPDATE_SCAN_PARAMS_REQ:
12631 {
12632 WDA_ProcessUpdateScanParams(pWDA, (tSirUpdateScanParams *)pMsg->bodyptr);
12633 break;
12634 }
12635 case WDA_SET_RSSI_FILTER_REQ:
12636 {
12637 WDA_ProcessSetRssiFilterReq(pWDA, (tSirSetRSSIFilterReq *)pMsg->bodyptr);
12638 break;
12639 }
12640#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012641#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012642 case WDA_ROAM_SCAN_OFFLOAD_REQ:
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012643 {
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070012644 WDA_ProcessRoamScanOffloadReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070012645 break;
12646 }
12647#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012648 case WDA_SET_TX_PER_TRACKING_REQ:
12649 {
12650 WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
12651 break;
12652 }
12653
12654#ifdef WLAN_FEATURE_PACKET_FILTERING
12655 case WDA_8023_MULTICAST_LIST_REQ:
12656 {
12657 WDA_Process8023MulticastListReq(pWDA, (tSirRcvFltMcAddrList *)pMsg->bodyptr);
12658 break;
12659 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012660 case WDA_RECEIVE_FILTER_SET_FILTER_REQ:
12661 {
12662 WDA_ProcessReceiveFilterSetFilterReq(pWDA, (tSirRcvPktFilterCfgType *)pMsg->bodyptr);
12663 break;
12664 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012665 case WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_REQ:
12666 {
12667 WDA_ProcessPacketFilterMatchCountReq(pWDA, (tpSirRcvFltPktMatchRsp)pMsg->bodyptr);
12668 break;
12669 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012670 case WDA_RECEIVE_FILTER_CLEAR_FILTER_REQ:
12671 {
12672 WDA_ProcessReceiveFilterClearFilterReq(pWDA, (tSirRcvFltPktClearParam *)pMsg->bodyptr);
12673 break;
12674 }
12675#endif // WLAN_FEATURE_PACKET_FILTERING
12676
12677
12678 case WDA_TRANSMISSION_CONTROL_IND:
12679 {
12680 WDA_ProcessTxControlInd(pWDA, (tpTxControlParams)pMsg->bodyptr);
12681 break;
12682 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012683 case WDA_SET_POWER_PARAMS_REQ:
12684 {
12685 WDA_ProcessSetPowerParamsReq(pWDA, (tSirSetPowerParamsReq *)pMsg->bodyptr);
12686 break;
12687 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012688#ifdef WLAN_FEATURE_GTK_OFFLOAD
12689 case WDA_GTK_OFFLOAD_REQ:
12690 {
12691 WDA_ProcessGTKOffloadReq(pWDA, (tpSirGtkOffloadParams)pMsg->bodyptr);
12692 break;
12693 }
12694
12695 case WDA_GTK_OFFLOAD_GETINFO_REQ:
12696 {
12697 WDA_ProcessGTKOffloadGetInfoReq(pWDA, (tpSirGtkOffloadGetInfoRspParams)pMsg->bodyptr);
12698 break;
12699 }
12700#endif //WLAN_FEATURE_GTK_OFFLOAD
12701
12702 case WDA_SET_TM_LEVEL_REQ:
12703 {
12704 WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
12705 break;
12706 }
Sandeep Puligilla60342762014-01-30 21:05:37 +053012707
Mohit Khanna4a70d262012-09-11 16:30:12 -070012708 case WDA_UPDATE_OP_MODE:
12709 {
Sandeep Puligilla60342762014-01-30 21:05:37 +053012710 if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
12711 WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
12712 {
12713 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12714 }
12715 else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
Mohit Khanna4a70d262012-09-11 16:30:12 -070012716 {
12717 if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
12718 WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
12719 else
12720 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012721 " VHT OpMode Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012722 }
12723 else
12724 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080012725 " 11AC Feature is Not Supported");
Mohit Khanna4a70d262012-09-11 16:30:12 -070012726 break;
12727 }
Chet Lanctot186b5732013-03-18 10:26:30 -070012728#ifdef WLAN_FEATURE_11W
12729 case WDA_EXCLUDE_UNENCRYPTED_IND:
12730 {
12731 WDA_ProcessExcludeUnecryptInd(pWDA, (tSirWlanExcludeUnencryptParam *)pMsg->bodyptr);
12732 break;
12733 }
12734#endif
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053012735#ifdef FEATURE_WLAN_TDLS
12736 case WDA_SET_TDLS_LINK_ESTABLISH_REQ:
12737 {
12738 WDA_ProcessSetTdlsLinkEstablishReq(pWDA, (tTdlsLinkEstablishParams *)pMsg->bodyptr);
12739 break;
12740 }
12741#endif
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053012742 case WDA_DHCP_START_IND:
12743 {
12744 WDA_ProcessDHCPStartInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12745 break;
12746 }
12747 case WDA_DHCP_STOP_IND:
12748 {
12749 WDA_ProcessDHCPStopInd(pWDA, (tAniDHCPInd *)pMsg->bodyptr);
12750 break;
12751 }
Leo Chang9056f462013-08-01 19:21:11 -070012752#ifdef FEATURE_WLAN_LPHB
12753 case WDA_LPHB_CONF_REQ:
12754 {
12755 WDA_ProcessLPHBConfReq(pWDA, (tSirLPHBReq *)pMsg->bodyptr);
12756 break;
12757 }
12758#endif
Yue Mab9c86f42013-08-14 15:59:08 -070012759 case WDA_ADD_PERIODIC_TX_PTRN_IND:
12760 {
12761 WDA_ProcessAddPeriodicTxPtrnInd(pWDA,
12762 (tSirAddPeriodicTxPtrn *)pMsg->bodyptr);
12763 break;
12764 }
12765 case WDA_DEL_PERIODIC_TX_PTRN_IND:
12766 {
12767 WDA_ProcessDelPeriodicTxPtrnInd(pWDA,
12768 (tSirDelPeriodicTxPtrn *)pMsg->bodyptr);
12769 break;
12770 }
12771
Rajeev79dbe4c2013-10-05 11:03:42 +053012772#ifdef FEATURE_WLAN_BATCH_SCAN
12773 case WDA_SET_BATCH_SCAN_REQ:
12774 {
12775 WDA_ProcessSetBatchScanReq(pWDA,
12776 (tSirSetBatchScanReq *)pMsg->bodyptr);
12777 break;
12778 }
Chittajit Mitraf5413a42013-10-18 14:20:08 -070012779 case WDA_RATE_UPDATE_IND:
12780 {
12781 WDA_ProcessRateUpdateInd(pWDA, (tSirRateUpdateInd *)pMsg->bodyptr);
12782 break;
12783 }
Rajeev79dbe4c2013-10-05 11:03:42 +053012784 case WDA_TRIGGER_BATCH_SCAN_RESULT_IND:
12785 {
12786 WDA_ProcessTriggerBatchScanResultInd(pWDA,
12787 (tSirTriggerBatchScanResultInd *)pMsg->bodyptr);
12788 break;
12789 }
12790 case WDA_STOP_BATCH_SCAN_IND:
12791 {
12792 WDA_ProcessStopBatchScanInd(pWDA,
12793 (tSirStopBatchScanInd *)pMsg->bodyptr);
12794 break;
12795 }
c_hpothu92367912014-05-01 15:18:17 +053012796 case WDA_GET_BCN_MISS_RATE_REQ:
12797 WDA_ProcessGetBcnMissRateReq(pWDA,
12798 (tSirBcnMissRateReq *)pMsg->bodyptr);
12799 break;
Rajeev79dbe4c2013-10-05 11:03:42 +053012800#endif
12801
Sandeep Puligilla8b8b74b2014-02-10 16:39:05 +053012802 case WDA_HT40_OBSS_SCAN_IND:
12803 {
12804 WDA_ProcessHT40OBSSScanInd(pWDA,
12805 (tSirHT40OBSSScanInd *)pMsg->bodyptr);
12806 break;
12807 }
12808 case WDA_HT40_OBSS_STOP_SCAN_IND:
12809 {
12810 WDA_ProcessHT40OBSSStopScanInd(pWDA,
12811 (tANI_U8*)pMsg->bodyptr);
12812 break;
12813 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012814 default:
12815 {
Agarwal Ashishbf98caf2014-03-25 13:29:11 +053012816 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnson295189b2012-06-20 16:38:30 -070012817 "No Handling for msg type %x in WDA "
12818 ,pMsg->type);
12819 /* Do Nothing? MSG Body should be freed at here */
12820 if(NULL != pMsg->bodyptr)
12821 {
12822 vos_mem_free(pMsg->bodyptr);
12823 }
12824 //WDA_VOS_ASSERT(0) ;
12825 }
12826 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012827 return status ;
12828}
12829
Jeff Johnson295189b2012-06-20 16:38:30 -070012830/*
12831 * FUNCTION: WDA_LowLevelIndCallback
12832 * IND API callback from WDI, send Ind to PE
12833 */
12834void WDA_lowLevelIndCallback(WDI_LowLevelIndType *wdiLowLevelInd,
12835 void* pUserData )
12836{
12837 tWDA_CbContext *pWDA = (tWDA_CbContext *)pUserData;
12838#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12839 tSirRSSINotification rssiNotification;
12840#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070012841 if(NULL == pWDA)
12842 {
12843 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012844 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012845 VOS_ASSERT(0);
12846 return ;
12847 }
12848
12849 switch(wdiLowLevelInd->wdiIndicationType)
12850 {
12851 case WDI_RSSI_NOTIFICATION_IND:
12852 {
12853 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12854 "Received WDI_HAL_RSSI_NOTIFICATION_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012855#if defined WLAN_FEATURE_NEIGHBOR_ROAMING
12856 rssiNotification.bReserved =
12857 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bReserved;
12858 rssiNotification.bRssiThres1NegCross =
12859 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1NegCross;
12860 rssiNotification.bRssiThres1PosCross =
12861 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres1PosCross;
12862 rssiNotification.bRssiThres2NegCross =
12863 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2NegCross;
12864 rssiNotification.bRssiThres2PosCross =
12865 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres2PosCross;
12866 rssiNotification.bRssiThres3NegCross =
12867 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3NegCross;
12868 rssiNotification.bRssiThres3PosCross =
12869 wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.bRssiThres3PosCross;
Srinivasdaaec712012-12-12 15:59:44 -080012870 rssiNotification.avgRssi = (v_S7_t)
12871 ((-1)*wdiLowLevelInd->wdiIndicationData.wdiLowRSSIInfo.avgRssi);
Jeff Johnson295189b2012-06-20 16:38:30 -070012872 WLANTL_BMPSRSSIRegionChangedNotification(
12873 pWDA->pVosContext,
12874 &rssiNotification);
12875#endif
12876 break ;
12877 }
12878 case WDI_MISSED_BEACON_IND:
12879 {
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012880 tpSirSmeMissedBeaconInd pMissBeacInd =
12881 (tpSirSmeMissedBeaconInd)vos_mem_malloc(sizeof(tSirSmeMissedBeaconInd));
Jeff Johnson295189b2012-06-20 16:38:30 -070012882 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12883 "Received WDI_MISSED_BEACON_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012884 /* send IND to PE */
Leela Venkata Kiran Kumar Reddy Chirala3ca17902013-02-27 19:50:05 -080012885 if(NULL == pMissBeacInd)
12886 {
12887 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
12888 "%s: VOS MEM Alloc Failure", __func__);
12889 break;
12890 }
12891 pMissBeacInd->messageType = WDA_MISSED_BEACON_IND;
12892 pMissBeacInd->length = sizeof(tSirSmeMissedBeaconInd);
12893 pMissBeacInd->bssIdx =
12894 wdiLowLevelInd->wdiIndicationData.wdiMissedBeaconInd.bssIdx;
12895 WDA_SendMsg(pWDA, WDA_MISSED_BEACON_IND, (void *)pMissBeacInd , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012896 break ;
12897 }
12898 case WDI_UNKNOWN_ADDR2_FRAME_RX_IND:
12899 {
12900 /* TODO: Decode Ind and send Ind to PE */
12901 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12902 "Received WDI_UNKNOWN_ADDR2_FRAME_RX_IND from WDI ");
12903 break ;
12904 }
12905
12906 case WDI_MIC_FAILURE_IND:
12907 {
12908 tpSirSmeMicFailureInd pMicInd =
12909 (tpSirSmeMicFailureInd)vos_mem_malloc(sizeof(tSirSmeMicFailureInd));
12910
12911 if(NULL == pMicInd)
12912 {
12913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012914 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012915 break;
12916 }
12917 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12918 "Received WDI_MIC_FAILURE_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012919 pMicInd->messageType = eWNI_SME_MIC_FAILURE_IND;
12920 pMicInd->length = sizeof(tSirSmeMicFailureInd);
12921 vos_mem_copy(pMicInd->bssId,
12922 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.bssId,
12923 sizeof(tSirMacAddr));
12924 vos_mem_copy(pMicInd->info.srcMacAddr,
12925 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macSrcAddr,
12926 sizeof(tSirMacAddr));
12927 vos_mem_copy(pMicInd->info.taMacAddr,
12928 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macTaAddr,
12929 sizeof(tSirMacAddr));
12930 vos_mem_copy(pMicInd->info.dstMacAddr,
12931 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macDstAddr,
12932 sizeof(tSirMacAddr));
12933 vos_mem_copy(pMicInd->info.rxMacAddr,
12934 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.macRxAddr,
12935 sizeof(tSirMacAddr));
12936 pMicInd->info.multicast =
12937 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucMulticast;
12938 pMicInd->info.keyId=
12939 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.keyId;
12940 pMicInd->info.IV1=
12941 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.ucIV1;
12942 vos_mem_copy(pMicInd->info.TSC,
12943 wdiLowLevelInd->wdiIndicationData.wdiMICFailureInfo.TSC,SIR_CIPHER_SEQ_CTR_SIZE);
Jeff Johnson295189b2012-06-20 16:38:30 -070012944 WDA_SendMsg(pWDA, SIR_HAL_MIC_FAILURE_IND,
12945 (void *)pMicInd , 0) ;
12946 break ;
12947 }
12948 case WDI_FATAL_ERROR_IND:
12949 {
Madan Mohan Koyyalamudia2fc6412012-10-21 12:06:12 -070012950 pWDA->wdiFailed = true;
Jeff Johnson295189b2012-06-20 16:38:30 -070012951 /* TODO: Decode Ind and send Ind to PE */
12952 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12953 "Received WDI_FATAL_ERROR_IND from WDI ");
12954 break ;
12955 }
Jeff Johnson295189b2012-06-20 16:38:30 -070012956 case WDI_DEL_STA_IND:
12957 {
Jeff Johnson295189b2012-06-20 16:38:30 -070012958 tpDeleteStaContext pDelSTACtx =
12959 (tpDeleteStaContext)vos_mem_malloc(sizeof(tDeleteStaContext));
12960
12961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12962 "Received WDI_DEL_STA_IND from WDI ");
12963 if(NULL == pDelSTACtx)
12964 {
12965 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012966 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012967 break;
12968 }
12969 vos_mem_copy(pDelSTACtx->addr2,
12970 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macADDR2,
12971 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012972 vos_mem_copy(pDelSTACtx->bssId,
12973 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.macBSSID,
12974 sizeof(tSirMacAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070012975 pDelSTACtx->assocId =
12976 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.usAssocId;
12977 pDelSTACtx->reasonCode =
12978 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.wptReasonCode;
12979 pDelSTACtx->staId =
12980 wdiLowLevelInd->wdiIndicationData.wdiDeleteSTAIndType.ucSTAIdx;
Jeff Johnson295189b2012-06-20 16:38:30 -070012981 WDA_SendMsg(pWDA, SIR_LIM_DELETE_STA_CONTEXT_IND,
12982 (void *)pDelSTACtx , 0) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070012983 break ;
12984 }
12985 case WDI_COEX_IND:
12986 {
12987 tANI_U32 index;
12988 vos_msg_t vosMsg;
12989 tSirSmeCoexInd *pSmeCoexInd = (tSirSmeCoexInd *)vos_mem_malloc(sizeof(tSirSmeCoexInd));
12990 if(NULL == pSmeCoexInd)
12991 {
12992 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070012993 "%s: VOS MEM Alloc Failure-pSmeCoexInd", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070012994 break;
12995 }
12996 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
12997 "Received WDI_COEX_IND from WDI ");
Jeff Johnson295189b2012-06-20 16:38:30 -070012998 /* Message Header */
12999 pSmeCoexInd->mesgType = eWNI_SME_COEX_IND;
13000 pSmeCoexInd->mesgLen = sizeof(tSirSmeCoexInd);
Jeff Johnson295189b2012-06-20 16:38:30 -070013001 /* Info from WDI Indication */
13002 pSmeCoexInd->coexIndType = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndType;
13003 for (index = 0; index < SIR_COEX_IND_DATA_SIZE; index++)
13004 {
13005 pSmeCoexInd->coexIndData[index] = wdiLowLevelInd->wdiIndicationData.wdiCoexInfo.coexIndData[index];
13006 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013007 /* VOS message wrapper */
13008 vosMsg.type = eWNI_SME_COEX_IND;
13009 vosMsg.bodyptr = (void *)pSmeCoexInd;
13010 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013011 /* Send message to SME */
13012 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13013 {
13014 /* free the mem and return */
13015 vos_mem_free((v_VOID_t *)pSmeCoexInd);
13016 }
13017 else
13018 {
13019 /* DEBUG */
13020 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13021 "[COEX WDA] Coex Ind Type (%x) data (%x %x %x %x)",
13022 pSmeCoexInd->coexIndType,
13023 pSmeCoexInd->coexIndData[0],
13024 pSmeCoexInd->coexIndData[1],
13025 pSmeCoexInd->coexIndData[2],
13026 pSmeCoexInd->coexIndData[3]);
13027 }
13028 break;
13029 }
13030 case WDI_TX_COMPLETE_IND:
13031 {
13032 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
13033 /* Calling TxCompleteAck Indication from wda context*/
13034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13035 "Complete Indication received from HAL");
13036 if( pWDA->pAckTxCbFunc )
13037 {
13038 if( VOS_STATUS_SUCCESS !=
13039 WDA_STOP_TIMER(&pWDA->wdaTimers.TxCompleteTimer))
13040 {
13041 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13042 "Tx Complete timeout Timer Stop Failed ");
13043 }
13044 pWDA->pAckTxCbFunc( pMac, wdiLowLevelInd->wdiIndicationData.tx_complete_status);
13045 pWDA->pAckTxCbFunc = NULL;
13046 }
13047 else
13048 {
13049 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13050 "Tx Complete Indication is received after timeout ");
13051 }
13052 break;
13053 }
Viral Modid86bde22012-12-10 13:09:21 -080013054 case WDI_P2P_NOA_START_IND :
13055 {
13056 tSirP2PNoaStart *pP2pNoaStart =
13057 (tSirP2PNoaStart *)vos_mem_malloc(sizeof(tSirP2PNoaStart));
13058
13059 if (NULL == pP2pNoaStart)
13060 {
13061 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13062 "Memory allocation failure, "
13063 "WDI_P2P_NOA_START_IND not forwarded");
13064 break;
13065 }
13066 pP2pNoaStart->status =
13067 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.status;
13068 pP2pNoaStart->bssIdx =
13069 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaStartInfo.bssIdx;
13070 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_START_IND,
13071 (void *)pP2pNoaStart , 0) ;
13072 break;
13073 }
13074
Gopichand Nakkala79ff85d2013-05-27 17:05:29 +053013075#ifdef FEATURE_WLAN_TDLS
13076 case WDI_TDLS_IND :
13077 {
13078 tSirTdlsInd *pTdlsInd =
13079 (tSirTdlsInd *)vos_mem_malloc(sizeof(tSirTdlsInd));
13080
13081 if (NULL == pTdlsInd)
13082 {
13083 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13084 "Memory allocation failure, "
13085 "WDI_TDLS_IND not forwarded");
13086 break;
13087 }
13088 pTdlsInd->status =
13089 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.status;
13090 pTdlsInd->assocId =
13091 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.assocId;
13092 pTdlsInd->staIdx =
13093 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.staIdx;
13094 pTdlsInd->reasonCode =
13095 wdiLowLevelInd->wdiIndicationData.wdiTdlsIndInfo.reasonCode;
13096 WDA_SendMsg(pWDA, SIR_HAL_TDLS_IND,
13097 (void *)pTdlsInd , 0) ;
13098 break;
13099 }
13100#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070013101 case WDI_P2P_NOA_ATTR_IND :
13102 {
13103 tSirP2PNoaAttr *pP2pNoaAttr =
13104 (tSirP2PNoaAttr *)vos_mem_malloc(sizeof(tSirP2PNoaAttr));
Jeff Johnson295189b2012-06-20 16:38:30 -070013105 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13106 "Received WDI_P2P_NOA_ATTR_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013107 if (NULL == pP2pNoaAttr)
13108 {
13109 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13110 "Memory allocation failure, "
13111 "WDI_P2P_NOA_ATTR_IND not forwarded");
13112 break;
13113 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013114 pP2pNoaAttr->index =
13115 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucIndex;
13116 pP2pNoaAttr->oppPsFlag =
13117 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.ucOppPsFlag;
13118 pP2pNoaAttr->ctWin =
13119 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usCtWin;
13120
13121 pP2pNoaAttr->uNoa1IntervalCnt =
13122 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa1IntervalCnt;
13123 pP2pNoaAttr->uNoa1Duration =
13124 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Duration;
13125 pP2pNoaAttr->uNoa1Interval =
13126 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1Interval;
13127 pP2pNoaAttr->uNoa1StartTime =
13128 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa1StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013129 pP2pNoaAttr->uNoa2IntervalCnt =
13130 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.usNoa2IntervalCnt;
13131 pP2pNoaAttr->uNoa2Duration =
13132 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Duration;
13133 pP2pNoaAttr->uNoa2Interval =
13134 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2Interval;
13135 pP2pNoaAttr->uNoa2StartTime =
13136 wdiLowLevelInd->wdiIndicationData.wdiP2pNoaAttrInfo.uslNoa2StartTime;
Jeff Johnson295189b2012-06-20 16:38:30 -070013137 WDA_SendMsg(pWDA, SIR_HAL_P2P_NOA_ATTR_IND,
13138 (void *)pP2pNoaAttr , 0) ;
13139 break;
13140 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013141#ifdef FEATURE_WLAN_SCAN_PNO
13142 case WDI_PREF_NETWORK_FOUND_IND:
13143 {
13144 vos_msg_t vosMsg;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013145 v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
13146 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13147 tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
13148 (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
13149
Jeff Johnson295189b2012-06-20 16:38:30 -070013150 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13151 "Received WDI_PREF_NETWORK_FOUND_IND from WDI");
Jeff Johnson295189b2012-06-20 16:38:30 -070013152 if (NULL == pPrefNetworkFoundInd)
13153 {
13154 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13155 "Memory allocation failure, "
13156 "WDI_PREF_NETWORK_FOUND_IND not forwarded");
Kiet Lamb537cfb2013-11-07 12:56:49 +053013157 if (NULL !=
13158 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13159 {
13160 wpalMemoryFree(
13161 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData
13162 );
13163 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13164 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013165 break;
13166 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013167 /* Message Header */
13168 pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
Srikant Kuppa066904f2013-05-07 13:56:02 -070013169 pPrefNetworkFoundInd->mesgLen = size;
Jeff Johnson295189b2012-06-20 16:38:30 -070013170
13171 /* Info from WDI Indication */
13172 pPrefNetworkFoundInd->ssId.length =
13173 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.ucLength;
Jeff Johnson295189b2012-06-20 16:38:30 -070013174 vos_mem_set( pPrefNetworkFoundInd->ssId.ssId, 32, 0);
Jeff Johnson295189b2012-06-20 16:38:30 -070013175 vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
13176 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
13177 pPrefNetworkFoundInd->ssId.length);
Srikant Kuppa066904f2013-05-07 13:56:02 -070013178 if (NULL !=
13179 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
13180 {
13181 pPrefNetworkFoundInd->frameLength =
13182 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
13183 vos_mem_copy( pPrefNetworkFoundInd->data,
13184 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
13185 pPrefNetworkFoundInd->frameLength);
13186 wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
13187 wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
13188 }
13189 else
13190 {
13191 pPrefNetworkFoundInd->frameLength = 0;
13192 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013193 pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
Jeff Johnson295189b2012-06-20 16:38:30 -070013194 /* VOS message wrapper */
13195 vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;
13196 vosMsg.bodyptr = (void *) pPrefNetworkFoundInd;
13197 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013198 /* Send message to SME */
13199 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13200 {
13201 /* free the mem and return */
13202 vos_mem_free((v_VOID_t *) pPrefNetworkFoundInd);
13203 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013204 break;
13205 }
13206#endif // FEATURE_WLAN_SCAN_PNO
13207
13208#ifdef WLAN_WAKEUP_EVENTS
13209 case WDI_WAKE_REASON_IND:
13210 {
13211 vos_msg_t vosMsg;
13212 tANI_U32 allocSize = sizeof(tSirWakeReasonInd)
13213 + (wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen - 1);
13214 tSirWakeReasonInd *pWakeReasonInd = (tSirWakeReasonInd *)vos_mem_malloc(allocSize);
13215
13216 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13217 "[WAKE_REASON WDI] WAKE_REASON_IND Type (0x%x) data (ulReason=0x%x, ulReasonArg=0x%x, ulStoredDataLen=0x%x)",
13218 wdiLowLevelInd->wdiIndicationType,
13219 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason,
13220 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg,
13221 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13222
13223 if (NULL == pWakeReasonInd)
13224 {
13225 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13226 "Memory allocation failure, "
13227 "WDI_WAKE_REASON_IND not forwarded");
13228 break;
13229 }
13230
13231 vos_mem_zero(pWakeReasonInd, allocSize);
13232
13233 /* Message Header */
13234 pWakeReasonInd->mesgType = eWNI_SME_WAKE_REASON_IND;
13235 pWakeReasonInd->mesgLen = allocSize;
13236
13237 /* Info from WDI Indication */
13238 // Fill pWakeReasonInd structure from wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd
13239 pWakeReasonInd->ulReason = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReason;
13240 pWakeReasonInd->ulReasonArg = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulReasonArg;
13241 pWakeReasonInd->ulStoredDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen;
13242 pWakeReasonInd->ulActualDataLen = wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulActualDataLen;
13243 vos_mem_copy( (void *)&(pWakeReasonInd->aDataStart[0]),
13244 &(wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.aDataStart[0]),
13245 wdiLowLevelInd->wdiIndicationData.wdiWakeReasonInd.ulStoredDataLen);
13246
13247 /* VOS message wrapper */
13248 vosMsg.type = eWNI_SME_WAKE_REASON_IND;
13249 vosMsg.bodyptr = (void *) pWakeReasonInd;
13250 vosMsg.bodyval = 0;
13251
13252 /* Send message to SME */
13253 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13254 {
13255 /* free the mem and return */
13256 vos_mem_free((v_VOID_t *) pWakeReasonInd);
13257 }
13258
13259 break;
13260 }
13261#endif // WLAN_WAKEUP_EVENTS
13262
13263 case WDI_TX_PER_HIT_IND:
13264 {
13265 vos_msg_t vosMsg;
13266 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "Get WDI_TX_PER_HIT_IND");
13267 /* send IND to PE eWNI_SME_TX_PER_HIT_IND*/
13268 /* VOS message wrapper */
13269 vosMsg.type = eWNI_SME_TX_PER_HIT_IND;
13270 vosMsg.bodyptr = NULL;
13271 vosMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013272 /* Send message to SME */
13273 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13274 {
13275 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN, "post eWNI_SME_TX_PER_HIT_IND to SME Failed");
13276 }
13277 break;
13278 }
13279
Leo Chang9056f462013-08-01 19:21:11 -070013280#ifdef FEATURE_WLAN_LPHB
Leo Changd9df8aa2013-09-26 13:32:26 -070013281 case WDI_LPHB_IND:
Leo Chang9056f462013-08-01 19:21:11 -070013282 {
Leo Changd9df8aa2013-09-26 13:32:26 -070013283 vos_msg_t vosMsg;
13284 tSirLPHBInd *lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013285
Leo Changd9df8aa2013-09-26 13:32:26 -070013286 lphbInd =
13287 (tSirLPHBInd *)vos_mem_malloc(sizeof(tSirLPHBInd));
13288 if (NULL == lphbInd)
Leo Chang9056f462013-08-01 19:21:11 -070013289 {
13290 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13291 "%s: LPHB IND buffer alloc Fail", __func__);
13292 return ;
13293 }
13294
Leo Changd9df8aa2013-09-26 13:32:26 -070013295 lphbInd->sessionIdx =
Leo Chang9056f462013-08-01 19:21:11 -070013296 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.sessionIdx;
Leo Changd9df8aa2013-09-26 13:32:26 -070013297 lphbInd->protocolType =
Leo Chang9056f462013-08-01 19:21:11 -070013298 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.protocolType;
Leo Changd9df8aa2013-09-26 13:32:26 -070013299 lphbInd->eventReason =
Leo Chang9056f462013-08-01 19:21:11 -070013300 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.eventReason;
13301
13302 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Leo Changd9df8aa2013-09-26 13:32:26 -070013303 "Get WDI_LPHB_IND bssIdx %d",
Leo Chang9056f462013-08-01 19:21:11 -070013304 wdiLowLevelInd->wdiIndicationData.wdiLPHBTimeoutInd.bssIdx);
13305
Leo Changd9df8aa2013-09-26 13:32:26 -070013306 vosMsg.type = eWNI_SME_LPHB_IND;
13307 vosMsg.bodyptr = lphbInd;
Leo Chang9056f462013-08-01 19:21:11 -070013308 vosMsg.bodyval = 0;
13309 /* Send message to SME */
13310 if (VOS_STATUS_SUCCESS !=
13311 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13312 {
13313 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13314 "post WDI_LPHB_WAIT_TIMEOUT_IND to SME Failed");
Leo Changd9df8aa2013-09-26 13:32:26 -070013315 vos_mem_free(lphbInd);
Leo Chang9056f462013-08-01 19:21:11 -070013316 }
13317 break;
13318 }
13319#endif /* FEATURE_WLAN_LPHB */
Yue Mab9c86f42013-08-14 15:59:08 -070013320 case WDI_PERIODIC_TX_PTRN_FW_IND:
13321 {
13322 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13323 "%s: WDI_PERIODIC_TX_PTRN_FW_IND received, bssIdx: %d, "
13324 "selfStaIdx: %d, status: %d, patternIdBitmap: %d", __func__,
13325 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.bssIdx,
13326 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.selfStaIdx,
13327 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.status,
13328 (int)wdiLowLevelInd->wdiIndicationData.wdiPeriodicTxPtrnFwInd.patternIdBitmap);
13329
13330 break;
13331 }
Leo Chang9056f462013-08-01 19:21:11 -070013332
Ravi Joshid2ca7c42013-07-23 08:37:49 -070013333 case WDI_IBSS_PEER_INACTIVITY_IND:
13334 {
13335 tSirIbssPeerInactivityInd *pIbssInd =
13336 (tSirIbssPeerInactivityInd *)
13337 vos_mem_malloc(sizeof(tSirIbssPeerInactivityInd));
13338
13339 if (NULL == pIbssInd)
13340 {
13341 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13342 "Memory allocation failure, "
13343 "WDI_IBSS_PEER_INACTIVITY_IND not forwarded");
13344 break;
13345 }
13346
13347 pIbssInd->bssIdx =
13348 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.bssIdx;
13349 pIbssInd->staIdx =
13350 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staIdx;
13351 vos_mem_copy(pIbssInd->peerAddr,
13352 wdiLowLevelInd->wdiIndicationData.wdiIbssPeerInactivityInd.staMacAddr,
13353 sizeof(tSirMacAddr));
13354 WDA_SendMsg(pWDA, WDA_IBSS_PEER_INACTIVITY_IND, (void *)pIbssInd, 0) ;
13355 break;
13356 }
13357
Rajeev79dbe4c2013-10-05 11:03:42 +053013358#ifdef FEATURE_WLAN_BATCH_SCAN
13359 case WDI_BATCH_SCAN_RESULT_IND:
13360 {
13361 void *pBatchScanResult;
13362 void *pCallbackContext;
13363 tpAniSirGlobal pMac;
13364
13365 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_HIGH,
13366 "Received WDI_BATCHSCAN_RESULT_IND from FW");
13367
13368 /*sanity check*/
13369 if(NULL == pWDA)
13370 {
13371 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13372 "%s:pWDA is NULL", __func__);
13373 VOS_ASSERT(0);
13374 return;
13375 }
13376
13377 pBatchScanResult =
13378 (void *)wdiLowLevelInd->wdiIndicationData.pBatchScanResult;
13379 if (NULL == pBatchScanResult)
13380 {
13381 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13382 "%s:Batch scan result from FW is null can't invoke HDD callback",
13383 __func__);
13384 VOS_ASSERT(0);
13385 return;
13386 }
13387
13388 pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13389 if (NULL == pMac)
13390 {
13391 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13392 "%s:pMac is NULL", __func__);
13393 VOS_ASSERT(0);
13394 return;
13395 }
13396
13397 pCallbackContext = pMac->pmc.batchScanResultCallbackContext;
13398 /*call hdd callback with set batch scan response data*/
13399 if(pMac->pmc.batchScanResultCallback)
13400 {
13401 pMac->pmc.batchScanResultCallback(pCallbackContext,
13402 pBatchScanResult);
13403 }
13404 else
13405 {
13406 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13407 "%s:HDD callback is null", __func__);
13408 VOS_ASSERT(0);
13409 }
13410 break;
13411 }
13412#endif
13413
Leo Chang0b0e45a2013-12-15 15:18:55 -080013414#ifdef FEATURE_WLAN_CH_AVOID
13415 case WDI_CH_AVOID_IND:
13416 {
13417 vos_msg_t vosMsg;
13418 tSirChAvoidIndType *chAvoidInd;
13419
13420 chAvoidInd =
13421 (tSirChAvoidIndType *)vos_mem_malloc(sizeof(tSirChAvoidIndType));
13422 if (NULL == chAvoidInd)
13423 {
13424 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13425 "%s: CH_AVOID IND buffer alloc Fail", __func__);
13426 return ;
13427 }
13428
13429 chAvoidInd->avoidRangeCount =
13430 wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidRangeCount;
13431 wpalMemoryCopy((void *)chAvoidInd->avoidFreqRange,
13432 (void *)wdiLowLevelInd->wdiIndicationData.wdiChAvoidInd.avoidFreqRange,
13433 chAvoidInd->avoidRangeCount * sizeof(tSirChAvoidFreqType));
13434
13435 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13436 "%s : WDA CH avoid notification", __func__);
13437
13438 vosMsg.type = eWNI_SME_CH_AVOID_IND;
13439 vosMsg.bodyptr = chAvoidInd;
13440 vosMsg.bodyval = 0;
13441 /* Send message to SME */
13442 if (VOS_STATUS_SUCCESS !=
13443 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
13444 {
13445 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13446 "post eWNI_SME_CH_AVOID_IND to SME Failed");
13447 vos_mem_free(chAvoidInd);
13448 }
13449 break;
13450 }
13451#endif /* FEATURE_WLAN_CH_AVOID */
13452
Jeff Johnson295189b2012-06-20 16:38:30 -070013453 default:
13454 {
13455 /* TODO error */
13456 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13457 "Received UNKNOWN Indication from WDI ");
13458 }
13459 }
13460 return ;
13461}
13462
Jeff Johnson295189b2012-06-20 16:38:30 -070013463/*
13464 * BA related processing in WDA.
13465 */
Jeff Johnson295189b2012-06-20 16:38:30 -070013466void WDA_TriggerBaReqCallback(WDI_TriggerBARspParamsType *wdiTriggerBaRsp,
13467 void* pUserData)
13468{
13469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
13470 tWDA_CbContext *pWDA;
Jeff Johnson295189b2012-06-20 16:38:30 -070013471 if(NULL == pWdaParams)
13472 {
13473 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013474 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013475 VOS_ASSERT(0) ;
13476 return ;
13477 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013478 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext;
Jeff Johnson295189b2012-06-20 16:38:30 -070013479 vos_mem_free(pWdaParams->wdaMsgParam) ;
13480 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13481 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013482 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013483 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013484 if(WDI_STATUS_SUCCESS == wdiTriggerBaRsp->wdiStatus)
13485 {
13486 tANI_U8 i = 0 ;
13487 tBaActivityInd *baActivityInd = NULL ;
13488 tANI_U8 baCandidateCount = wdiTriggerBaRsp->usBaCandidateCnt ;
13489 tANI_U8 allocSize = sizeof(tBaActivityInd)
13490 + sizeof(tAddBaCandidate) * (baCandidateCount) ;
13491 WDI_TriggerBARspCandidateType *wdiBaCandidate = NULL ;
13492 tAddBaCandidate *baCandidate = NULL ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013493 baActivityInd = (tBaActivityInd *)vos_mem_malloc(allocSize) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013494 if(NULL == baActivityInd)
13495 {
13496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013497 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013498 VOS_ASSERT(0) ;
13499 return;
13500 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013501 vos_mem_copy(baActivityInd->bssId, wdiTriggerBaRsp->macBSSID,
13502 sizeof(tSirMacAddr)) ;
13503 baActivityInd->baCandidateCnt = baCandidateCount ;
13504
13505 wdiBaCandidate = (WDI_TriggerBARspCandidateType*)(wdiTriggerBaRsp + 1) ;
13506 baCandidate = (tAddBaCandidate*)(baActivityInd + 1) ;
13507
13508 for(i = 0 ; i < baCandidateCount ; i++)
13509 {
13510 tANI_U8 tid = 0 ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013511 vos_mem_copy(baCandidate->staAddr, wdiBaCandidate->macSTA,
13512 sizeof(tSirMacAddr)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013513 for(tid = 0 ; tid < STACFG_MAX_TC; tid++)
13514 {
13515 baCandidate->baInfo[tid].fBaEnable =
13516 wdiBaCandidate->wdiBAInfo[tid].fBaEnable ;
13517 baCandidate->baInfo[tid].startingSeqNum =
13518 wdiBaCandidate->wdiBAInfo[tid].startingSeqNum ;
13519 }
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070013520 wdiBaCandidate++ ;
13521 baCandidate++ ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013522 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013523 WDA_SendMsg(pWDA, SIR_LIM_ADD_BA_IND, (void *)baActivityInd , 0) ;
13524 }
13525 else
13526 {
13527 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13528 "BA Trigger RSP with Failure received ");
13529 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013530 return ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013531}
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013532
13533
13534/*
13535 * API to activate/deactivate Traffic Stats timer. Traffic stats timer is only needed
13536 * during MCC
13537 */
13538void WDA_TrafficStatsTimerActivate(wpt_boolean activate)
13539{
13540 wpt_uint32 enabled;
13541 v_VOID_t * pVosContext = vos_get_global_context(VOS_MODULE_ID_WDA, NULL);
13542 tWDA_CbContext *pWDA = vos_get_context(VOS_MODULE_ID_WDA, pVosContext);
13543 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pVosContext);
13544
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013545 if (NULL == pMac )
13546 {
13547 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13548 "%s: Invoked with invalid MAC context ", __func__ );
13549 VOS_ASSERT(0);
13550 return;
13551 }
13552
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013553 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13554 != eSIR_SUCCESS)
13555 {
13556 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13557 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13558 return;
13559 }
13560
13561 if(!enabled)
13562 {
13563 return;
13564 }
13565
13566 if(NULL == pWDA)
13567 {
13568 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13569 "%s:WDA context is NULL", __func__);
13570 VOS_ASSERT(0);
13571 return;
13572 }
13573
13574 if(activate)
13575 {
13576 if( VOS_STATUS_SUCCESS !=
13577 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13578 {
13579 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13580 "Traffic Stats Timer Start Failed ");
13581 return;
13582 }
13583 WDI_DS_ActivateTrafficStats();
13584 }
13585 else
13586 {
13587 WDI_DS_DeactivateTrafficStats();
13588 WDI_DS_ClearTrafficStats();
13589
13590 if( VOS_STATUS_SUCCESS !=
13591 WDA_STOP_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13592 {
13593 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13594 "Traffic Stats Timer Stop Failed ");
13595 return;
13596 }
13597 }
13598}
13599
13600/*
13601 * Traffic Stats Timer handler
13602 */
13603void WDA_TimerTrafficStatsInd(tWDA_CbContext *pWDA)
13604{
13605 WDI_Status wdiStatus;
13606 WDI_TrafficStatsType *pWdiTrafficStats = NULL;
13607 WDI_TrafficStatsIndType trafficStatsIndParams;
13608 wpt_uint32 length, enabled;
13609 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13610
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053013611 if (NULL == pMac )
13612 {
13613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13614 "%s: Invoked with invalid MAC context ", __func__ );
13615 VOS_ASSERT(0);
13616 return;
13617 }
13618
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013619 if(wlan_cfgGetInt(pMac, WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED, &enabled)
13620 != eSIR_SUCCESS)
13621 {
13622 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13623 "Failed to get WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED");
13624 return;
13625 }
13626
13627 if(!enabled)
13628 {
13629 WDI_DS_DeactivateTrafficStats();
13630 return;
13631 }
13632
13633 WDI_DS_GetTrafficStats(&pWdiTrafficStats, &length);
13634
13635 if(pWdiTrafficStats != NULL)
13636 {
13637 trafficStatsIndParams.pTrafficStats = pWdiTrafficStats;
13638 trafficStatsIndParams.length = length;
13639 trafficStatsIndParams.duration =
Kumar Anand90ca3dd2013-01-18 15:24:47 -080013640 pWDA->wdaTimers.trafficStatsTimer.initScheduleTimeInMsecs;
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013641 trafficStatsIndParams.wdiReqStatusCB = WDA_WdiIndicationCallback;
13642 trafficStatsIndParams.pUserData = pWDA;
13643
13644 wdiStatus = WDI_TrafficStatsInd(&trafficStatsIndParams);
13645
13646 if(WDI_STATUS_PENDING == wdiStatus)
13647 {
13648 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13649 "Pending received for %s:%d ",__func__,__LINE__ );
13650 }
13651 else if( WDI_STATUS_SUCCESS_SYNC != wdiStatus )
13652 {
13653 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13654 "Failure in %s:%d ",__func__,__LINE__ );
13655 }
13656
13657 WDI_DS_ClearTrafficStats();
13658 }
13659 else
13660 {
13661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13662 "pWdiTrafficStats is Null");
13663 }
13664
13665 if( VOS_STATUS_SUCCESS !=
13666 WDA_START_TIMER(&pWDA->wdaTimers.trafficStatsTimer))
13667 {
13668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_WARN,
13669 "Traffic Stats Timer Start Failed ");
13670 return;
13671 }
13672}
13673
Jeff Johnson295189b2012-06-20 16:38:30 -070013674/*
13675 * BA Activity check timer handler
13676 */
13677void WDA_BaCheckActivity(tWDA_CbContext *pWDA)
13678{
13679 tANI_U8 curSta = 0 ;
13680 tANI_U8 tid = 0 ;
13681 tANI_U8 size = 0 ;
13682 tANI_U8 baCandidateCount = 0 ;
13683 tANI_U8 newBaCandidate = 0 ;
13684 WDI_TriggerBAReqCandidateType baCandidate[WDA_MAX_STA] = {{0}} ;
13685
13686 if(NULL == pWDA)
13687 {
13688 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013689 "%s:pWDA is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013690 VOS_ASSERT(0);
13691 return ;
13692 }
13693 if(WDA_MAX_STA < pWDA->wdaMaxSta)
13694 {
13695 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13696 "Inconsistent STA entries in WDA");
13697 VOS_ASSERT(0) ;
13698 }
13699 /* walk through all STA entries and find out TX packet count */
13700 for(curSta = 0 ; curSta < pWDA->wdaMaxSta ; curSta++)
13701 {
Gopichand Nakkala976e3252013-01-03 15:45:56 -080013702#ifdef WLAN_SOFTAP_VSTA_FEATURE
13703 // We can only do BA on "hard" STAs.
13704 if (!(IS_HWSTA_IDX(curSta)))
13705 {
13706 continue;
13707 }
13708#endif //WLAN_SOFTAP_VSTA_FEATURE
13709 for(tid = 0 ; tid < STACFG_MAX_TC ; tid++)
13710 {
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013711 WLANTL_STAStateType tlSTAState ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013712 tANI_U32 txPktCount = 0 ;
13713 tANI_U8 validStaIndex = pWDA->wdaStaInfo[curSta].ucValidStaIndex ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013714 if((WDA_VALID_STA_INDEX == validStaIndex) &&
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013715 (VOS_STATUS_SUCCESS == WDA_TL_GET_STA_STATE( pWDA->pVosContext,
13716 curSta, &tlSTAState)) &&
Jeff Johnson295189b2012-06-20 16:38:30 -070013717 (VOS_STATUS_SUCCESS == WDA_TL_GET_TX_PKTCOUNT( pWDA->pVosContext,
13718 curSta, tid, &txPktCount)))
13719 {
13720#if 0
13721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13722 "************* %d:%d, %d ",curSta, txPktCount,
13723 pWDA->wdaStaInfo[curSta].framesTxed[tid]);
13724#endif
13725 if(!WDA_GET_BA_TXFLAG(pWDA, curSta, tid)
Madan Mohan Koyyalamudifc1d1fe2012-10-18 15:07:12 -070013726 && (WLANTL_STA_AUTHENTICATED == tlSTAState)
Jeff Johnson295189b2012-06-20 16:38:30 -070013727 && (txPktCount >= WDA_LAST_POLLED_THRESHOLD(pWDA,
13728 curSta, tid)))
13729 {
13730 /* get prepare for sending message to HAL */
13731 //baCandidate[baCandidateCount].staIdx = curSta ;
13732 baCandidate[baCandidateCount].ucTidBitmap |= 1 << tid ;
13733 newBaCandidate = WDA_ENABLE_BA ;
13734 }
13735 pWDA->wdaStaInfo[curSta].framesTxed[tid] = txPktCount ;
13736 }
13737 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013738 /* fill the entry for all the sta with given TID's */
13739 if(WDA_ENABLE_BA == newBaCandidate)
13740 {
13741 /* move to next BA candidate */
13742 baCandidate[baCandidateCount].ucSTAIdx = curSta ;
13743 size += sizeof(WDI_TriggerBAReqCandidateType) ;
13744 baCandidateCount++ ;
13745 newBaCandidate = WDA_DISABLE_BA ;
13746 }
13747 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013748 /* prepare and send message to hal */
13749 if( 0 < baCandidateCount)
13750 {
13751 WDI_Status status = WDI_STATUS_SUCCESS ;
13752 WDI_TriggerBAReqParamsType *wdiTriggerBaReq;
13753 tWDA_ReqParams *pWdaParams =
13754 (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013755 if(NULL == pWdaParams)
13756 {
13757 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013758 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013759 VOS_ASSERT(0) ;
13760 return;
13761 }
13762 wdiTriggerBaReq = (WDI_TriggerBAReqParamsType *)
13763 vos_mem_malloc(sizeof(WDI_TriggerBAReqParamsType) + size) ;
13764 if(NULL == wdiTriggerBaReq)
13765 {
13766 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013767 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013768 VOS_ASSERT(0) ;
13769 vos_mem_free(pWdaParams);
13770 return;
13771 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013772 do
13773 {
13774 WDI_TriggerBAReqinfoType *triggerBaInfo =
13775 &wdiTriggerBaReq->wdiTriggerBAInfoType ;
13776 triggerBaInfo->usBACandidateCnt = baCandidateCount ;
13777 /* TEMP_FIX: Need to see if WDI need check for assoc session for
13778 * for each request */
13779 triggerBaInfo->ucSTAIdx = baCandidate[0].ucSTAIdx ;
13780 triggerBaInfo->ucBASessionID = 0;
13781 vos_mem_copy((wdiTriggerBaReq + 1), baCandidate, size) ;
13782 } while(0) ;
13783 wdiTriggerBaReq->wdiReqStatusCB = NULL ;
13784 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013785 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013786 pWdaParams->pWdaContext = pWDA;
13787 pWdaParams->wdaWdiApiMsgParam = wdiTriggerBaReq ;
13788 pWdaParams->wdaMsgParam = NULL;
13789 status = WDI_TriggerBAReq(wdiTriggerBaReq,
13790 WDA_TriggerBaReqCallback, pWdaParams) ;
13791 if(IS_WDI_STATUS_FAILURE(status))
13792 {
13793 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13794 "Failure in Trigger BA REQ Params WDI API, free all the memory " );
13795 vos_mem_free(pWdaParams->wdaMsgParam) ;
13796 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
13797 vos_mem_free(pWdaParams) ;
13798 }
13799 }
13800 else
13801 {
13802 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO_LOW,
13803 "There is no TID for initiating BA");
13804 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013805 if( VOS_STATUS_SUCCESS !=
13806 WDA_STOP_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13807 {
13808 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13809 "BA Activity Timer Stop Failed ");
13810 return ;
13811 }
13812 if( VOS_STATUS_SUCCESS !=
13813 WDA_START_TIMER(&pWDA->wdaTimers.baActivityChkTmr))
13814 {
13815 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
13816 "BA Activity Timer Start Failed ");
13817 return;
13818 }
13819 return ;
13820}
Jeff Johnson295189b2012-06-20 16:38:30 -070013821/*
13822 * WDA common routine to create timer used by WDA.
13823 */
13824static VOS_STATUS wdaCreateTimers(tWDA_CbContext *pWDA)
13825{
Jeff Johnson295189b2012-06-20 16:38:30 -070013826 VOS_STATUS status = VOS_STATUS_SUCCESS ;
13827 tANI_U32 val = 0 ;
13828 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
13829
13830 if(NULL == pMac)
13831 {
13832 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070013833 "%s:MAC context is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070013834 VOS_ASSERT(0);
13835 return VOS_STATUS_E_FAILURE;
13836 }
13837 if(wlan_cfgGetInt(pMac, WNI_CFG_BA_ACTIVITY_CHECK_TIMEOUT, &val )
13838 != eSIR_SUCCESS)
13839 {
13840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13841 "Failed to get value for WNI_CFG_CURRENT_TX_ANTENNA");
13842 return VOS_STATUS_E_FAILURE;
13843 }
13844 val = SYS_MS_TO_TICKS(val) ;
13845
13846 /* BA activity check timer */
13847 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.baActivityChkTmr,
13848 "BA Activity Check timer", WDA_TimerHandler,
13849 WDA_TIMER_BA_ACTIVITY_REQ, val, val, TX_NO_ACTIVATE) ;
13850 if(status != TX_SUCCESS)
13851 {
13852 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13853 "Unable to create BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013854 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013855 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013856 val = SYS_MS_TO_TICKS( WDA_TX_COMPLETE_TIME_OUT_VALUE ) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013857 /* Tx Complete Timeout timer */
13858 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.TxCompleteTimer,
13859 "Tx Complete Check timer", WDA_TimerHandler,
13860 WDA_TX_COMPLETE_TIMEOUT_IND, val, val, TX_NO_ACTIVATE) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013861 if(status != TX_SUCCESS)
13862 {
13863 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13864 "Unable to create Tx Complete Timeout timer");
13865 /* Destroy timer of BA activity check timer */
13866 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13867 if(status != TX_SUCCESS)
13868 {
13869 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13870 "Unable to Destroy BA activity timer");
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013871 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013872 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013873 return VOS_STATUS_E_FAILURE ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013874 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013875
13876 val = SYS_MS_TO_TICKS( WDA_TRAFFIC_STATS_TIME_OUT_VALUE );
13877
13878 /* Traffic Stats timer */
13879 status = WDA_CREATE_TIMER(&pWDA->wdaTimers.trafficStatsTimer,
13880 "Traffic Stats timer", WDA_TimerHandler,
13881 WDA_TIMER_TRAFFIC_STATS_IND, val, val, TX_NO_ACTIVATE) ;
13882 if(status != TX_SUCCESS)
13883 {
13884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13885 "Unable to create traffic stats timer");
13886 /* Destroy timer of BA activity check timer */
13887 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13888 if(status != TX_SUCCESS)
13889 {
13890 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13891 "Unable to Destroy BA activity timer");
13892 }
13893 /* Destroy timer of tx complete timer */
13894 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13895 if(status != TX_SUCCESS)
13896 {
13897 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13898 "Unable to Tx complete timer");
13899 }
13900 return VOS_STATUS_E_FAILURE ;
13901 }
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080013902 return VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013903}
Jeff Johnson295189b2012-06-20 16:38:30 -070013904/*
13905 * WDA common routine to destroy timer used by WDA.
13906 */
13907static VOS_STATUS wdaDestroyTimers(tWDA_CbContext *pWDA)
13908{
13909 VOS_STATUS status = VOS_STATUS_SUCCESS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013910 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.TxCompleteTimer);
13911 if(status != TX_SUCCESS)
13912 {
13913 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13914 "Unable to Destroy Tx Complete Timeout timer");
13915 return eSIR_FAILURE ;
13916 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013917 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.baActivityChkTmr);
13918 if(status != TX_SUCCESS)
13919 {
13920 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13921 "Unable to Destroy BA activity timer");
13922 return eSIR_FAILURE ;
13923 }
Madan Mohan Koyyalamudi01cba042013-01-10 21:56:05 -080013924 status = WDA_DESTROY_TIMER(&pWDA->wdaTimers.trafficStatsTimer);
13925 if(status != TX_SUCCESS)
13926 {
13927 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
13928 "Unable to Destroy traffic stats timer");
13929 return eSIR_FAILURE ;
13930 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013931 return eSIR_SUCCESS ;
13932}
Jeff Johnson295189b2012-06-20 16:38:30 -070013933/*
13934 * WDA timer handler.
13935 */
13936void WDA_TimerHandler(v_VOID_t* pContext, tANI_U32 timerInfo)
13937{
13938 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
13939 vos_msg_t wdaMsg = {0} ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013940 /*
13941 * trigger CFG download in WDA by sending WDA_CFG_DNLD message
13942 */
13943 wdaMsg.type = timerInfo ;
13944 wdaMsg.bodyptr = NULL;
13945 wdaMsg.bodyval = 0;
Jeff Johnson295189b2012-06-20 16:38:30 -070013946 /* post the message.. */
13947 vosStatus = vos_mq_post_message( VOS_MQ_ID_WDA, &wdaMsg );
13948 if ( !VOS_IS_STATUS_SUCCESS(vosStatus) )
13949 {
13950 vosStatus = VOS_STATUS_E_BADMSG;
13951 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013952}
Jeff Johnson295189b2012-06-20 16:38:30 -070013953/*
13954 * WDA Tx Complete timeout Indication.
13955 */
13956void WDA_ProcessTxCompleteTimeOutInd(tWDA_CbContext* pWDA)
13957{
13958 tpAniSirGlobal pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070013959 if( pWDA->pAckTxCbFunc )
13960 {
13961 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013962 "TxComplete timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013963 pWDA->pAckTxCbFunc( pMac, 0);
13964 pWDA->pAckTxCbFunc = NULL;
13965 }
13966 else
13967 {
13968 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080013969 "There is no request pending for TxComplete and wait timer expired");
Jeff Johnson295189b2012-06-20 16:38:30 -070013970 }
Jeff Johnson295189b2012-06-20 16:38:30 -070013971}
Jeff Johnson295189b2012-06-20 16:38:30 -070013972/*
13973 * WDA Set REG Domain to VOS NV
13974 */
Abhishek Singha306a442013-11-07 18:39:01 +053013975eHalStatus WDA_SetRegDomain(void * clientCtxt, v_REGDOMAIN_t regId,
13976 tAniBool sendRegHint)
Jeff Johnson295189b2012-06-20 16:38:30 -070013977{
Abhishek Singha306a442013-11-07 18:39:01 +053013978 if(VOS_STATUS_SUCCESS != vos_nv_setRegDomain(clientCtxt, regId, sendRegHint))
Jeff Johnson295189b2012-06-20 16:38:30 -070013979 {
13980 return eHAL_STATUS_INVALID_PARAMETER;
13981 }
13982 return eHAL_STATUS_SUCCESS;
13983}
Jeff Johnson295189b2012-06-20 16:38:30 -070013984
Jeff Johnson295189b2012-06-20 16:38:30 -070013985#ifdef FEATURE_WLAN_SCAN_PNO
13986/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070013987 * FUNCTION: WDA_PNOScanRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070013988 *
13989 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070013990void WDA_PNOScanRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070013991{
13992 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013993 tSirPNOScanReq *pPNOScanReqParams;
13994
Jeff Johnson295189b2012-06-20 16:38:30 -070013995 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053013996 "<------ %s, wdiStatus: %d",__func__, status);
Yue Ma7f44bbe2013-04-12 11:47:39 -070013997 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070013998 {
13999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014000 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014001 VOS_ASSERT(0) ;
14002 return ;
14003 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014004
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014005 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14006 if(pPNOScanReqParams->statusCallback)
14007 {
14008 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14009 (status == WDI_STATUS_SUCCESS) ?
14010 VOS_STATUS_SUCCESS : VOS_STATUS_E_FAILURE);
14011 }
14012
Yue Ma7f44bbe2013-04-12 11:47:39 -070014013 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14014 vos_mem_free(pWdaParams->wdaMsgParam);
14015 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014016
14017 return ;
14018}
Jeff Johnson295189b2012-06-20 16:38:30 -070014019/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014020 * FUNCTION: WDA_PNOScanReqCallback
14021 * Free memory.
14022 * Invoked when PNOScan REQ failed in WDI and no RSP callback is generated.
14023 */
14024void WDA_PNOScanReqCallback(WDI_Status wdiStatus, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014025{
Yue Ma7f44bbe2013-04-12 11:47:39 -070014026 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014027 tSirPNOScanReq *pPNOScanReqParams;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014028
14029 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14030 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14031
14032 if(NULL == pWdaParams)
14033 {
14034 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14035 "%s: pWdaParams received NULL", __func__);
14036 VOS_ASSERT(0);
14037 return;
14038 }
14039
14040 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14041 {
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014042 pPNOScanReqParams = (tSirPNOScanReq *)pWdaParams->wdaMsgParam;
14043 if(pPNOScanReqParams->statusCallback)
14044 {
14045 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14046 VOS_STATUS_E_FAILURE);
14047 }
14048
Yue Ma7f44bbe2013-04-12 11:47:39 -070014049 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14050 vos_mem_free(pWdaParams->wdaMsgParam);
14051 vos_mem_free(pWdaParams);
14052 }
14053
14054 return;
14055}
14056/*
14057 * FUNCTION: WDA_UpdateScanParamsRespCallback
14058 *
14059 */
14060void WDA_UpdateScanParamsRespCallback(WDI_Status status, void* pUserData)
14061{
14062 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014063 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014064 "<------ %s " ,__func__);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014065 if(NULL == pWdaParams)
Jeff Johnson295189b2012-06-20 16:38:30 -070014066 {
14067 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014068 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014069 VOS_ASSERT(0) ;
14070 return ;
14071 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014072
14073 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14074 vos_mem_free(pWdaParams->wdaMsgParam);
14075 vos_mem_free(pWdaParams);
14076
Jeff Johnson295189b2012-06-20 16:38:30 -070014077 return ;
14078}
Jeff Johnson295189b2012-06-20 16:38:30 -070014079/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014080 * FUNCTION: WDA_UpdateScanParamsReqCallback
14081 * Free memory.
14082 * Invoked when UpdateScanParams REQ failed in WDI and no RSP callback is generated.
14083 */
14084void WDA_UpdateScanParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14085{
14086 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14087
14088 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14089 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14090
14091 if(NULL == pWdaParams)
14092 {
14093 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14094 "%s: pWdaParams received NULL", __func__);
14095 VOS_ASSERT(0);
14096 return;
14097 }
14098
14099 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14100 {
14101 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14102 vos_mem_free(pWdaParams->wdaMsgParam);
14103 vos_mem_free(pWdaParams);
14104 }
14105
14106 return;
14107}
14108/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014109 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14110 * Request to WDI to set Preferred Network List.Offload
14111 */
14112VOS_STATUS WDA_ProcessSetPrefNetworkReq(tWDA_CbContext *pWDA,
14113 tSirPNOScanReq *pPNOScanReqParams)
14114{
Jeff Johnson43971f52012-07-17 12:26:56 -070014115 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014116 WDI_PNOScanReqParamsType *pwdiPNOScanReqInfo =
14117 (WDI_PNOScanReqParamsType *)vos_mem_malloc(sizeof(WDI_PNOScanReqParamsType)) ;
14118 tWDA_ReqParams *pWdaParams ;
14119 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014120 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014121 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014122 if(NULL == pwdiPNOScanReqInfo)
14123 {
14124 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014125 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014126 VOS_ASSERT(0);
14127 return VOS_STATUS_E_NOMEM;
14128 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014129 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14130 if(NULL == pWdaParams)
14131 {
14132 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014133 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014134 VOS_ASSERT(0);
14135 vos_mem_free(pwdiPNOScanReqInfo);
14136 return VOS_STATUS_E_NOMEM;
14137 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014138 //
14139 // Fill wdiPNOScanReqInfo->wdiPNOScanInfo from pPNOScanReqParams
14140 //
14141 pwdiPNOScanReqInfo->wdiPNOScanInfo.bEnable = pPNOScanReqParams->enable;
14142 pwdiPNOScanReqInfo->wdiPNOScanInfo.wdiModePNO = pPNOScanReqParams->modePNO;
Jeff Johnson295189b2012-06-20 16:38:30 -070014143 pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount =
14144 ( pPNOScanReqParams->ucNetworksCount < WDI_PNO_MAX_SUPP_NETWORKS )?
14145 pPNOScanReqParams->ucNetworksCount : WDI_PNO_MAX_SUPP_NETWORKS ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014146 for ( i = 0; i < pwdiPNOScanReqInfo->wdiPNOScanInfo.ucNetworksCount ; i++)
14147 {
14148 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i],
14149 &pPNOScanReqParams->aNetworks[i],
14150 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.aNetworks[i]));
14151 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014152 /*Scan timer intervals*/
14153 vos_mem_copy(&pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers,
14154 &pPNOScanReqParams->scanTimers,
14155 sizeof(pwdiPNOScanReqInfo->wdiPNOScanInfo.scanTimers));
Jeff Johnson295189b2012-06-20 16:38:30 -070014156 /*Probe template for 2.4GHz band*/
14157 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize =
14158 (pPNOScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14159 pPNOScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014160 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a24GProbeTemplate,
14161 pPNOScanReqParams->p24GProbeTemplate,
14162 pwdiPNOScanReqInfo->wdiPNOScanInfo.us24GProbeSize);
Jeff Johnson295189b2012-06-20 16:38:30 -070014163 /*Probe template for 5GHz band*/
14164 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize =
14165 (pPNOScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14166 pPNOScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
Jeff Johnson295189b2012-06-20 16:38:30 -070014167 vos_mem_copy( &pwdiPNOScanReqInfo->wdiPNOScanInfo.a5GProbeTemplate,
14168 pPNOScanReqParams->p5GProbeTemplate,
14169 pwdiPNOScanReqInfo->wdiPNOScanInfo.us5GProbeSize);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014170 pwdiPNOScanReqInfo->wdiReqStatusCB = WDA_PNOScanReqCallback;
14171 pwdiPNOScanReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014172
Jeff Johnson295189b2012-06-20 16:38:30 -070014173 /* Store Params pass it to WDI */
14174 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiPNOScanReqInfo;
14175 pWdaParams->pWdaContext = pWDA;
14176 /* Store param pointer as passed in by caller */
14177 pWdaParams->wdaMsgParam = pPNOScanReqParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014178 status = WDI_SetPreferredNetworkReq(pwdiPNOScanReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014179 (WDI_PNOScanCb)WDA_PNOScanRespCallback, pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014180 if(IS_WDI_STATUS_FAILURE(status))
14181 {
14182 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14183 "Failure in Set PNO REQ WDI API, free all the memory " );
Vinay Krishna Erannaf0e523b2014-03-01 21:00:16 +053014184 if(pPNOScanReqParams->statusCallback)
14185 {
14186 pPNOScanReqParams->statusCallback(pPNOScanReqParams->callbackContext,
14187 VOS_STATUS_E_FAILURE);
14188 }
14189
Jeff Johnson295189b2012-06-20 16:38:30 -070014190 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14191 vos_mem_free(pWdaParams->wdaMsgParam);
14192 pWdaParams->wdaWdiApiMsgParam = NULL;
14193 pWdaParams->wdaMsgParam = NULL;
14194 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014195 return CONVERT_WDI2VOS_STATUS(status) ;
14196}
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014197
14198#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14199
14200void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
14201{
14202 /*Convert the CSR Auth types to WDI Auth types */
14203 switch (csrAuthType)
14204 {
14205 case eCSR_AUTH_TYPE_OPEN_SYSTEM:
14206 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14207 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014208#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014209 case eCSR_AUTH_TYPE_CCKM_WPA:
14210 *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
14211 break;
14212#endif
14213 case eCSR_AUTH_TYPE_WPA:
14214 *AuthType = eWDA_AUTH_TYPE_WPA;
14215 break;
14216 case eCSR_AUTH_TYPE_WPA_PSK:
14217 *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
14218 break;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014219#ifdef FEATURE_WLAN_ESE
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014220 case eCSR_AUTH_TYPE_CCKM_RSN:
14221 *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
14222 break;
14223#endif
14224 case eCSR_AUTH_TYPE_RSN:
14225 *AuthType = eWDA_AUTH_TYPE_RSN;
14226 break;
14227 case eCSR_AUTH_TYPE_RSN_PSK:
14228 *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
14229 break;
14230#if defined WLAN_FEATURE_VOWIFI_11R
14231 case eCSR_AUTH_TYPE_FT_RSN:
14232 *AuthType = eWDA_AUTH_TYPE_FT_RSN;
14233 break;
14234 case eCSR_AUTH_TYPE_FT_RSN_PSK:
14235 *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
14236 break;
14237#endif
14238#ifdef FEATURE_WLAN_WAPI
14239 case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
14240 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
14241 break;
14242 case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
14243 *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
14244 break;
14245#endif /* FEATURE_WLAN_WAPI */
14246 case eCSR_AUTH_TYPE_SHARED_KEY:
14247 case eCSR_AUTH_TYPE_AUTOSWITCH:
14248 *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
14249 break;
14250#if 0
14251 case eCSR_AUTH_TYPE_SHARED_KEY:
14252 *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
14253 break;
14254 case eCSR_AUTH_TYPE_AUTOSWITCH:
14255 *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
14256#endif
14257 default:
14258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14259 "%s: Unknown Auth Type", __func__);
14260 break;
14261 }
14262}
14263void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
14264{
14265 switch (csrEncrType)
14266 {
14267 case eCSR_ENCRYPT_TYPE_NONE:
14268 *EncrType = WDI_ED_NONE;
14269 break;
14270 case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
14271 case eCSR_ENCRYPT_TYPE_WEP40:
14272 *EncrType = WDI_ED_WEP40;
14273 break;
14274 case eCSR_ENCRYPT_TYPE_WEP104:
14275 case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
14276 *EncrType = WDI_ED_WEP104;
14277 break;
14278 case eCSR_ENCRYPT_TYPE_TKIP:
14279 *EncrType = WDI_ED_TKIP;
14280 break;
14281 case eCSR_ENCRYPT_TYPE_AES:
14282 *EncrType = WDI_ED_CCMP;
14283 break;
14284#ifdef WLAN_FEATURE_11W
14285 case eCSR_ENCRYPT_TYPE_AES_CMAC:
14286 *EncrType = WDI_ED_AES_128_CMAC;
14287 break;
14288#endif
14289#ifdef FEATURE_WLAN_WAPI
14290 case eCSR_ENCRYPT_TYPE_WPI:
14291 *EncrType = WDI_ED_WPI;
14292 break;
14293#endif
14294 case eCSR_ENCRYPT_TYPE_ANY:
14295 *EncrType = WDI_ED_ANY;
14296 break;
14297
14298 default:
14299 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14300 "%s: Unknown Encryption Type", __func__);
14301 break;
14302 }
14303}
14304
14305/*
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014306 * FUNCTION: WDA_ProcessRoamScanOffloadReq
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014307 * Request to WDI to set Roam Offload Scan
14308 */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014309VOS_STATUS WDA_ProcessRoamScanOffloadReq(tWDA_CbContext *pWDA,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014310 tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
14311{
14312 WDI_Status status;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014313 WDI_RoamScanOffloadReqParamsType *pwdiRoamScanOffloadReqParams =
14314 (WDI_RoamScanOffloadReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014315 tWDA_ReqParams *pWdaParams ;
14316 v_U8_t csrAuthType;
14317 WDI_RoamNetworkType *pwdiRoamNetworkType;
14318 WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
14319 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14320 "------> %s " ,__func__);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014321 if (NULL == pwdiRoamScanOffloadReqParams)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014322 {
14323 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14324 "%s: VOS MEM Alloc Failure", __func__);
14325 VOS_ASSERT(0);
14326 return VOS_STATUS_E_NOMEM;
14327 }
14328 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14329 if (NULL == pWdaParams)
14330 {
14331 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14332 "%s: VOS MEM Alloc Failure", __func__);
14333 VOS_ASSERT(0);
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014334 vos_mem_free(pwdiRoamScanOffloadReqParams);
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014335 return VOS_STATUS_E_NOMEM;
14336 }
14337
14338 pwdiRoamNetworkType =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014339 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014340 pwdiRoamOffloadScanInfo =
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014341 &pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo;
14342 vos_mem_zero (pwdiRoamScanOffloadReqParams,sizeof(WDI_RoamScanOffloadReqParamsType));
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014343 csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
14344 pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
14345 pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
14346 vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
14347 pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
14348 sizeof(pwdiRoamNetworkType->currAPbssid));
14349 WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
14350 csrAuthType);
14351 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
14352 pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
14353 WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
14354 pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
14355 pwdiRoamOffloadScanInfo->LookupThreshold =
14356 pRoamOffloadScanReqParams->LookupThreshold ;
Varun Reddy Yeturu6c5e25c2014-01-09 21:55:37 -080014357 pwdiRoamOffloadScanInfo->RxSensitivityThreshold =
14358 pRoamOffloadScanReqParams->RxSensitivityThreshold;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014359 pwdiRoamOffloadScanInfo->RoamRssiDiff =
14360 pRoamOffloadScanReqParams->RoamRssiDiff ;
Sameer Thalappil4ae66ec2013-11-05 14:17:35 -080014361 pwdiRoamOffloadScanInfo->MAWCEnabled =
14362 pRoamOffloadScanReqParams->MAWCEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014363 pwdiRoamOffloadScanInfo->Command =
14364 pRoamOffloadScanReqParams->Command ;
14365 pwdiRoamOffloadScanInfo->StartScanReason =
14366 pRoamOffloadScanReqParams->StartScanReason ;
14367 pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
14368 pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
14369 pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
14370 pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
14371 pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
14372 pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
14373 pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
14374 pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
14375 pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
14376 pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
Varun Reddy Yeturu5d5e2c62014-02-27 13:31:29 -080014377 pwdiRoamOffloadScanInfo->IsESEEnabled =
14378 pRoamOffloadScanReqParams->IsESEEnabled ;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014379 vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
14380 &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
14381 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
14382 pwdiRoamNetworkType->ssId.ucLength =
14383 pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
14384 vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
14385 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
14386 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
14387 pwdiRoamNetworkType->ChannelCount =
14388 pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
14389 pwdiRoamOffloadScanInfo->ChannelCacheType =
14390 pRoamOffloadScanReqParams->ChannelCacheType;
14391 vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
14392 pRoamOffloadScanReqParams->ValidChannelList,
14393 pRoamOffloadScanReqParams->ValidChannelCount);
14394 pwdiRoamOffloadScanInfo->ValidChannelCount =
14395 pRoamOffloadScanReqParams->ValidChannelCount;
14396 pwdiRoamOffloadScanInfo->us24GProbeSize =
14397 (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14398 pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14399 vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
14400 pRoamOffloadScanReqParams->p24GProbeTemplate,
14401 pwdiRoamOffloadScanInfo->us24GProbeSize);
14402 pwdiRoamOffloadScanInfo->us5GProbeSize =
14403 (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
14404 pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
14405 vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
14406 pRoamOffloadScanReqParams->p5GProbeTemplate,
14407 pwdiRoamOffloadScanInfo->us5GProbeSize);
14408 pwdiRoamOffloadScanInfo->MDID.mdiePresent =
14409 pRoamOffloadScanReqParams->MDID.mdiePresent;
14410 pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
14411 pRoamOffloadScanReqParams->MDID.mobilityDomain;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014412 pwdiRoamOffloadScanInfo->nProbes =
14413 pRoamOffloadScanReqParams->nProbes;
14414 pwdiRoamOffloadScanInfo->HomeAwayTime =
14415 pRoamOffloadScanReqParams->HomeAwayTime;
14416 pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014417 /* Store Params pass it to WDI */
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014418 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014419 pWdaParams->pWdaContext = pWDA;
14420 /* Store param pointer as passed in by caller */
14421 pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
Varun Reddy Yeturu920df212013-05-22 08:07:23 -070014422 status = WDI_RoamScanOffloadReq(pwdiRoamScanOffloadReqParams,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014423 (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
14424 if(IS_WDI_STATUS_FAILURE(status))
14425 {
14426 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14427 "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
14428 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14429 vos_mem_free(pWdaParams->wdaMsgParam);
14430 pWdaParams->wdaWdiApiMsgParam = NULL;
14431 pWdaParams->wdaMsgParam = NULL;
14432 }
14433 return CONVERT_WDI2VOS_STATUS(status) ;
14434}
14435#endif
14436
Jeff Johnson295189b2012-06-20 16:38:30 -070014437/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014438 * FUNCTION: WDA_RssiFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014439 *
14440 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014441void WDA_RssiFilterRespCallback(WDI_Status status, void* pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014442{
14443 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14444
14445 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014446 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014447
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014448 if(NULL == pWdaParams)
14449 {
14450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014451 "%s: pWdaParams received NULL", __func__);
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014452 VOS_ASSERT(0);
Yue Ma7f44bbe2013-04-12 11:47:39 -070014453 return;
Gopichand Nakkalac7077db2013-03-29 01:34:58 +053014454 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014455
Jeff Johnson295189b2012-06-20 16:38:30 -070014456 vos_mem_free(pWdaParams->wdaMsgParam) ;
14457 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14458 vos_mem_free(pWdaParams) ;
14459
14460 return ;
14461}
14462/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014463 * FUNCTION: WDA_RssiFilterReqCallback
14464 * Free memory.
14465 * Invoked when RSSIFilter REQ failed in WDI and no RSP callback is generated.
14466 */
14467void WDA_RssiFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
14468{
14469 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14470
14471 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14472 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14473
14474 if(NULL == pWdaParams)
14475 {
14476 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14477 "%s: pWdaParams received NULL", __func__);
14478 VOS_ASSERT(0);
14479 return;
14480 }
14481
14482 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14483 {
14484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14485 vos_mem_free(pWdaParams->wdaMsgParam);
14486 vos_mem_free(pWdaParams);
14487 }
14488
14489 return;
14490}
14491/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014492 * FUNCTION: WDA_ProcessSetPreferredNetworkList
14493 * Request to WDI to set Preferred Network List.Offload
14494 */
14495VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA,
14496 tSirSetRSSIFilterReq* pRssiFilterParams)
14497{
Jeff Johnson43971f52012-07-17 12:26:56 -070014498 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014499 WDI_SetRssiFilterReqParamsType *pwdiSetRssiFilterReqInfo =
14500 (WDI_SetRssiFilterReqParamsType *)vos_mem_malloc(sizeof(WDI_SetRssiFilterReqParamsType)) ;
14501 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014502 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014503 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014504 if(NULL == pwdiSetRssiFilterReqInfo)
14505 {
14506 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014507 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014508 VOS_ASSERT(0);
14509 return VOS_STATUS_E_NOMEM;
14510 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014511 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14512 if(NULL == pWdaParams)
14513 {
14514 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014515 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014516 VOS_ASSERT(0);
14517 vos_mem_free(pwdiSetRssiFilterReqInfo);
14518 return VOS_STATUS_E_NOMEM;
14519 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014520 pwdiSetRssiFilterReqInfo->rssiThreshold = pRssiFilterParams->rssiThreshold;
Yue Ma7f44bbe2013-04-12 11:47:39 -070014521 pwdiSetRssiFilterReqInfo->wdiReqStatusCB = WDA_RssiFilterReqCallback;
14522 pwdiSetRssiFilterReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014523
Jeff Johnson295189b2012-06-20 16:38:30 -070014524 /* Store Params pass it to WDI */
14525 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRssiFilterReqInfo;
14526 pWdaParams->pWdaContext = pWDA;
14527 /* Store param pointer as passed in by caller */
14528 pWdaParams->wdaMsgParam = pRssiFilterParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070014529 status = WDI_SetRssiFilterReq( pwdiSetRssiFilterReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014530 (WDI_PNOScanCb)WDA_RssiFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014531 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014532 if(IS_WDI_STATUS_FAILURE(status))
14533 {
14534 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14535 "Failure in Set RSSI Filter REQ WDI API, free all the memory " );
14536 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14537 vos_mem_free(pWdaParams->wdaMsgParam);
14538 pWdaParams->wdaWdiApiMsgParam = NULL;
14539 pWdaParams->wdaMsgParam = NULL;
14540 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014541 return CONVERT_WDI2VOS_STATUS(status) ;
14542}
14543
Jeff Johnson295189b2012-06-20 16:38:30 -070014544/*
14545 * FUNCTION: WDA_ProcessUpdateScanParams
14546 * Request to WDI to update Scan Parameters
14547 */
14548VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA,
14549 tSirUpdateScanParams *pUpdateScanParams)
14550{
Jeff Johnson43971f52012-07-17 12:26:56 -070014551 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014552 WDI_UpdateScanParamsInfoType *wdiUpdateScanParamsInfoType =
14553 (WDI_UpdateScanParamsInfoType *)vos_mem_malloc(
14554 sizeof(WDI_UpdateScanParamsInfoType)) ;
14555 tWDA_ReqParams *pWdaParams ;
14556 v_U8_t i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014557 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014558 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014559 if(NULL == wdiUpdateScanParamsInfoType)
14560 {
14561 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014562 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014563 VOS_ASSERT(0);
14564 return VOS_STATUS_E_NOMEM;
14565 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014566 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14567 if ( NULL == pWdaParams )
14568 {
14569 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014570 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014571 VOS_ASSERT(0);
14572 vos_mem_free(wdiUpdateScanParamsInfoType);
14573 return VOS_STATUS_E_NOMEM;
14574 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014575 //
14576 // Fill wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo from pUpdateScanParams
14577 //
Jeff Johnson295189b2012-06-20 16:38:30 -070014578 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14579 "Update Scan Parameters b11dEnabled %d b11dResolved %d "
14580 "ucChannelCount %d usPassiveMinChTime %d usPassiveMaxChTime"
14581 " %d usActiveMinChTime %d usActiveMaxChTime %d sizeof "
Jeff Johnson9a9ed0d2013-11-26 13:36:52 -080014582 "sir struct %zu wdi struct %zu",
Jeff Johnson295189b2012-06-20 16:38:30 -070014583 pUpdateScanParams->b11dEnabled,
14584 pUpdateScanParams->b11dResolved,
14585 pUpdateScanParams->ucChannelCount,
14586 pUpdateScanParams->usPassiveMinChTime,
14587 pUpdateScanParams->usPassiveMaxChTime,
14588 pUpdateScanParams->usActiveMinChTime,
14589 pUpdateScanParams->usActiveMaxChTime,
14590 sizeof(tSirUpdateScanParams),
14591 sizeof(wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo) );
14592
Jeff Johnson295189b2012-06-20 16:38:30 -070014593 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dEnabled =
14594 pUpdateScanParams->b11dEnabled;
Jeff Johnson295189b2012-06-20 16:38:30 -070014595 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.b11dResolved =
14596 pUpdateScanParams->b11dResolved;
Jeff Johnson295189b2012-06-20 16:38:30 -070014597 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.cbState =
14598 pUpdateScanParams->ucCBState;
Jeff Johnson295189b2012-06-20 16:38:30 -070014599 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMaxChTime =
14600 pUpdateScanParams->usActiveMaxChTime;
14601 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usActiveMinChTime =
14602 pUpdateScanParams->usActiveMinChTime;
14603 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMaxChTime =
14604 pUpdateScanParams->usPassiveMaxChTime;
14605 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.usPassiveMinChTime =
14606 pUpdateScanParams->usPassiveMinChTime;
14607
Jeff Johnson295189b2012-06-20 16:38:30 -070014608 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount =
Pratik Bhalgatd4404592012-11-22 17:49:14 +053014609 (pUpdateScanParams->ucChannelCount < WDI_PNO_MAX_NETW_CHANNELS_EX)?
14610 pUpdateScanParams->ucChannelCount:WDI_PNO_MAX_NETW_CHANNELS_EX;
Jeff Johnson295189b2012-06-20 16:38:30 -070014611
Jeff Johnson295189b2012-06-20 16:38:30 -070014612 for ( i = 0; i <
14613 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.ucChannelCount ;
14614 i++)
14615 {
14616 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14617 "Update Scan Parameters channel: %d",
14618 pUpdateScanParams->aChannels[i]);
14619
14620 wdiUpdateScanParamsInfoType->wdiUpdateScanParamsInfo.aChannels[i] =
14621 pUpdateScanParams->aChannels[i];
14622 }
14623
Yue Ma7f44bbe2013-04-12 11:47:39 -070014624 wdiUpdateScanParamsInfoType->wdiReqStatusCB = WDA_UpdateScanParamsReqCallback;
14625 wdiUpdateScanParamsInfoType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014626
Jeff Johnson295189b2012-06-20 16:38:30 -070014627 /* Store Params pass it to WDI */
14628 pWdaParams->wdaWdiApiMsgParam = wdiUpdateScanParamsInfoType;
14629 pWdaParams->pWdaContext = pWDA;
14630 /* Store param pointer as passed in by caller */
14631 pWdaParams->wdaMsgParam = pUpdateScanParams;
Jeff Johnsone7245742012-09-05 17:12:55 -070014632
Jeff Johnson295189b2012-06-20 16:38:30 -070014633
14634
14635 status = WDI_UpdateScanParamsReq(wdiUpdateScanParamsInfoType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014636 (WDI_UpdateScanParamsCb)WDA_UpdateScanParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014637 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014638 if(IS_WDI_STATUS_FAILURE(status))
14639 {
14640 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14641 "Failure in Update Scan Params EQ WDI API, free all the memory " );
14642 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14643 vos_mem_free(pWdaParams->wdaMsgParam);
14644 vos_mem_free(pWdaParams);
14645 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014646 return CONVERT_WDI2VOS_STATUS(status) ;
14647}
14648#endif // FEATURE_WLAN_SCAN_PNO
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014649
14650#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
14651/*
14652 * FUNCTION: WDA_RoamOffloadScanReqCallback
14653 *
14654 */
14655void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
14656{
14657 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014658 vos_msg_t vosMsg;
14659 wpt_uint8 reason = 0;
14660
Srinivas Girigowda6cf0b822013-06-27 14:00:20 -070014661 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014662 "<------ %s " ,__func__);
14663 if (NULL == pWdaParams)
14664 {
14665 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14666 "%s: pWdaParams received NULL", __func__);
14667 VOS_ASSERT(0) ;
14668 return ;
14669 }
14670 if ( pWdaParams != NULL )
14671 {
14672 if ( pWdaParams->wdaWdiApiMsgParam != NULL )
14673 {
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014674 reason = ((WDI_RoamScanOffloadReqParamsType *)pWdaParams->wdaWdiApiMsgParam)->wdiRoamOffloadScanInfo.StartScanReason;
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014675 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14676 }
14677 if ( pWdaParams->wdaMsgParam != NULL)
14678 {
14679 vos_mem_free(pWdaParams->wdaMsgParam);
14680 }
14681
14682 vos_mem_free(pWdaParams) ;
14683 }
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014684 vosMsg.type = eWNI_SME_ROAM_SCAN_OFFLOAD_RSP;
14685 vosMsg.bodyptr = NULL;
14686 if (WDI_STATUS_SUCCESS != status)
14687 {
14688 reason = 0;
14689 }
14690 vosMsg.bodyval = reason;
14691 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
14692 {
14693 /* free the mem and return */
14694 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Jeff Johnsone384c822013-10-30 12:21:17 -070014695 "%s: Failed to post the rsp to UMAC", __func__);
Varun Reddy Yeturucc661d22013-05-20 11:47:10 -070014696 }
14697
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -070014698 return ;
14699}
14700#endif
14701
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014702/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014703 * FUNCTION: WDA_SetPowerParamsRespCallback
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014704 *
14705 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014706void WDA_SetPowerParamsRespCallback(WDI_Status status, void* pUserData)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014707{
14708 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14709
14710 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14711 "<------ %s " ,__func__);
14712
14713 if(NULL == pWdaParams)
14714 {
14715 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14716 "%s: pWdaParams received NULL", __func__);
14717 VOS_ASSERT(0);
14718 return;
14719 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014720
14721 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14722 vos_mem_free(pWdaParams->wdaMsgParam);
14723 vos_mem_free(pWdaParams);
14724
14725 return;
14726}
14727/*
14728 * FUNCTION: WDA_SetPowerParamsReqCallback
14729 * Free memory.
14730 * Invoked when SetPowerParams REQ failed in WDI and no RSP callback is generated.
14731 */
14732void WDA_SetPowerParamsReqCallback(WDI_Status wdiStatus, void* pUserData)
14733{
14734 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14735
14736 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14737 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14738
14739 if(NULL == pWdaParams)
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014740 {
Yue Ma7f44bbe2013-04-12 11:47:39 -070014741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14742 "%s: pWdaParams received NULL", __func__);
14743 VOS_ASSERT(0);
14744 return;
14745 }
14746
14747 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14748 {
14749 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14750 vos_mem_free(pWdaParams->wdaMsgParam);
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014751 vos_mem_free(pWdaParams);
14752 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014753
Mahesh Kumar Kalikot Veetil2aad8d82013-02-07 12:31:28 -080014754 return;
14755}
14756
Jeff Johnson295189b2012-06-20 16:38:30 -070014757#ifdef WLAN_FEATURE_PACKET_FILTERING
14758/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014759 * FUNCTION: WDA_8023MulticastListRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014760 *
14761 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014762void WDA_8023MulticastListRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014763 WDI_RcvFltPktSetMcListRspParamsType *pwdiRcvFltPktSetMcListRspInfo,
14764 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014765{
14766 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014767 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014768 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014769 if(NULL == pWdaParams)
14770 {
14771 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014772 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014773 VOS_ASSERT(0) ;
14774 return ;
14775 }
14776
14777 vos_mem_free(pWdaParams->wdaMsgParam) ;
14778 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14779 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014780 //print a msg, nothing else to do
14781 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014782 "WDA_8023MulticastListRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014783 return ;
14784}
Jeff Johnson295189b2012-06-20 16:38:30 -070014785/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014786 * FUNCTION: WDA_8023MulticastListReqCallback
14787 * Free memory.
14788 * Invoked when 8023MulticastList REQ failed in WDI and no RSP callback is generated.
14789 */
14790void WDA_8023MulticastListReqCallback(WDI_Status wdiStatus, void* pUserData)
14791{
14792 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14793
14794 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14795 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
14796
14797 if(NULL == pWdaParams)
14798 {
14799 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14800 "%s: pWdaParams received NULL", __func__);
14801 VOS_ASSERT(0);
14802 return;
14803 }
14804
14805 if(IS_WDI_STATUS_FAILURE(wdiStatus))
14806 {
14807 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14808 vos_mem_free(pWdaParams->wdaMsgParam);
14809 vos_mem_free(pWdaParams);
14810 }
14811
14812 return;
14813}
14814/*
Jeff Johnson295189b2012-06-20 16:38:30 -070014815 * FUNCTION: WDA_Process8023MulticastListReq
14816 * Request to WDI to add 8023 Multicast List
14817 */
14818VOS_STATUS WDA_Process8023MulticastListReq (tWDA_CbContext *pWDA,
14819 tSirRcvFltMcAddrList *pRcvFltMcAddrList)
14820{
Jeff Johnson43971f52012-07-17 12:26:56 -070014821 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014822 WDI_RcvFltPktSetMcListReqParamsType *pwdiFltPktSetMcListReqParamsType = NULL;
14823 tWDA_ReqParams *pWdaParams ;
14824 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014825 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014826 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014827 pwdiFltPktSetMcListReqParamsType =
14828 (WDI_RcvFltPktSetMcListReqParamsType *)vos_mem_malloc(
14829 sizeof(WDI_RcvFltPktSetMcListReqParamsType)
14830 ) ;
14831 if(NULL == pwdiFltPktSetMcListReqParamsType)
14832 {
14833 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014834 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014835 return VOS_STATUS_E_NOMEM;
14836 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014837 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14838 if(NULL == pWdaParams)
14839 {
14840 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014841 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014842 vos_mem_free(pwdiFltPktSetMcListReqParamsType);
14843 return VOS_STATUS_E_NOMEM;
14844 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014845
Jeff Johnson295189b2012-06-20 16:38:30 -070014846 //
14847 // Fill pwdiFltPktSetMcListReqParamsType from pRcvFltMcAddrList
14848 //
14849 pwdiFltPktSetMcListReqParamsType->mcAddrList.ulMulticastAddrCnt =
Jeff Johnsone7245742012-09-05 17:12:55 -070014850 pRcvFltMcAddrList->ulMulticastAddrCnt;
14851
14852 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.selfMacAddr,
14853 pRcvFltMcAddrList->selfMacAddr, sizeof(tSirMacAddr));
14854 vos_mem_copy(pwdiFltPktSetMcListReqParamsType->mcAddrList.bssId,
14855 pRcvFltMcAddrList->bssId, sizeof(tSirMacAddr));
14856
Jeff Johnson295189b2012-06-20 16:38:30 -070014857 for( i = 0; i < pRcvFltMcAddrList->ulMulticastAddrCnt; i++ )
14858 {
14859 vos_mem_copy(&(pwdiFltPktSetMcListReqParamsType->mcAddrList.multicastAddr[i]),
14860 &(pRcvFltMcAddrList->multicastAddr[i]),
14861 sizeof(tSirMacAddr));
14862 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070014863 pwdiFltPktSetMcListReqParamsType->wdiReqStatusCB = WDA_8023MulticastListReqCallback;
14864 pwdiFltPktSetMcListReqParamsType->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070014865
Jeff Johnson295189b2012-06-20 16:38:30 -070014866 /* Store Params pass it to WDI */
14867 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiFltPktSetMcListReqParamsType;
14868 pWdaParams->pWdaContext = pWDA;
14869 /* Store param pointer as passed in by caller */
14870 pWdaParams->wdaMsgParam = pRcvFltMcAddrList;
Jeff Johnson295189b2012-06-20 16:38:30 -070014871 status = WDI_8023MulticastListReq(
14872 pwdiFltPktSetMcListReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070014873 (WDI_8023MulticastListCb)WDA_8023MulticastListRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070014874 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070014875 if(IS_WDI_STATUS_FAILURE(status))
14876 {
14877 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14878 "Failure in WDA_Process8023MulticastListReq(), free all the memory " );
14879 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
14880 vos_mem_free(pWdaParams->wdaMsgParam);
14881 vos_mem_free(pWdaParams);
14882 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014883 return CONVERT_WDI2VOS_STATUS(status) ;
14884}
Jeff Johnson295189b2012-06-20 16:38:30 -070014885/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014886 * FUNCTION: WDA_ReceiveFilterSetFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070014887 *
14888 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014889void WDA_ReceiveFilterSetFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070014890 WDI_SetRcvPktFilterRspParamsType *pwdiSetRcvPktFilterRspInfo,
14891 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070014892{
14893 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070014894 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014895 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014896 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
Jeff Johnson295189b2012-06-20 16:38:30 -070014897 if(NULL == pWdaParams)
14898 {
14899 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014900 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014901 VOS_ASSERT(0) ;
14902 return ;
14903 }
14904
14905 vos_mem_free(pWdaParams->wdaMsgParam) ;
14906 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14907 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070014908 //print a msg, nothing else to do
14909 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014910 "WDA_ReceiveFilterSetFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070014911 return ;
14912}
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014913
14914/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070014915 * FUNCTION: WDA_ReceiveFilterSetFilterReqCallback
14916 * Free memory.
14917 * Invoked when ReceiveFilterSetFilter REQ failed in WDI and no RSP callback is generated.
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014918 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070014919void WDA_ReceiveFilterSetFilterReqCallback(WDI_Status wdiStatus,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080014920 void* pUserData)
14921{
14922 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
14923
14924 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14925 "<------ %s, wdiStatus: %d",
14926 __func__, wdiStatus);
14927
14928 if (NULL == pWdaParams)
14929 {
14930 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
14931 "%s: Invalid pWdaParams pointer", __func__);
14932 VOS_ASSERT(0);
14933 return;
14934 }
14935
14936 if (IS_WDI_STATUS_FAILURE(wdiStatus))
14937 {
14938 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
14939 vos_mem_free(pWdaParams->wdaMsgParam);
14940 vos_mem_free(pWdaParams);
14941 }
14942
14943 return;
14944}
14945
Jeff Johnson295189b2012-06-20 16:38:30 -070014946/*
14947 * FUNCTION: WDA_ProcessReceiveFilterSetFilterReq
14948 * Request to WDI to set Receive Filters
14949 */
14950VOS_STATUS WDA_ProcessReceiveFilterSetFilterReq (tWDA_CbContext *pWDA,
14951 tSirRcvPktFilterCfgType *pRcvPktFilterCfg)
14952{
Jeff Johnson43971f52012-07-17 12:26:56 -070014953 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070014954 v_SIZE_t allocSize = sizeof(WDI_SetRcvPktFilterReqParamsType) +
14955 ((pRcvPktFilterCfg->numFieldParams - 1) * sizeof(tSirRcvPktFilterFieldParams));
14956 WDI_SetRcvPktFilterReqParamsType *pwdiSetRcvPktFilterReqParamsType =
14957 (WDI_SetRcvPktFilterReqParamsType *)vos_mem_malloc(allocSize) ;
14958 tWDA_ReqParams *pWdaParams ;
14959 tANI_U8 i;
Jeff Johnson295189b2012-06-20 16:38:30 -070014960 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014961 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014962 if(NULL == pwdiSetRcvPktFilterReqParamsType)
14963 {
14964 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014965 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014966 VOS_ASSERT(0);
14967 return VOS_STATUS_E_NOMEM;
14968 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014969 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
14970 if(NULL == pWdaParams)
14971 {
14972 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070014973 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070014974 VOS_ASSERT(0);
14975 vos_mem_free(pwdiSetRcvPktFilterReqParamsType);
14976 return VOS_STATUS_E_NOMEM;
14977 }
Jeff Johnson295189b2012-06-20 16:38:30 -070014978 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId = pRcvPktFilterCfg->filterId;
14979 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType = pRcvPktFilterCfg->filterType;
14980 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams = pRcvPktFilterCfg->numFieldParams;
14981 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime = pRcvPktFilterCfg->coalesceTime;
Jeff Johnsone7245742012-09-05 17:12:55 -070014982 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.selfMacAddr,
14983 pRcvPktFilterCfg->selfMacAddr, sizeof(wpt_macAddr));
14984
14985 vos_mem_copy(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.bssId,
14986 pRcvPktFilterCfg->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070014987
14988 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
14989 "FID %d FT %d NParams %d CT %d",
14990 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterId,
14991 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.filterType,
14992 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams,
14993 pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.coalesceTime);
Jeff Johnson295189b2012-06-20 16:38:30 -070014994 for ( i = 0; i < pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.numFieldParams; i++ )
14995 {
14996 wpalMemoryCopy(&pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i],
14997 &pRcvPktFilterCfg->paramsData[i],
14998 sizeof(pwdiSetRcvPktFilterReqParamsType->wdiPktFilterCfg.paramsData[i]));
Jeff Johnson295189b2012-06-20 16:38:30 -070014999 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015000 "Proto %d Comp Flag %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015001 pwdiSetRcvPktFilterReqParamsType->
15002 wdiPktFilterCfg.paramsData[i].protocolLayer,
15003 pwdiSetRcvPktFilterReqParamsType->
15004 wdiPktFilterCfg.paramsData[i].cmpFlag);
Jeff Johnson295189b2012-06-20 16:38:30 -070015005 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015006 "Data Offset %d Data Len %d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015007 pwdiSetRcvPktFilterReqParamsType->
15008 wdiPktFilterCfg.paramsData[i].dataOffset,
15009 pwdiSetRcvPktFilterReqParamsType->
15010 wdiPktFilterCfg.paramsData[i].dataLength);
Jeff Johnson295189b2012-06-20 16:38:30 -070015011 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015012 "CData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015013 pwdiSetRcvPktFilterReqParamsType->
15014 wdiPktFilterCfg.paramsData[i].compareData[0],
15015 pwdiSetRcvPktFilterReqParamsType->
15016 wdiPktFilterCfg.paramsData[i].compareData[1],
15017 pwdiSetRcvPktFilterReqParamsType->
15018 wdiPktFilterCfg.paramsData[i].compareData[2],
15019 pwdiSetRcvPktFilterReqParamsType->
15020 wdiPktFilterCfg.paramsData[i].compareData[3],
15021 pwdiSetRcvPktFilterReqParamsType->
15022 wdiPktFilterCfg.paramsData[i].compareData[4],
15023 pwdiSetRcvPktFilterReqParamsType->
15024 wdiPktFilterCfg.paramsData[i].compareData[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015025 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015026 "MData: %d:%d:%d:%d:%d:%d",
Jeff Johnson295189b2012-06-20 16:38:30 -070015027 pwdiSetRcvPktFilterReqParamsType->
15028 wdiPktFilterCfg.paramsData[i].dataMask[0],
15029 pwdiSetRcvPktFilterReqParamsType->
15030 wdiPktFilterCfg.paramsData[i].dataMask[1],
15031 pwdiSetRcvPktFilterReqParamsType->
15032 wdiPktFilterCfg.paramsData[i].dataMask[2],
15033 pwdiSetRcvPktFilterReqParamsType->
15034 wdiPktFilterCfg.paramsData[i].dataMask[3],
15035 pwdiSetRcvPktFilterReqParamsType->
15036 wdiPktFilterCfg.paramsData[i].dataMask[4],
15037 pwdiSetRcvPktFilterReqParamsType->
15038 wdiPktFilterCfg.paramsData[i].dataMask[5]);
Jeff Johnson295189b2012-06-20 16:38:30 -070015039 }
Yue Ma7f44bbe2013-04-12 11:47:39 -070015040 pwdiSetRcvPktFilterReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterSetFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015041 pwdiSetRcvPktFilterReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015042 /* Store Params pass it to WDI */
15043 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetRcvPktFilterReqParamsType;
15044 pWdaParams->pWdaContext = pWDA;
15045 /* Store param pointer as passed in by caller */
15046 pWdaParams->wdaMsgParam = pRcvPktFilterCfg;
Jeff Johnson295189b2012-06-20 16:38:30 -070015047 status = WDI_ReceiveFilterSetFilterReq(pwdiSetRcvPktFilterReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015048 (WDI_ReceiveFilterSetFilterCb)WDA_ReceiveFilterSetFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015049 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015050 if(IS_WDI_STATUS_FAILURE(status))
15051 {
15052 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15053 "Failure in SetFilter(),free all the memory,status %d ",status);
15054 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15055 vos_mem_free(pWdaParams->wdaMsgParam);
15056 vos_mem_free(pWdaParams);
15057 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015058 return CONVERT_WDI2VOS_STATUS(status) ;
15059}
Jeff Johnson295189b2012-06-20 16:38:30 -070015060/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015061 * FUNCTION: WDA_FilterMatchCountRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015062 *
15063 */
Yue Ma7f44bbe2013-04-12 11:47:39 -070015064void WDA_FilterMatchCountRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015065 WDI_RcvFltPktMatchCntRspParamsType *pwdiRcvFltPktMatchRspParams,
15066 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015067{
15068 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15069 tWDA_CbContext *pWDA;
15070 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntReq;
15071 tpSirRcvFltPktMatchRsp pRcvFltPktMatchCntRsp =
15072 vos_mem_malloc(sizeof(tSirRcvFltPktMatchRsp));
15073 tANI_U8 i;
15074 vos_msg_t vosMsg;
15075
15076 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015077 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015078 /*WDA_VOS_ASSERT(NULL != pWdaParams);*/
15079
Jeff Johnsone7245742012-09-05 17:12:55 -070015080 if(NULL == pRcvFltPktMatchCntRsp)
15081 {
15082 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015083 "%s: pRcvFltPktMatchCntRsp is NULL", __func__);
Jeff Johnsone7245742012-09-05 17:12:55 -070015084 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015085 vos_mem_free(pWdaParams);
Jeff Johnsone7245742012-09-05 17:12:55 -070015086 return ;
15087 }
15088
Jeff Johnson295189b2012-06-20 16:38:30 -070015089 if(NULL == pWdaParams)
15090 {
15091 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015092 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015093 VOS_ASSERT(0) ;
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015094 vos_mem_free(pRcvFltPktMatchCntRsp);
Jeff Johnson295189b2012-06-20 16:38:30 -070015095 return ;
15096 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015097 pWDA = (tWDA_CbContext *)pWdaParams->pWdaContext ;
15098 pRcvFltPktMatchCntReq = (tpSirRcvFltPktMatchRsp)pWdaParams->wdaMsgParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015099 // Fill pRcvFltPktMatchCntRsp from pRcvFltPktMatchCntReq
15100 vos_mem_zero(pRcvFltPktMatchCntRsp,sizeof(tSirRcvFltPktMatchRsp));
15101
15102 /* Message Header */
15103 pRcvFltPktMatchCntRsp->mesgType = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15104 pRcvFltPktMatchCntRsp->mesgLen = sizeof(tSirRcvFltPktMatchRsp);
15105
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015106 pRcvFltPktMatchCntRsp->status = pwdiRcvFltPktMatchRspParams->wdiStatus;
Jeff Johnson295189b2012-06-20 16:38:30 -070015107
15108 for (i = 0; i < SIR_MAX_NUM_FILTERS; i++)
15109 {
15110 pRcvFltPktMatchCntRsp->filterMatchCnt[i].filterId = pRcvFltPktMatchCntReq->filterMatchCnt[i].filterId;
15111 pRcvFltPktMatchCntRsp->filterMatchCnt[i].matchCnt = pRcvFltPktMatchCntReq->filterMatchCnt[i].matchCnt;
15112 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015113 /* VOS message wrapper */
15114 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15115 vosMsg.bodyptr = (void *)pRcvFltPktMatchCntRsp;
15116 vosMsg.bodyval = 0;
15117 if (VOS_STATUS_SUCCESS != vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg))
15118 {
15119 /* free the mem and return */
15120 vos_mem_free((v_VOID_t *)pRcvFltPktMatchCntRsp);
15121 }
15122
15123 vos_mem_free(pWdaParams->wdaMsgParam) ;
15124 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15125 vos_mem_free(pWdaParams) ;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015126
15127 return;
15128}
15129/*
15130 * FUNCTION: WDA_FilterMatchCountReqCallback
15131 * Free memory and send RSP back to SME.
15132 * Invoked when FilterMatchCount REQ failed in WDI and no RSP callback is generated.
15133 */
15134void WDA_FilterMatchCountReqCallback(WDI_Status wdiStatus, void * pUserData)
15135{
15136 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15137 vos_msg_t vosMsg;
15138
15139 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15140 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15141
15142 if(NULL == pWdaParams)
15143 {
15144 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15145 "%s: pWdaParams received NULL", __func__);
15146 VOS_ASSERT(0);
15147 return;
15148 }
15149
15150 /* VOS message wrapper */
15151 vosMsg.type = eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP;
15152 vosMsg.bodyptr = NULL;
15153 vosMsg.bodyval = 0;
15154
15155 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15156 {
15157 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15158 vos_mem_free(pWdaParams->wdaMsgParam);
15159 vos_mem_free(pWdaParams);
15160 vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t*)&vosMsg);
15161 }
15162
15163 return;
Jeff Johnson295189b2012-06-20 16:38:30 -070015164}
Jeff Johnson295189b2012-06-20 16:38:30 -070015165/*
15166 * FUNCTION: WDA_ProcessPacketFilterMatchCountReq
15167 * Request to WDI to get PC Filter Match Count
15168 */
15169VOS_STATUS WDA_ProcessPacketFilterMatchCountReq (tWDA_CbContext *pWDA, tpSirRcvFltPktMatchRsp pRcvFltPktMatchRsp)
15170{
Jeff Johnson43971f52012-07-17 12:26:56 -070015171 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015172 WDI_RcvFltPktMatchCntReqParamsType *pwdiRcvFltPktMatchCntReqParamsType =
15173 (WDI_RcvFltPktMatchCntReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktMatchCntReqParamsType));
15174 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015175 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015176 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015177 if(NULL == pwdiRcvFltPktMatchCntReqParamsType)
15178 {
15179 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015180 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015181 VOS_ASSERT(0);
15182 return VOS_STATUS_E_NOMEM;
15183 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015184 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15185 if(NULL == pWdaParams)
15186 {
15187 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015188 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015189 VOS_ASSERT(0);
15190 vos_mem_free(pwdiRcvFltPktMatchCntReqParamsType);
15191 return VOS_STATUS_E_NOMEM;
15192 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015193
Yue Ma7f44bbe2013-04-12 11:47:39 -070015194 pwdiRcvFltPktMatchCntReqParamsType->wdiReqStatusCB = WDA_FilterMatchCountReqCallback;
15195 pwdiRcvFltPktMatchCntReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015196
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015197 vos_mem_copy( pwdiRcvFltPktMatchCntReqParamsType->bssId,
15198 pRcvFltPktMatchRsp->bssId,
15199 sizeof(wpt_macAddr));
15200
Jeff Johnson295189b2012-06-20 16:38:30 -070015201 /* Store Params pass it to WDI */
15202 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktMatchCntReqParamsType;
15203 pWdaParams->pWdaContext = pWDA;
15204 /* Store param pointer as passed in by caller */
15205 pWdaParams->wdaMsgParam = pRcvFltPktMatchRsp;
Jeff Johnson295189b2012-06-20 16:38:30 -070015206 status = WDI_FilterMatchCountReq(pwdiRcvFltPktMatchCntReqParamsType,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015207 (WDI_FilterMatchCountCb)WDA_FilterMatchCountRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015208 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015209 if(IS_WDI_STATUS_FAILURE(status))
15210 {
15211 /* failure returned by WDI API */
15212 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15213 "Failure in WDI_FilterMatchCountReq(), free all the memory " );
15214 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15215 vos_mem_free(pWdaParams) ;
15216 pRcvFltPktMatchRsp->status = eSIR_FAILURE ;
15217 WDA_SendMsg(pWDA, WDA_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP, (void *)pRcvFltPktMatchRsp, 0) ;
15218 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015219 return CONVERT_WDI2VOS_STATUS(status) ;
15220}
Jeff Johnson295189b2012-06-20 16:38:30 -070015221/*
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015222 * FUNCTION: WDA_ReceiveFilterClearFilterRespCallback
Jeff Johnson295189b2012-06-20 16:38:30 -070015223 *
15224 */
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015225void WDA_ReceiveFilterClearFilterRespCallback(
Madan Mohan Koyyalamudi96dd30d2012-10-05 17:24:51 -070015226 WDI_RcvFltPktClearRspParamsType *pwdiRcvFltPktClearRspParamsType,
15227 void * pUserData)
Jeff Johnson295189b2012-06-20 16:38:30 -070015228{
15229 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
Jeff Johnson295189b2012-06-20 16:38:30 -070015230 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015231 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015232/* WDA_VOS_ASSERT(NULL != pWdaParams); */
15233 if(NULL == pWdaParams)
15234 {
15235 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015236 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015237 VOS_ASSERT(0) ;
15238 return ;
15239 }
15240
15241 vos_mem_free(pWdaParams->wdaMsgParam) ;
15242 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15243 vos_mem_free(pWdaParams) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015244 //print a msg, nothing else to do
15245 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015246 "WDA_ReceiveFilterClearFilterRespCallback invoked " );
Jeff Johnson295189b2012-06-20 16:38:30 -070015247 return ;
15248}
Jeff Johnson295189b2012-06-20 16:38:30 -070015249/*
Yue Ma7f44bbe2013-04-12 11:47:39 -070015250 * FUNCTION: WDA_ReceiveFilterClearFilterReqCallback
15251 * Free memory.
15252 * Invoked when ReceiveFilterClearFilter REQ failed in WDI and no RSP callback is generated.
15253 */
15254void WDA_ReceiveFilterClearFilterReqCallback(WDI_Status wdiStatus, void* pUserData)
15255{
15256 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15257
15258 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15259 "<------ %s, wdiStatus: %d", __func__, wdiStatus);
15260
15261 if(NULL == pWdaParams)
15262 {
15263 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15264 "%s: Invalid pWdaParams pointer", __func__);
15265 VOS_ASSERT(0);
15266 return;
15267 }
15268
15269 if(IS_WDI_STATUS_FAILURE(wdiStatus))
15270 {
15271 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15272 vos_mem_free(pWdaParams->wdaMsgParam);
15273 vos_mem_free(pWdaParams);
15274 }
15275
15276 return;
15277}
15278/*
Jeff Johnson295189b2012-06-20 16:38:30 -070015279 * FUNCTION: WDA_ProcessReceiveFilterClearFilterReq
15280 * Request to WDI to clear Receive Filters
15281 */
15282VOS_STATUS WDA_ProcessReceiveFilterClearFilterReq (tWDA_CbContext *pWDA,
15283 tSirRcvFltPktClearParam *pRcvFltPktClearParam)
15284{
Jeff Johnson43971f52012-07-17 12:26:56 -070015285 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015286 WDI_RcvFltPktClearReqParamsType *pwdiRcvFltPktClearReqParamsType =
15287 (WDI_RcvFltPktClearReqParamsType *)vos_mem_malloc(sizeof(WDI_RcvFltPktClearReqParamsType));
15288 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015289 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015290 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015291 if(NULL == pwdiRcvFltPktClearReqParamsType)
15292 {
15293 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015294 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015295 VOS_ASSERT(0);
15296 return VOS_STATUS_E_NOMEM;
15297 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015298 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15299 if(NULL == pWdaParams)
15300 {
15301 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015302 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015303 VOS_ASSERT(0);
15304 vos_mem_free(pwdiRcvFltPktClearReqParamsType);
15305 return VOS_STATUS_E_NOMEM;
15306 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015307 pwdiRcvFltPktClearReqParamsType->filterClearParam.status = pRcvFltPktClearParam->status;
15308 pwdiRcvFltPktClearReqParamsType->filterClearParam.filterId = pRcvFltPktClearParam->filterId;
Jeff Johnsone7245742012-09-05 17:12:55 -070015309 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.selfMacAddr,
15310 pRcvFltPktClearParam->selfMacAddr, sizeof(wpt_macAddr));
15311 vos_mem_copy(pwdiRcvFltPktClearReqParamsType->filterClearParam.bssId,
15312 pRcvFltPktClearParam->bssId, sizeof(wpt_macAddr));
Jeff Johnson295189b2012-06-20 16:38:30 -070015313
Yue Ma7f44bbe2013-04-12 11:47:39 -070015314 pwdiRcvFltPktClearReqParamsType->wdiReqStatusCB = WDA_ReceiveFilterClearFilterReqCallback;
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015315 pwdiRcvFltPktClearReqParamsType->pUserData = pWdaParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015316 /* Store Params pass it to WDI */
15317 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRcvFltPktClearReqParamsType;
15318 pWdaParams->pWdaContext = pWDA;
15319 /* Store param pointer as passed in by caller */
15320 pWdaParams->wdaMsgParam = pRcvFltPktClearParam;
Jeff Johnson295189b2012-06-20 16:38:30 -070015321 status = WDI_ReceiveFilterClearFilterReq(pwdiRcvFltPktClearReqParamsType,
Tushnim Bhattacharyya4858ab62013-03-08 10:15:42 -080015322 (WDI_ReceiveFilterClearFilterCb)WDA_ReceiveFilterClearFilterRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015323 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015324 if(IS_WDI_STATUS_FAILURE(status))
15325 {
15326 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15327 "Failure in WDA_ProcessReceiveFilterClearFilterReq(), free all the memory " );
15328 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
Venkata Prathyusha Kuntupalli17e75ce2013-02-05 11:39:32 -080015329 vos_mem_free(pWdaParams->wdaMsgParam);
15330 vos_mem_free(pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015331 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015332 return CONVERT_WDI2VOS_STATUS(status) ;
15333}
15334#endif // WLAN_FEATURE_PACKET_FILTERING
15335
Jeff Johnson295189b2012-06-20 16:38:30 -070015336/*
15337 * FUNCTION: WDA_ProcessSetPowerParamsReq
15338 * Request to WDI to set power params
15339 */
15340VOS_STATUS WDA_ProcessSetPowerParamsReq(tWDA_CbContext *pWDA,
15341 tSirSetPowerParamsReq *pPowerParams)
15342{
Jeff Johnson43971f52012-07-17 12:26:56 -070015343 WDI_Status status;
Jeff Johnson295189b2012-06-20 16:38:30 -070015344 WDI_SetPowerParamsReqParamsType *pwdiSetPowerParamsReqInfo =
15345 (WDI_SetPowerParamsReqParamsType *)vos_mem_malloc(sizeof(WDI_SetPowerParamsReqParamsType)) ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015346 tWDA_ReqParams *pWdaParams ;
Jeff Johnson295189b2012-06-20 16:38:30 -070015347 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015348 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015349 if(NULL == pwdiSetPowerParamsReqInfo)
15350 {
15351 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015352 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015353 VOS_ASSERT(0);
15354 return VOS_STATUS_E_NOMEM;
15355 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015356 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15357 if(NULL == pWdaParams)
15358 {
15359 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015360 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015361 VOS_ASSERT(0);
15362 vos_mem_free(pwdiSetPowerParamsReqInfo);
15363 return VOS_STATUS_E_NOMEM;
15364 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015365
Jeff Johnson295189b2012-06-20 16:38:30 -070015366
15367 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uIgnoreDTIM =
15368 pPowerParams->uIgnoreDTIM;
Jeff Johnson295189b2012-06-20 16:38:30 -070015369 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uDTIMPeriod =
15370 pPowerParams->uDTIMPeriod;
Jeff Johnson295189b2012-06-20 16:38:30 -070015371 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uListenInterval =
15372 pPowerParams->uListenInterval;
15373 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBcastMcastFilter =
15374 pPowerParams->uBcastMcastFilter;
15375 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uEnableBET =
15376 pPowerParams->uEnableBET;
15377 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uBETInterval =
15378 pPowerParams->uBETInterval;
Yue Mac24062f2013-05-13 17:01:29 -070015379 pwdiSetPowerParamsReqInfo->wdiSetPowerParamsInfo.uMaxLIModulatedDTIM =
15380 pPowerParams->uMaxLIModulatedDTIM;
Yue Ma7f44bbe2013-04-12 11:47:39 -070015381 pwdiSetPowerParamsReqInfo->wdiReqStatusCB = WDA_SetPowerParamsReqCallback;
15382 pwdiSetPowerParamsReqInfo->pUserData = pWdaParams;
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015383
Jeff Johnson295189b2012-06-20 16:38:30 -070015384 /* Store Params pass it to WDI */
15385 pWdaParams->wdaWdiApiMsgParam = (void *)pwdiSetPowerParamsReqInfo;
15386 pWdaParams->pWdaContext = pWDA;
15387 /* Store param pointer as passed in by caller */
15388 pWdaParams->wdaMsgParam = pPowerParams;
Jeff Johnson295189b2012-06-20 16:38:30 -070015389 status = WDI_SetPowerParamsReq( pwdiSetPowerParamsReqInfo,
Yue Ma7f44bbe2013-04-12 11:47:39 -070015390 (WDI_SetPowerParamsCb)WDA_SetPowerParamsRespCallback,
Jeff Johnson295189b2012-06-20 16:38:30 -070015391 pWdaParams);
Jeff Johnson295189b2012-06-20 16:38:30 -070015392 if(IS_WDI_STATUS_FAILURE(status))
15393 {
15394 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15395 "Failure in Set power params REQ WDI API, free all the memory " );
15396 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15397 vos_mem_free(pWdaParams->wdaMsgParam);
15398 pWdaParams->wdaWdiApiMsgParam = NULL;
15399 pWdaParams->wdaMsgParam = NULL;
15400 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015401 return CONVERT_WDI2VOS_STATUS(status) ;
15402}
15403
15404/*
15405 * FUNCTION: WDA_SetTmLevelRspCallback
15406 * Set TM Level response
15407 */
15408void WDA_SetTmLevelRspCallback(WDI_Status status, void* pUserData)
15409{
15410 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15411
15412 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015413 "<------ %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015414
15415 if(NULL == pWdaParams)
15416 {
15417 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015418 "%s: pWdaParams received NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015419 VOS_ASSERT(0) ;
15420 return ;
15421 }
15422
15423 /* Dose not need to send notification to upper layer
15424 * Just free allocated resources */
15425 if( pWdaParams != NULL )
15426 {
15427 if( pWdaParams->wdaWdiApiMsgParam != NULL )
15428 {
15429 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15430 }
15431 vos_mem_free(pWdaParams->wdaMsgParam) ;
15432 vos_mem_free(pWdaParams) ;
15433 }
15434}
15435
15436/*
15437 * FUNCTION: WDA_ProcessSetTmLevelReq
15438 * Set TM Level request
15439 */
15440VOS_STATUS WDA_ProcessSetTmLevelReq(tWDA_CbContext *pWDA,
15441 tAniSetTmLevelReq *setTmLevelReq)
15442{
15443 WDI_Status status = WDI_STATUS_SUCCESS ;
15444 tWDA_ReqParams *pWdaParams ;
15445 WDI_SetTmLevelReqType *wdiSetTmLevelReq =
15446 (WDI_SetTmLevelReqType *)vos_mem_malloc(
15447 sizeof(WDI_SetTmLevelReqType)) ;
15448 if(NULL == wdiSetTmLevelReq)
15449 {
15450 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015451 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015452 VOS_ASSERT(0);
15453 return VOS_STATUS_E_NOMEM;
15454 }
15455
15456 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15457 if(NULL == pWdaParams)
15458 {
15459 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015460 "%s: VOS MEM Alloc Failure", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015461 VOS_ASSERT(0);
15462 vos_mem_free(wdiSetTmLevelReq);
15463 return VOS_STATUS_E_NOMEM;
15464 }
15465
15466 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015467 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015468
15469 wdiSetTmLevelReq->tmMode = setTmLevelReq->tmMode;
15470 wdiSetTmLevelReq->tmLevel = setTmLevelReq->newTmLevel;
15471
15472 pWdaParams->pWdaContext = pWDA;
15473 pWdaParams->wdaMsgParam = setTmLevelReq;
15474 pWdaParams->wdaWdiApiMsgParam = wdiSetTmLevelReq;
15475
15476 status = WDI_SetTmLevelReq(wdiSetTmLevelReq,
15477 (WDI_SetTmLevelCb)WDA_SetTmLevelRspCallback, pWdaParams);
15478
15479 if(IS_WDI_STATUS_FAILURE(status))
15480 {
15481 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Jeff Johnson902c9832012-12-10 14:28:09 -080015482 "Failure setting thermal mitigation level, freeing memory" );
Jeff Johnson295189b2012-06-20 16:38:30 -070015483 vos_mem_free(pWdaParams->wdaMsgParam) ;
15484 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15485 vos_mem_free(pWdaParams) ;
15486 }
15487
15488 return CONVERT_WDI2VOS_STATUS(status) ;
15489}
15490
15491VOS_STATUS WDA_ProcessTxControlInd(tWDA_CbContext *pWDA,
15492 tpTxControlParams pTxCtrlParam)
15493{
15494 VOS_STATUS wdaStatus;
15495
15496 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015497 "------> %s " ,__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015498 if( pTxCtrlParam == NULL )
15499 {
15500 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015501 "%s: Input tpTxControlParams is NULL", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -070015502 return VOS_STATUS_E_FAILURE;
15503 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015504 if( pTxCtrlParam->stopTx == eANI_BOOLEAN_TRUE )
15505 {
15506 wdaStatus = WDA_SuspendDataTx(pWDA);
15507 }
15508 else /* pTxCtrlParam->stopTx == eANI_BOOLEAN_FALSE */
15509 {
15510 wdaStatus = WDA_ResumeDataTx(pWDA);
15511 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015512 return wdaStatus;
15513}
15514
15515 /* FUNCTION WDA_featureCapsExchange
15516 * WDA API to invoke capability exchange between host and FW.
15517 */
15518void WDA_featureCapsExchange(v_PVOID_t pVosContext)
15519{
15520 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015521 "%s:enter", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015522 WDI_featureCapsExchangeReq( NULL, pVosContext);
15523}
15524
Yathish9f22e662012-12-10 14:21:35 -080015525/* FUNCTION WDA_disableCapablityFeature
15526 * WDA API to diable Active mode offload in host.
15527 */
15528void WDA_disableCapablityFeature(tANI_U8 feature_index)
15529{
15530 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15531 "%s:enter", __func__ );
15532 WDI_disableCapablityFeature(feature_index);
15533}
15534
Jeff Johnson295189b2012-06-20 16:38:30 -070015535 /* FUNCTION WDA_getHostWlanFeatCaps
15536 * Wrapper for WDI API, that will return if the feature (enum value).passed
15537 * to this API is supported or not in Host
15538 * return value
15539 * 0 - implies feature is NOT Supported
15540 * any non zero value - implies feature is SUPPORTED
15541 */
15542tANI_U8 WDA_getHostWlanFeatCaps(tANI_U8 featEnumValue)
15543{
15544 return WDI_getHostWlanFeatCaps(featEnumValue);
15545}
15546
15547 /* FUNCTION WDA_getFwWlanFeatCaps
15548 * Wrapper for WDI API, that will return if the feature (enum value).passed
15549 * to this API is supported or not in FW
15550 * return value
15551 * 0 - implies feature is NOT Supported
15552 * any non zero value - implies feature is SUPPORTED
15553 */
15554tANI_U8 WDA_getFwWlanFeatCaps(tANI_U8 featEnumValue)
15555{
15556 return WDI_getFwWlanFeatCaps(featEnumValue);
15557}
15558
Sundaresan Ramachandran76e48e82013-07-15 13:07:17 +053015559
Jeff Johnson295189b2012-06-20 16:38:30 -070015560/*
15561 * FUNCTION: WDA_shutdown
15562 * Shutdown WDA/WDI without handshaking with Riva.
15563 * Synchronous function.
15564 */
15565VOS_STATUS WDA_shutdown(v_PVOID_t pVosContext, wpt_boolean closeTransport)
15566{
15567 WDI_Status wdiStatus;
15568 //tANI_U8 eventIdx = 0;
15569 VOS_STATUS status = VOS_STATUS_SUCCESS;
15570 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Jeff Johnson295189b2012-06-20 16:38:30 -070015571 if (NULL == pWDA)
15572 {
15573 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015574 "%s: Invoked with invalid pWDA", __func__ );
Jeff Johnson295189b2012-06-20 16:38:30 -070015575 VOS_ASSERT(0);
15576 return VOS_STATUS_E_FAILURE;
15577 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015578 /* FTM mode stay START_STATE */
15579 if( (WDA_READY_STATE != pWDA->wdaState) &&
15580 (WDA_INIT_STATE != pWDA->wdaState) &&
15581 (WDA_START_STATE != pWDA->wdaState) )
15582 {
15583 VOS_ASSERT(0);
15584 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015585
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015586 if ( (eDRIVER_TYPE_MFG != pWDA->driverMode) &&
15587 (VOS_TRUE == pWDA->wdaTimersCreated))
Jeff Johnson295189b2012-06-20 16:38:30 -070015588 {
15589 wdaDestroyTimers(pWDA);
Madan Mohan Koyyalamudid57ae632012-11-06 18:42:48 -080015590 pWDA->wdaTimersCreated = VOS_FALSE;
Jeff Johnson295189b2012-06-20 16:38:30 -070015591 }
Leo Chang9d76f622013-08-23 16:34:52 -070015592 else
15593 {
15594 vos_event_destroy(&pWDA->ftmStopDoneEvent);
15595 }
Madan Mohan Koyyalamudida61e7e2012-10-30 18:08:14 -070015596
Jeff Johnson295189b2012-06-20 16:38:30 -070015597 /* call WDI shutdown */
15598 wdiStatus = WDI_Shutdown(closeTransport);
Jeff Johnson295189b2012-06-20 16:38:30 -070015599 if (IS_WDI_STATUS_FAILURE(wdiStatus) )
15600 {
15601 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15602 "error in WDA Stop" );
15603 status = VOS_STATUS_E_FAILURE;
15604 }
15605 /* WDI stop is synchrnous, shutdown is complete when it returns */
15606 pWDA->wdaState = WDA_STOP_STATE;
15607
Jeff Johnson295189b2012-06-20 16:38:30 -070015608 /* shutdown should perform the stop & close actions. */
15609 /* Destroy the event */
15610 status = vos_event_destroy(&pWDA->txFrameEvent);
15611 if(!VOS_IS_STATUS_SUCCESS(status))
15612 {
15613 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015614 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015615 status = VOS_STATUS_E_FAILURE;
15616 }
15617 status = vos_event_destroy(&pWDA->suspendDataTxEvent);
15618 if(!VOS_IS_STATUS_SUCCESS(status))
15619 {
15620 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015621 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015622 status = VOS_STATUS_E_FAILURE;
15623 }
15624 status = vos_event_destroy(&pWDA->waitOnWdiIndicationCallBack);
15625 if(!VOS_IS_STATUS_SUCCESS(status))
15626 {
15627 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Arif Hussainf9587ab2013-11-17 22:01:22 -080015628 "VOS Event destroy failed - status = %d", status);
Jeff Johnson295189b2012-06-20 16:38:30 -070015629 status = VOS_STATUS_E_FAILURE;
15630 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015631 /* free WDA context */
15632 status = vos_free_context(pVosContext,VOS_MODULE_ID_WDA,pWDA);
15633 if ( !VOS_IS_STATUS_SUCCESS(status) )
15634 {
15635 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15636 "error in WDA close " );
15637 status = VOS_STATUS_E_FAILURE;
15638 }
Jeff Johnson295189b2012-06-20 16:38:30 -070015639 return status;
15640}
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015641
Jeff Johnsone7245742012-09-05 17:12:55 -070015642/*
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015643 * FUNCTION: WDA_setNeedShutdown
15644 * WDA stop failed or WDA NVDownload failed
Jeff Johnsone7245742012-09-05 17:12:55 -070015645 */
15646
Madan Mohan Koyyalamudi9d7a27f2012-11-28 15:55:25 -080015647void WDA_setNeedShutdown(v_PVOID_t pVosContext)
Jeff Johnsone7245742012-09-05 17:12:55 -070015648{
15649 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015650 if(pWDA == NULL)
15651 {
15652 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15653 "Could not get the WDA Context pointer" );
15654 return;
15655 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015656 pWDA->needShutdown = TRUE;
15657}
15658/*
15659 * FUNCTION: WDA_needShutdown
15660 * WDA needs a shutdown
15661 */
15662
15663v_BOOL_t WDA_needShutdown(v_PVOID_t pVosContext)
15664{
15665 tWDA_CbContext *pWDA = (tWDA_CbContext *)VOS_GET_WDA_CTXT(pVosContext);
Madan Mohan Koyyalamudi33ef6a22012-10-30 17:44:43 -070015666 if(pWDA == NULL)
15667 {
15668 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15669 "Could not get the WDA Context pointer" );
15670 return 0;
15671 }
15672 return pWDA->needShutdown;
Jeff Johnsone7245742012-09-05 17:12:55 -070015673}
15674
Mohit Khanna4a70d262012-09-11 16:30:12 -070015675#ifdef WLAN_FEATURE_11AC
15676/*
15677 * FUNCTION: WDA_SetBeaconFilterReqCallback
15678 *
15679 */
15680void WDA_SetUpdateOpModeReqCallback(WDI_Status status, void* pUserData)
15681{
15682 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15683 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015684 "<------ %s " ,__func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015685 if(NULL == pWdaParams)
15686 {
15687 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015688 "%s: pWdaParams received NULL", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015689 VOS_ASSERT(0) ;
15690 return ;
15691 }
Jeff Johnsone7245742012-09-05 17:12:55 -070015692
Mohit Khanna4a70d262012-09-11 16:30:12 -070015693 vos_mem_free(pWdaParams->wdaMsgParam) ;
15694 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15695 vos_mem_free(pWdaParams) ;
15696 /*
15697 * No respone required for SetBeaconFilter req so just free the request
15698 * param here
15699 */
15700
15701 return ;
15702}
15703
15704VOS_STATUS WDA_ProcessUpdateOpMode(tWDA_CbContext *pWDA,
15705 tUpdateVHTOpMode *pData)
15706{
15707 WDI_Status status = WDI_STATUS_SUCCESS ;
15708 tWDA_ReqParams *pWdaParams ;
15709 WDI_UpdateVHTOpMode *wdiTemp = (WDI_UpdateVHTOpMode *)vos_mem_malloc(
15710 sizeof(WDI_UpdateVHTOpMode)) ;
15711 if(NULL == wdiTemp)
15712 {
15713 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015714 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015715 VOS_ASSERT(0);
15716 return VOS_STATUS_E_NOMEM;
15717 }
15718 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15719 if(NULL == pWdaParams)
15720 {
15721 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -070015722 "%s: VOS MEM Alloc Failure", __func__);
Mohit Khanna4a70d262012-09-11 16:30:12 -070015723 VOS_ASSERT(0);
15724 vos_mem_free(wdiTemp);
15725 return VOS_STATUS_E_NOMEM;
15726 }
15727
15728 wdiTemp->opMode = pData->opMode;
15729 wdiTemp->staId = pData->staId;
15730
15731 pWdaParams->pWdaContext = pWDA;
15732 /* Store Req pointer, as this will be used for response */
15733 pWdaParams->wdaMsgParam = (void *)pData;
15734 /* store Params pass it to WDI */
15735 pWdaParams->wdaWdiApiMsgParam = (void *)wdiTemp ;
15736
15737 status = WDI_UpdateVHTOpModeReq( wdiTemp, (WDI_UpdateVHTOpModeCb) WDA_SetUpdateOpModeReqCallback, pWdaParams);
15738
15739 if(IS_WDI_STATUS_FAILURE(status))
15740 {
15741 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15742 "Failure in UPDATE VHT OP_MODE REQ Params WDI API, free all the memory " );
15743 vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
15744 vos_mem_free(pWdaParams->wdaMsgParam);
15745 vos_mem_free(pWdaParams);
15746 }
15747 return CONVERT_WDI2VOS_STATUS(status) ;
15748}
15749#endif
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015750
15751/*==========================================================================
15752 FUNCTION WDA_TransportChannelDebug
15753
Madan Mohan Koyyalamudid93f4942012-10-05 15:05:40 -070015754 DESCRIPTION
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015755 Display Transport Channel debugging information
15756 User may request to display DXE channel snapshot
15757 Or if host driver detects any abnormal stcuk may display
15758
15759 PARAMETERS
schang6295e542013-03-12 15:31:23 -070015760 pMac : upper MAC context pointer
Jeff Johnsonb88db982012-12-10 13:34:59 -080015761 displaySnapshot : Display DXE snapshot option
Mihir Shete40a55652014-03-02 14:14:47 +053015762 debugFlags : Enable stall detect features
15763 defined by WPAL_DeviceDebugFlags
15764 These features may effect
15765 data performance.
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015766
15767 RETURN VALUE
15768 NONE
15769
15770===========================================================================*/
15771void WDA_TransportChannelDebug
15772(
schang6295e542013-03-12 15:31:23 -070015773 tpAniSirGlobal pMac,
15774 v_BOOL_t displaySnapshot,
Mihir Shete40a55652014-03-02 14:14:47 +053015775 v_U8_t debugFlags
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015776)
15777{
Mihir Shete40a55652014-03-02 14:14:47 +053015778 WDI_TransportChannelDebug(displaySnapshot, debugFlags);
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070015779 return;
Madan Mohan Koyyalamudi5eec74a2012-09-28 14:59:25 -070015780}
Gopichand Nakkalae620d5a2013-04-26 05:45:57 -070015781
15782/*==========================================================================
15783 FUNCTION WDA_SetEnableSSR
15784
15785 DESCRIPTION
15786 API to enable/disable SSR on WDI timeout
15787
15788 PARAMETERS
15789 enableSSR : enable/disable SSR
15790
15791 RETURN VALUE
15792 NONE
15793
15794===========================================================================*/
15795void WDA_SetEnableSSR(v_BOOL_t enableSSR)
15796{
15797 WDI_SetEnableSSR(enableSSR);
15798}
Leo Chang9056f462013-08-01 19:21:11 -070015799
15800#ifdef FEATURE_WLAN_LPHB
15801/*
15802 * FUNCTION: WDA_LPHBconfRspCallback
15803 *
15804 */
15805void WDA_LPHBconfRspCallback(WDI_Status status, void* pUserData)
15806{
15807 tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
15808
15809 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15810 "<------ %s " ,__func__);
15811 if (NULL == pWdaParams)
15812 {
15813 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15814 "%s: pWdaParams received NULL", __func__);
15815 VOS_ASSERT(0) ;
15816 return ;
15817 }
15818
15819 /* Do not need to send notification to upper layer
15820 * Just free allocated resources */
15821 if (pWdaParams != NULL)
15822 {
15823 if (pWdaParams->wdaWdiApiMsgParam != NULL)
15824 {
15825 vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
15826 }
15827 vos_mem_free(pWdaParams->wdaMsgParam) ;
15828 vos_mem_free(pWdaParams) ;
15829 }
15830
15831 return;
15832}
15833
15834/*
15835 * FUNCTION: WDA_ProcessLPHBConfReq
15836 *
15837 */
15838VOS_STATUS WDA_ProcessLPHBConfReq(tWDA_CbContext *pWDA,
15839 tSirLPHBReq *pData)
15840{
15841 WDI_Status wdiStatus;
15842 tWDA_ReqParams *pWdaParams ;
15843
15844 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15845 "------> %s " , __func__);
15846
15847 pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
15848 if (NULL == pWdaParams)
15849 {
15850 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15851 "%s: VOS MEM Alloc Failure", __func__);
15852 VOS_ASSERT(0);
15853 vos_mem_free(pData);
15854 return VOS_STATUS_E_NOMEM;
15855 }
15856
15857 pWdaParams->pWdaContext = pWDA;
15858 pWdaParams->wdaMsgParam = (void *)pData;
15859 pWdaParams->wdaWdiApiMsgParam = NULL;
15860
15861 wdiStatus = WDI_LPHBConfReq(pData, pWdaParams, WDA_LPHBconfRspCallback);
15862 if (WDI_STATUS_PENDING == wdiStatus)
15863 {
15864 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15865 "Pending received for %s:%d ", __func__, __LINE__);
15866 }
15867 else if (WDI_STATUS_SUCCESS != wdiStatus)
15868 {
15869 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15870 "Failure in %s:%d s %d", __func__, __LINE__, wdiStatus);
15871 vos_mem_free(pWdaParams->wdaMsgParam);
15872 vos_mem_free(pWdaParams);
15873 }
15874
15875 return CONVERT_WDI2VOS_STATUS(wdiStatus);
15876}
15877#endif /* FEATURE_WLAN_LPHB */
15878
c_hpothu92367912014-05-01 15:18:17 +053015879void WDA_GetBcnMissRateCallback(tANI_U8 status, tANI_U32 bcnMissRate,
15880 void* pUserData)
15881{
15882 tSirBcnMissRateInfo *pBcnMissRateInfo = (tSirBcnMissRateInfo *)pUserData;
15883
15884 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15885 "<------ %s " ,__func__);
15886 if (NULL == pBcnMissRateInfo)
15887 {
15888 VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15889 "%s: pWdaParams received NULL", __func__);
15890 VOS_ASSERT(0) ;
15891 return ;
15892 }
15893 if (pBcnMissRateInfo->callback)
15894 {
15895 pBcnMissRateInfo->callback(status, bcnMissRate,
15896 pBcnMissRateInfo->data);
15897 }
15898 vos_mem_free(pUserData);
15899
15900 return;
15901}
15902
15903v_VOID_t WDA_ProcessGetBcnMissRateReq(tWDA_CbContext *pWDA,
15904 tSirBcnMissRateReq *pData)
15905{
15906 WDI_Status wdiStatus;
15907 tSirBcnMissRateInfo *pBcnMissRateInfo;
15908
15909 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15910 "------> %s " , __func__);
15911
15912 pBcnMissRateInfo =
15913 (tSirBcnMissRateInfo *)vos_mem_malloc(sizeof(tSirBcnMissRateInfo));
15914 if (NULL == pBcnMissRateInfo)
15915 {
15916 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
15917 "%s: VOS MEM Alloc Failure", __func__);
15918 VOS_ASSERT(0);
15919 vos_mem_free(pData);
15920 return;
15921 }
15922
15923 pBcnMissRateInfo->callback = (pGetBcnMissRateCB)(pData->callback);
15924 pBcnMissRateInfo->data = pData->data;
15925
15926 wdiStatus = WDI_GetBcnMissRate(pBcnMissRateInfo,
15927 WDA_GetBcnMissRateCallback,
15928 pData->bssid);
15929 if (WDI_STATUS_PENDING == wdiStatus)
15930 {
15931 VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
15932 "Pending received for %s:%d ", __func__, __LINE__);
15933 }
15934 else if (WDI_STATUS_SUCCESS != wdiStatus)
15935 {
15936 if (pBcnMissRateInfo->callback)
15937 {
15938 pBcnMissRateInfo->callback(VOS_STATUS_E_FAILURE,
15939 -1, pBcnMissRateInfo->data);
15940 }
15941 }
15942 vos_mem_free(pData);
15943}